Clean up excessive whitespace at the end of each line using the wspurify tool made by Laszlo Monda
This commit is contained in:
		
							parent
							
								
									a8871c7fba
								
							
						
					
					
						commit
						5a4def7478
					
				
					 760 changed files with 12883 additions and 12164 deletions
				
			
		| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -60,7 +60,7 @@ int main(void)
 | 
			
		|||
 | 
			
		||||
	LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
 | 
			
		||||
	sei();
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	for (;;)
 | 
			
		||||
	{
 | 
			
		||||
		ProcessNextSample();
 | 
			
		||||
| 
						 | 
				
			
			@ -79,13 +79,13 @@ void SetupHardware(void)
 | 
			
		|||
 | 
			
		||||
	/* Disable clock division */
 | 
			
		||||
	clock_prescale_set(clock_div_1);
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Hardware Initialization */
 | 
			
		||||
	LEDs_Init();
 | 
			
		||||
	USB_Init();
 | 
			
		||||
	ADC_Init(ADC_FREE_RUNNING | ADC_PRESCALE_32);
 | 
			
		||||
	ADC_SetupChannel(MIC_IN_ADC_CHANNEL);
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Start the ADC conversion in free running mode */
 | 
			
		||||
	ADC_StartReading(ADC_REFERENCE_AVCC | ADC_RIGHT_ADJUSTED | MIC_IN_ADC_MUX_MASK);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -103,7 +103,7 @@ void ProcessNextSample(void)
 | 
			
		|||
 | 
			
		||||
		/* Audio sample is ADC value scaled to fit the entire range */
 | 
			
		||||
		int16_t AudioSample = ((SAMPLE_MAX_RANGE / ADC_MAX_RANGE) * ADC_GetResult());
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		#if defined(MICROPHONE_BIASED_TO_HALF_RAIL)
 | 
			
		||||
		/* Microphone is biased to half rail voltage, subtract the bias from the sample value */
 | 
			
		||||
		AudioSample -= (SAMPLE_MAX_RANGE / 2);
 | 
			
		||||
| 
						 | 
				
			
			@ -148,3 +148,4 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
 | 
			
		|||
{
 | 
			
		||||
	Audio_Device_ProcessControlRequest(&Microphone_Audio_Interface);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -32,7 +32,7 @@
 | 
			
		|||
 *
 | 
			
		||||
 *  Header file for AudioInput.c.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
#ifndef _AUDIO_INPUT_H_
 | 
			
		||||
#define _AUDIO_INPUT_H_
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -53,7 +53,7 @@
 | 
			
		|||
	/* Macros: */
 | 
			
		||||
		/** ADC channel number for the microphone input. */
 | 
			
		||||
		#define MIC_IN_ADC_CHANNEL        2
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/** ADC channel MUX mask for the microphone input. */
 | 
			
		||||
		#define MIC_IN_ADC_MUX_MASK       ADC_CHANNEL2
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -85,3 +85,4 @@
 | 
			
		|||
		void EVENT_USB_Device_UnhandledControlRequest(void);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,7 +3,7 @@
 | 
			
		|||
 *  This file contains special DoxyGen information for the generation of the main page and other special
 | 
			
		||||
 *  documentation pages. It is not a project source file.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
/** \mainpage Audio Input Device Demo
 | 
			
		||||
 *
 | 
			
		||||
 *  \section SSec_Compat Demo Compatibility:
 | 
			
		||||
| 
						 | 
				
			
			@ -27,7 +27,7 @@
 | 
			
		|||
 *    <td><b>USB Class:</b></td>
 | 
			
		||||
 *    <td>Audio Class</td>
 | 
			
		||||
 *   </tr>
 | 
			
		||||
 *   <tr> 
 | 
			
		||||
 *   <tr>
 | 
			
		||||
 *    <td><b>USB Subclass:</b></td>
 | 
			
		||||
 *    <td>Standard Audio Device</td>
 | 
			
		||||
 *   </tr>
 | 
			
		||||
| 
						 | 
				
			
			@ -43,19 +43,19 @@
 | 
			
		|||
 *   </tr>
 | 
			
		||||
 *  </table>
 | 
			
		||||
 *
 | 
			
		||||
 *  \section SSec_Description Project Description: 
 | 
			
		||||
 *  \section SSec_Description Project Description:
 | 
			
		||||
 *
 | 
			
		||||
 *  Audio demonstration application. This gives a simple reference
 | 
			
		||||
 *  application for implementing a USB Audio Input device using the
 | 
			
		||||
 *  basic USB Audio 1.0 drivers in all modern OSes (i.e. no special drivers
 | 
			
		||||
 *  required).
 | 
			
		||||
 *  
 | 
			
		||||
 *
 | 
			
		||||
 *  On start-up the system will automatically enumerate and function
 | 
			
		||||
 *  as a USB microphone. Incoming audio from the ADC channel 1 will
 | 
			
		||||
 *  be sampled and sent to the host computer.
 | 
			
		||||
 *  
 | 
			
		||||
 *
 | 
			
		||||
 *  To use, connect a microphone to the ADC channel 1.
 | 
			
		||||
 *  
 | 
			
		||||
 *
 | 
			
		||||
 *  Under Windows, if a driver request dialogue pops up, select the option
 | 
			
		||||
 *  to automatically install the appropriate drivers.
 | 
			
		||||
 *
 | 
			
		||||
| 
						 | 
				
			
			@ -81,3 +81,4 @@
 | 
			
		|||
 *   </tr>
 | 
			
		||||
 *  </table>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -30,11 +30,11 @@
 | 
			
		|||
 | 
			
		||||
/** \file
 | 
			
		||||
 *
 | 
			
		||||
 *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special 
 | 
			
		||||
 *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special
 | 
			
		||||
 *  computer-readable structures which the host requests upon device enumeration, to determine
 | 
			
		||||
 *  the device's capabilities and functions.  
 | 
			
		||||
 *  the device's capabilities and functions.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
#include "Descriptors.h"
 | 
			
		||||
 | 
			
		||||
/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall
 | 
			
		||||
| 
						 | 
				
			
			@ -71,7 +71,7 @@ USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
 | 
			
		|||
 */
 | 
			
		||||
USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		||||
{
 | 
			
		||||
	.Config = 
 | 
			
		||||
	.Config =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                   = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -86,13 +86,13 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		|||
			.MaxPowerConsumption      = USB_CONFIG_POWER_MA(100)
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.Audio_ControlInterface = 
 | 
			
		||||
	.Audio_ControlInterface =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 | 
			
		||||
 | 
			
		||||
			.InterfaceNumber          = 0,
 | 
			
		||||
			.AlternateSetting         = 0,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.TotalEndpoints           = 0,
 | 
			
		||||
 | 
			
		||||
			.Class                    = 0x01,
 | 
			
		||||
| 
						 | 
				
			
			@ -102,7 +102,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		|||
			.InterfaceStrIndex        = NO_DESCRIPTOR
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.Audio_ControlInterface_SPC = 
 | 
			
		||||
	.Audio_ControlInterface_SPC =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                   = {.Size = sizeof(USB_Audio_Descriptor_Interface_AC_t), .Type = DTYPE_CSInterface},
 | 
			
		||||
			.Subtype                  = AUDIO_DSUBTYPE_CSInterface_Header,
 | 
			
		||||
| 
						 | 
				
			
			@ -111,12 +111,12 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		|||
			.TotalLength              = (sizeof(USB_Audio_Descriptor_Interface_AC_t) +
 | 
			
		||||
			                             sizeof(USB_Audio_Descriptor_InputTerminal_t) +
 | 
			
		||||
			                             sizeof(USB_Audio_Descriptor_OutputTerminal_t)),
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.InCollection             = 1,
 | 
			
		||||
			.InterfaceNumber          = 1,
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.Audio_InputTerminal = 
 | 
			
		||||
	.Audio_InputTerminal =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                   = {.Size = sizeof(USB_Audio_Descriptor_InputTerminal_t), .Type = DTYPE_CSInterface},
 | 
			
		||||
			.Subtype                  = AUDIO_DSUBTYPE_CSInterface_InputTerminal,
 | 
			
		||||
| 
						 | 
				
			
			@ -132,7 +132,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		|||
			.TerminalStrIndex         = NO_DESCRIPTOR
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.Audio_OutputTerminal = 
 | 
			
		||||
	.Audio_OutputTerminal =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                   = {.Size = sizeof(USB_Audio_Descriptor_OutputTerminal_t), .Type = DTYPE_CSInterface},
 | 
			
		||||
			.Subtype                  = AUDIO_DSUBTYPE_CSInterface_OutputTerminal,
 | 
			
		||||
| 
						 | 
				
			
			@ -146,7 +146,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		|||
			.TerminalStrIndex         = NO_DESCRIPTOR
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.Audio_StreamInterface_Alt0 = 
 | 
			
		||||
	.Audio_StreamInterface_Alt0 =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -162,7 +162,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		|||
			.InterfaceStrIndex        = NO_DESCRIPTOR
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.Audio_StreamInterface_Alt1 = 
 | 
			
		||||
	.Audio_StreamInterface_Alt1 =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -178,7 +178,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		|||
			.InterfaceStrIndex        = NO_DESCRIPTOR
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.Audio_StreamInterface_SPC = 
 | 
			
		||||
	.Audio_StreamInterface_SPC =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                   = {.Size = sizeof(USB_Audio_Descriptor_Interface_AS_t), .Type = DTYPE_CSInterface},
 | 
			
		||||
			.Subtype                  = AUDIO_DSUBTYPE_CSInterface_General,
 | 
			
		||||
| 
						 | 
				
			
			@ -189,24 +189,24 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		|||
			.AudioFormat              = 0x0001
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.Audio_AudioFormat = 
 | 
			
		||||
	.Audio_AudioFormat =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                   = {.Size = sizeof(USB_Audio_Descriptor_Format_t), .Type = DTYPE_CSInterface},
 | 
			
		||||
			.Subtype                  = AUDIO_DSUBTYPE_CSInterface_FormatType,
 | 
			
		||||
 | 
			
		||||
			.FormatType               = 0x01,
 | 
			
		||||
			.Channels                 = 0x01,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.SubFrameSize             = 0x02,
 | 
			
		||||
			.BitResolution            = 16,
 | 
			
		||||
			.SampleFrequencyType      = AUDIO_TOTAL_SAMPLE_RATES,
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
			.SampleFrequencies        = {AUDIO_SAMPLE_FREQ(AUDIO_SAMPLE_FREQUENCY)}
 | 
			
		||||
		},
 | 
			
		||||
	
 | 
			
		||||
	.Audio_StreamEndpoint = 
 | 
			
		||||
 | 
			
		||||
	.Audio_StreamEndpoint =
 | 
			
		||||
		{
 | 
			
		||||
			.Endpoint = 
 | 
			
		||||
			.Endpoint =
 | 
			
		||||
				{
 | 
			
		||||
					.Header              = {.Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Std_t), .Type = DTYPE_Endpoint},
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -215,18 +215,18 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		|||
					.EndpointSize        = AUDIO_STREAM_EPSIZE,
 | 
			
		||||
					.PollingIntervalMS   = 1
 | 
			
		||||
				},
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.Refresh                  = 0,
 | 
			
		||||
			.SyncEndpointNumber       = 0
 | 
			
		||||
		},
 | 
			
		||||
		
 | 
			
		||||
	.Audio_StreamEndpoint_SPC = 
 | 
			
		||||
 | 
			
		||||
	.Audio_StreamEndpoint_SPC =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                   = {.Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Spc_t), .Type = DTYPE_CSEndpoint},
 | 
			
		||||
			.Subtype                  = AUDIO_DSUBTYPE_CSEndpoint_General,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.Attributes               = AUDIO_EP_ACCEPTS_SMALL_PACKETS,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.LockDelayUnits           = 0x00,
 | 
			
		||||
			.LockDelay                = 0x0000
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -287,30 +287,31 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		|||
			Address = &DeviceDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Configuration: 
 | 
			
		||||
		case DTYPE_Configuration:
 | 
			
		||||
			Address = &ConfigurationDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_String: 
 | 
			
		||||
		case DTYPE_String:
 | 
			
		||||
			switch (DescriptorNumber)
 | 
			
		||||
			{
 | 
			
		||||
				case 0x00: 
 | 
			
		||||
				case 0x00:
 | 
			
		||||
					Address = &LanguageString;
 | 
			
		||||
					Size    = pgm_read_byte(&LanguageString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x01: 
 | 
			
		||||
				case 0x01:
 | 
			
		||||
					Address = &ManufacturerString;
 | 
			
		||||
					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x02: 
 | 
			
		||||
				case 0x02:
 | 
			
		||||
					Address = &ProductString;
 | 
			
		||||
					Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			break;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	*DescriptorAddress = Address;
 | 
			
		||||
	return Size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -32,7 +32,7 @@
 | 
			
		|||
 *
 | 
			
		||||
 *  Header file for Descriptors.c.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
#ifndef _DESCRIPTORS_H_
 | 
			
		||||
#define _DESCRIPTORS_H_
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -45,7 +45,7 @@
 | 
			
		|||
	/* Macros: */
 | 
			
		||||
		/** Endpoint number of the Audio isochronous streaming data endpoint. */
 | 
			
		||||
		#define AUDIO_STREAM_EPNUM           1
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/** Endpoint size in bytes of the Audio isochronous streaming data endpoint. The Windows audio stack requires
 | 
			
		||||
		 *  at least 192 bytes for correct output, thus the smaller 128 byte maximum endpoint size on some of the smaller
 | 
			
		||||
		 *  USB AVR models will result in unavoidable distorted output.
 | 
			
		||||
| 
						 | 
				
			
			@ -82,3 +82,4 @@
 | 
			
		|||
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,7 +47,7 @@
 | 
			
		|||
# make doxygen = Generate DoxyGen documentation for the project (must have
 | 
			
		||||
#                DoxyGen installed)
 | 
			
		||||
#
 | 
			
		||||
# make debug = Start either simulavr or avarice as specified for debugging, 
 | 
			
		||||
# make debug = Start either simulavr or avarice as specified for debugging,
 | 
			
		||||
#              with avr-gdb or avr-insight as the front end for debugging.
 | 
			
		||||
#
 | 
			
		||||
# make filename.s = Just compile filename.c into the assembler code only.
 | 
			
		||||
| 
						 | 
				
			
			@ -64,14 +64,14 @@ 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 
 | 
			
		||||
# LUFA board drivers). If USER is selected, put custom board drivers in a directory called
 | 
			
		||||
# "Board" inside the application directory.
 | 
			
		||||
BOARD = USBKEY
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Processor frequency.
 | 
			
		||||
#     This will define a symbol, F_CPU, in all source code files equal to the 
 | 
			
		||||
#     processor frequency in Hz. You can then use this symbol in your source code to 
 | 
			
		||||
#     This will define a symbol, F_CPU, in all source code files equal to the
 | 
			
		||||
#     processor frequency in Hz. You can then use this symbol in your source code to
 | 
			
		||||
#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
 | 
			
		||||
#     automatically to create a 32-bit value in your source code.
 | 
			
		||||
#
 | 
			
		||||
| 
						 | 
				
			
			@ -84,7 +84,7 @@ F_CPU = 8000000
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Input clock frequency.
 | 
			
		||||
#     This will define a symbol, F_CLOCK, in all source code files equal to the 
 | 
			
		||||
#     This will define a symbol, F_CLOCK, in all source code files equal to the
 | 
			
		||||
#     input clock frequency (before any prescaling is performed) in Hz. This value may
 | 
			
		||||
#     differ from F_CPU if prescaling is used on the latter, and is required as the
 | 
			
		||||
#     raw input clock is fed directly to the PLL sections of the AVR for high speed
 | 
			
		||||
| 
						 | 
				
			
			@ -137,7 +137,7 @@ SRC = $(TARGET).c                                                 \
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# List C++ source files here. (C dependencies are automatically generated.)
 | 
			
		||||
CPPSRC = 
 | 
			
		||||
CPPSRC =
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# List Assembler source files here.
 | 
			
		||||
| 
						 | 
				
			
			@ -150,7 +150,7 @@ CPPSRC =
 | 
			
		|||
ASRC =
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Optimization level, can be [0, 1, 2, 3, s]. 
 | 
			
		||||
# Optimization level, can be [0, 1, 2, 3, s].
 | 
			
		||||
#     0 = turn off optimization. s = optimize for size.
 | 
			
		||||
#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
 | 
			
		||||
OPT = s
 | 
			
		||||
| 
						 | 
				
			
			@ -264,7 +264,7 @@ CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
 | 
			
		|||
#             for use in COFF files, additional information about filenames
 | 
			
		||||
#             and function names needs to be present in the assembler source
 | 
			
		||||
#             files -- see avr-libc docs [FIXME: not yet described there]
 | 
			
		||||
#  -listing-cont-lines: Sets the maximum number of continuation lines of hex 
 | 
			
		||||
#  -listing-cont-lines: Sets the maximum number of continuation lines of hex
 | 
			
		||||
#       dump that will be displayed for a given single line of source input.
 | 
			
		||||
ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -277,7 +277,7 @@ PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
 | 
			
		|||
PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
 | 
			
		||||
 | 
			
		||||
# If this is left blank, then it will use the Standard printf version.
 | 
			
		||||
PRINTF_LIB = 
 | 
			
		||||
PRINTF_LIB =
 | 
			
		||||
#PRINTF_LIB = $(PRINTF_LIB_MIN)
 | 
			
		||||
#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -289,7 +289,7 @@ SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
 | 
			
		|||
SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
 | 
			
		||||
 | 
			
		||||
# If this is left blank, then it will use the Standard scanf version.
 | 
			
		||||
SCANF_LIB = 
 | 
			
		||||
SCANF_LIB =
 | 
			
		||||
#SCANF_LIB = $(SCANF_LIB_MIN)
 | 
			
		||||
#SCANF_LIB = $(SCANF_LIB_FLOAT)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -301,7 +301,7 @@ MATH_LIB = -lm
 | 
			
		|||
#     Each directory must be seperated by a space.
 | 
			
		||||
#     Use forward slashes for directory separators.
 | 
			
		||||
#     For a directory that has spaces, enclose it in quotes.
 | 
			
		||||
EXTRALIBDIRS = 
 | 
			
		||||
EXTRALIBDIRS =
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -324,7 +324,7 @@ EXTMEMOPTS =
 | 
			
		|||
#    -Map:      create map file
 | 
			
		||||
#    --cref:    add cross reference to  map file
 | 
			
		||||
LDFLAGS  = -Wl,-Map=$(TARGET).map,--cref
 | 
			
		||||
LDFLAGS += -Wl,--relax 
 | 
			
		||||
LDFLAGS += -Wl,--relax
 | 
			
		||||
LDFLAGS += -Wl,--gc-sections
 | 
			
		||||
LDFLAGS += $(EXTMEMOPTS)
 | 
			
		||||
LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))
 | 
			
		||||
| 
						 | 
				
			
			@ -358,7 +358,7 @@ AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
 | 
			
		|||
#AVRDUDE_NO_VERIFY = -V
 | 
			
		||||
 | 
			
		||||
# Increase verbosity level.  Please use this when submitting bug
 | 
			
		||||
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
 | 
			
		||||
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
 | 
			
		||||
# to submit bug reports.
 | 
			
		||||
#AVRDUDE_VERBOSE = -v -v
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -392,7 +392,7 @@ JTAG_DEV = /dev/com1
 | 
			
		|||
DEBUG_PORT = 4242
 | 
			
		||||
 | 
			
		||||
# Debugging host used to communicate between GDB / avarice / simulavr, normally
 | 
			
		||||
#     just set to localhost unless doing some sort of crazy debugging when 
 | 
			
		||||
#     just set to localhost unless doing some sort of crazy debugging when
 | 
			
		||||
#     avarice is running on a different computer.
 | 
			
		||||
DEBUG_HOST = localhost
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -421,7 +421,7 @@ WINSHELL = cmd
 | 
			
		|||
MSG_ERRORS_NONE = Errors: none
 | 
			
		||||
MSG_BEGIN = -------- begin --------
 | 
			
		||||
MSG_END = --------  end  --------
 | 
			
		||||
MSG_SIZE_BEFORE = Size before: 
 | 
			
		||||
MSG_SIZE_BEFORE = Size before:
 | 
			
		||||
MSG_SIZE_AFTER = Size after:
 | 
			
		||||
MSG_COFF = Converting to AVR COFF:
 | 
			
		||||
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
 | 
			
		||||
| 
						 | 
				
			
			@ -440,10 +440,10 @@ MSG_CREATING_LIBRARY = Creating library:
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Define all object files.
 | 
			
		||||
OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) 
 | 
			
		||||
OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o)
 | 
			
		||||
 | 
			
		||||
# Define all listing files.
 | 
			
		||||
LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) 
 | 
			
		||||
LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Compiler flags to generate dependency files.
 | 
			
		||||
| 
						 | 
				
			
			@ -508,11 +508,11 @@ sizeafter:
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Display compiler version information.
 | 
			
		||||
gccversion : 
 | 
			
		||||
gccversion :
 | 
			
		||||
	@$(CC) --version
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Program the device.  
 | 
			
		||||
# Program the device.
 | 
			
		||||
program: $(TARGET).hex $(TARGET).eep
 | 
			
		||||
	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -539,9 +539,9 @@ dfu-ee: $(TARGET).hex $(TARGET).eep
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Generate avr-gdb config/init file which does the following:
 | 
			
		||||
#     define the reset signal, load the target file, connect to target, and set 
 | 
			
		||||
#     define the reset signal, load the target file, connect to target, and set
 | 
			
		||||
#     a breakpoint at main().
 | 
			
		||||
gdb-config: 
 | 
			
		||||
gdb-config:
 | 
			
		||||
	@$(REMOVE) $(GDBINIT_FILE)
 | 
			
		||||
	@echo define reset >> $(GDBINIT_FILE)
 | 
			
		||||
	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
 | 
			
		||||
| 
						 | 
				
			
			@ -639,14 +639,14 @@ extcoff: $(TARGET).elf
 | 
			
		|||
$(OBJDIR)/%.o : %.c
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo $(MSG_COMPILING) $<
 | 
			
		||||
	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
 | 
			
		||||
	$(CC) -c $(ALL_CFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Compile: create object files from C++ source files.
 | 
			
		||||
$(OBJDIR)/%.o : %.cpp
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo $(MSG_COMPILING_CPP) $<
 | 
			
		||||
	$(CC) -c $(ALL_CPPFLAGS) $< -o $@ 
 | 
			
		||||
	$(CC) -c $(ALL_CPPFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Compile: create assembler files from C source files.
 | 
			
		||||
| 
						 | 
				
			
			@ -668,7 +668,7 @@ $(OBJDIR)/%.o : %.S
 | 
			
		|||
 | 
			
		||||
# Create preprocessed source for use in sending a bug report.
 | 
			
		||||
%.i : %.c
 | 
			
		||||
	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
 | 
			
		||||
	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Target: clean project.
 | 
			
		||||
| 
						 | 
				
			
			@ -712,3 +712,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null)
 | 
			
		|||
build elf hex eep lss sym coff extcoff doxygen clean          \
 | 
			
		||||
clean_list clean_doxygen program dfu flip flip-ee dfu-ee      \
 | 
			
		||||
debug gdb-config
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -60,7 +60,7 @@ int main(void)
 | 
			
		|||
 | 
			
		||||
	LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
 | 
			
		||||
	sei();
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	for (;;)
 | 
			
		||||
	{
 | 
			
		||||
		ProcessNextSample();
 | 
			
		||||
| 
						 | 
				
			
			@ -135,7 +135,7 @@ void ProcessNextSample(void)
 | 
			
		|||
void EVENT_USB_Device_Connect(void)
 | 
			
		||||
{
 | 
			
		||||
	LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Sample reload timer initialization */
 | 
			
		||||
	OCR0A   = (F_CPU / 8 / AUDIO_SAMPLE_FREQUENCY) - 1;
 | 
			
		||||
	TCCR0A  = (1 << WGM01);  // CTC mode
 | 
			
		||||
| 
						 | 
				
			
			@ -200,3 +200,4 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
 | 
			
		|||
{
 | 
			
		||||
	Audio_Device_ProcessControlRequest(&Speaker_Audio_Interface);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -44,13 +44,13 @@
 | 
			
		|||
		#include <stdlib.h>
 | 
			
		||||
 | 
			
		||||
		#include "Descriptors.h"
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		#include <LUFA/Version.h>
 | 
			
		||||
		#include <LUFA/Drivers/Board/LEDs.h>
 | 
			
		||||
		#include <LUFA/Drivers/USB/USB.h>
 | 
			
		||||
		#include <LUFA/Drivers/USB/Class/Audio.h>
 | 
			
		||||
	
 | 
			
		||||
	/* Macros: */		
 | 
			
		||||
 | 
			
		||||
	/* Macros: */
 | 
			
		||||
		/** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
 | 
			
		||||
		#define LEDMASK_USB_NOTREADY      LEDS_LED1
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -62,14 +62,15 @@
 | 
			
		|||
 | 
			
		||||
		/** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */
 | 
			
		||||
		#define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	/* Function Prototypes: */
 | 
			
		||||
		void SetupHardware(void);
 | 
			
		||||
		void ProcessNextSample(void);
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		void EVENT_USB_Device_Connect(void);
 | 
			
		||||
		void EVENT_USB_Device_Disconnect(void);
 | 
			
		||||
		void EVENT_USB_Device_ConfigurationChanged(void);
 | 
			
		||||
		void EVENT_USB_Device_UnhandledControlRequest(void);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,7 +3,7 @@
 | 
			
		|||
 *  This file contains special DoxyGen information for the generation of the main page and other special
 | 
			
		||||
 *  documentation pages. It is not a project source file.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
/** \mainpage Audio Output Device Demo
 | 
			
		||||
 *
 | 
			
		||||
 *  \section SSec_Compat Demo Compatibility:
 | 
			
		||||
| 
						 | 
				
			
			@ -27,7 +27,7 @@
 | 
			
		|||
 *    <td><b>USB Class:</b></td>
 | 
			
		||||
 *    <td>Audio Class</td>
 | 
			
		||||
 *   </tr>
 | 
			
		||||
 *   <tr> 
 | 
			
		||||
 *   <tr>
 | 
			
		||||
 *    <td><b>USB Subclass:</b></td>
 | 
			
		||||
 *    <td>Standard Audio Device</td>
 | 
			
		||||
 *   </tr>
 | 
			
		||||
| 
						 | 
				
			
			@ -43,13 +43,13 @@
 | 
			
		|||
 *   </tr>
 | 
			
		||||
 *  </table>
 | 
			
		||||
 *
 | 
			
		||||
 *  \section SSec_Description Project Description: 
 | 
			
		||||
 *  \section SSec_Description Project Description:
 | 
			
		||||
 *
 | 
			
		||||
 *  Audio demonstration application. This gives a simple reference
 | 
			
		||||
 *  application for implementing a USB Audio Output device using the
 | 
			
		||||
 *  basic USB Audio 1.0 drivers in all modern OSes (i.e. no special drivers
 | 
			
		||||
 *  required).
 | 
			
		||||
 *  
 | 
			
		||||
 *
 | 
			
		||||
 *  On start-up the system will automatically enumerate and function
 | 
			
		||||
 *  as a USB speaker. Outgoing audio will output in 8-bit PWM onto
 | 
			
		||||
 *  the timer 3 output compare channel A for AUDIO_OUT_MONO mode, on
 | 
			
		||||
| 
						 | 
				
			
			@ -57,7 +57,7 @@
 | 
			
		|||
 *  mono sample for AUDIO_OUT_PORTC. Audio output will also be indicated on
 | 
			
		||||
 *  the board LEDs in all modes. Decouple audio outputs with a capacitor and
 | 
			
		||||
 *  attach to a speaker to hear the audio.
 | 
			
		||||
 *  
 | 
			
		||||
 *
 | 
			
		||||
 *  Under Windows, if a driver request dialogue pops up, select the option
 | 
			
		||||
 *  to automatically install the appropriate drivers.
 | 
			
		||||
 *
 | 
			
		||||
| 
						 | 
				
			
			@ -94,3 +94,4 @@
 | 
			
		|||
 *   </tr>
 | 
			
		||||
 *  </table>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -30,11 +30,11 @@
 | 
			
		|||
 | 
			
		||||
/** \file
 | 
			
		||||
 *
 | 
			
		||||
 *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special 
 | 
			
		||||
 *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special
 | 
			
		||||
 *  computer-readable structures which the host requests upon device enumeration, to determine
 | 
			
		||||
 *  the device's capabilities and functions.  
 | 
			
		||||
 *  the device's capabilities and functions.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
#include "Descriptors.h"
 | 
			
		||||
 | 
			
		||||
/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall
 | 
			
		||||
| 
						 | 
				
			
			@ -71,7 +71,7 @@ USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
 | 
			
		|||
 */
 | 
			
		||||
USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		||||
{
 | 
			
		||||
	.Config = 
 | 
			
		||||
	.Config =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                   = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -80,133 +80,133 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		|||
 | 
			
		||||
			.ConfigurationNumber      = 1,
 | 
			
		||||
			.ConfigurationStrIndex    = NO_DESCRIPTOR,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.ConfigAttributes         = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.MaxPowerConsumption      = USB_CONFIG_POWER_MA(100)
 | 
			
		||||
		},
 | 
			
		||||
		
 | 
			
		||||
	.Audio_ControlInterface = 
 | 
			
		||||
 | 
			
		||||
	.Audio_ControlInterface =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 | 
			
		||||
 | 
			
		||||
			.InterfaceNumber          = 0,
 | 
			
		||||
			.AlternateSetting         = 0,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.TotalEndpoints           = 0,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.Class                    = 0x01,
 | 
			
		||||
			.SubClass                 = 0x01,
 | 
			
		||||
			.Protocol                 = 0x00,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.InterfaceStrIndex        = NO_DESCRIPTOR
 | 
			
		||||
		},
 | 
			
		||||
	
 | 
			
		||||
	.Audio_ControlInterface_SPC = 
 | 
			
		||||
 | 
			
		||||
	.Audio_ControlInterface_SPC =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                   = {.Size = sizeof(USB_Audio_Descriptor_Interface_AC_t), .Type = DTYPE_CSInterface},
 | 
			
		||||
			.Subtype                  = AUDIO_DSUBTYPE_CSInterface_Header,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.ACSpecification          = VERSION_BCD(01.00),
 | 
			
		||||
			.TotalLength              = (sizeof(USB_Audio_Descriptor_Interface_AC_t) +
 | 
			
		||||
			                             sizeof(USB_Audio_Descriptor_InputTerminal_t) +
 | 
			
		||||
			                             sizeof(USB_Audio_Descriptor_OutputTerminal_t)),
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.InCollection             = 1,
 | 
			
		||||
			.InterfaceNumber          = 1,
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.Audio_InputTerminal = 
 | 
			
		||||
	.Audio_InputTerminal =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                   = {.Size = sizeof(USB_Audio_Descriptor_InputTerminal_t), .Type = DTYPE_CSInterface},
 | 
			
		||||
			.Subtype                  = AUDIO_DSUBTYPE_CSInterface_InputTerminal,
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
			.TerminalID               = 0x01,
 | 
			
		||||
			.TerminalType             = AUDIO_TERMINAL_STREAMING,
 | 
			
		||||
			.AssociatedOutputTerminal = 0x00,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.TotalChannels            = 2,
 | 
			
		||||
			.ChannelConfig            = (AUDIO_CHANNEL_LEFT_FRONT | AUDIO_CHANNEL_RIGHT_FRONT),
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.ChannelStrIndex          = NO_DESCRIPTOR,
 | 
			
		||||
			.TerminalStrIndex         = NO_DESCRIPTOR
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.Audio_OutputTerminal = 
 | 
			
		||||
	.Audio_OutputTerminal =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                   = {.Size = sizeof(USB_Audio_Descriptor_OutputTerminal_t), .Type = DTYPE_CSInterface},
 | 
			
		||||
			.Subtype                  = AUDIO_DSUBTYPE_CSInterface_OutputTerminal,
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
			.TerminalID               = 0x02,
 | 
			
		||||
			.TerminalType             = AUDIO_TERMINAL_OUT_SPEAKER,
 | 
			
		||||
			.AssociatedInputTerminal  = 0x00,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.SourceID                 = 0x01,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.TerminalStrIndex         = NO_DESCRIPTOR
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.Audio_StreamInterface_Alt0 = 
 | 
			
		||||
	.Audio_StreamInterface_Alt0 =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 | 
			
		||||
 | 
			
		||||
			.InterfaceNumber          = 1,
 | 
			
		||||
			.AlternateSetting         = 0,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.TotalEndpoints           = 0,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.Class                    = 0x01,
 | 
			
		||||
			.SubClass                 = 0x02,
 | 
			
		||||
			.Protocol                 = 0x00,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.InterfaceStrIndex        = NO_DESCRIPTOR
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.Audio_StreamInterface_Alt1 = 
 | 
			
		||||
	.Audio_StreamInterface_Alt1 =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 | 
			
		||||
 | 
			
		||||
			.InterfaceNumber          = 1,
 | 
			
		||||
			.AlternateSetting         = 1,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.TotalEndpoints           = 1,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.Class                    = 0x01,
 | 
			
		||||
			.SubClass                 = 0x02,
 | 
			
		||||
			.Protocol                 = 0x00,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.InterfaceStrIndex        = NO_DESCRIPTOR
 | 
			
		||||
		},
 | 
			
		||||
		
 | 
			
		||||
	.Audio_StreamInterface_SPC = 
 | 
			
		||||
 | 
			
		||||
	.Audio_StreamInterface_SPC =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                   = {.Size = sizeof(USB_Audio_Descriptor_Interface_AS_t), .Type = DTYPE_CSInterface},
 | 
			
		||||
			.Subtype                  = AUDIO_DSUBTYPE_CSInterface_General,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.TerminalLink             = 0x01,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.FrameDelay               = 1,
 | 
			
		||||
			.AudioFormat              = 0x0001
 | 
			
		||||
		},
 | 
			
		||||
		
 | 
			
		||||
	.Audio_AudioFormat = 
 | 
			
		||||
 | 
			
		||||
	.Audio_AudioFormat =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                   = {.Size = sizeof(USB_Audio_Descriptor_Format_t), .Type = DTYPE_CSInterface},
 | 
			
		||||
			.Subtype                  = AUDIO_DSUBTYPE_CSInterface_FormatType,
 | 
			
		||||
 | 
			
		||||
			.FormatType               = 0x01,
 | 
			
		||||
			.Channels                 = 0x02,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.SubFrameSize             = 0x02,
 | 
			
		||||
			.BitResolution            = 16,
 | 
			
		||||
 | 
			
		||||
			.SampleFrequencyType      = AUDIO_TOTAL_SAMPLE_RATES,		
 | 
			
		||||
			.SampleFrequencyType      = AUDIO_TOTAL_SAMPLE_RATES,
 | 
			
		||||
			.SampleFrequencies        = {AUDIO_SAMPLE_FREQ(AUDIO_SAMPLE_FREQUENCY)}
 | 
			
		||||
		},
 | 
			
		||||
	
 | 
			
		||||
	.Audio_StreamEndpoint = 
 | 
			
		||||
 | 
			
		||||
	.Audio_StreamEndpoint =
 | 
			
		||||
		{
 | 
			
		||||
			.Endpoint = 
 | 
			
		||||
			.Endpoint =
 | 
			
		||||
				{
 | 
			
		||||
					.Header              = {.Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Std_t), .Type = DTYPE_Endpoint},
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -215,18 +215,18 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		|||
					.EndpointSize        = AUDIO_STREAM_EPSIZE,
 | 
			
		||||
					.PollingIntervalMS   = 1
 | 
			
		||||
				},
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.Refresh                  = 0,
 | 
			
		||||
			.SyncEndpointNumber       = 0
 | 
			
		||||
		},
 | 
			
		||||
		
 | 
			
		||||
	.Audio_StreamEndpoint_SPC = 
 | 
			
		||||
 | 
			
		||||
	.Audio_StreamEndpoint_SPC =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                   = {.Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Spc_t), .Type = DTYPE_CSEndpoint},
 | 
			
		||||
			.Subtype                  = AUDIO_DSUBTYPE_CSEndpoint_General,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.Attributes               = AUDIO_EP_ACCEPTS_SMALL_PACKETS,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.LockDelayUnits           = 0x00,
 | 
			
		||||
			.LockDelay                = 0x0000
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -291,26 +291,27 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		|||
			Address = &ConfigurationDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_String: 
 | 
			
		||||
		case DTYPE_String:
 | 
			
		||||
			switch (DescriptorNumber)
 | 
			
		||||
			{
 | 
			
		||||
				case 0x00:
 | 
			
		||||
					Address = &LanguageString;
 | 
			
		||||
					Size    = pgm_read_byte(&LanguageString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x01: 
 | 
			
		||||
				case 0x01:
 | 
			
		||||
					Address = &ManufacturerString;
 | 
			
		||||
					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x02: 
 | 
			
		||||
				case 0x02:
 | 
			
		||||
					Address = &ProductString;
 | 
			
		||||
					Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			break;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	*DescriptorAddress = Address;
 | 
			
		||||
	return Size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -32,7 +32,7 @@
 | 
			
		|||
 *
 | 
			
		||||
 *  Header file for Descriptors.c.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
#ifndef _DESCRIPTORS_H_
 | 
			
		||||
#define _DESCRIPTORS_H_
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -45,16 +45,16 @@
 | 
			
		|||
	/* Macros: */
 | 
			
		||||
		/** Endpoint number of the Audio isochronous streaming data endpoint. */
 | 
			
		||||
		#define AUDIO_STREAM_EPNUM           1
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/** Endpoint size in bytes of the Audio isochronous streaming data endpoint. The Windows audio stack requires
 | 
			
		||||
		 *  at least 192 bytes for correct output, thus the smaller 128 byte maximum endpoint size on some of the smaller
 | 
			
		||||
		 *  USB AVR models will result in unavoidable distorted output.
 | 
			
		||||
		 */
 | 
			
		||||
		#define AUDIO_STREAM_EPSIZE          ENDPOINT_MAX_SIZE(AUDIO_STREAM_EPNUM)
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/** Sample frequency of the data being transmitted through the streaming endpoint. */
 | 
			
		||||
		#define AUDIO_SAMPLE_FREQUENCY       48000
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	/* Type Defines: */
 | 
			
		||||
		/** Type define for the device configuration descriptor structure. This must be defined in the
 | 
			
		||||
		 *  application code, as the configuration descriptor contains several sub-descriptors which
 | 
			
		||||
| 
						 | 
				
			
			@ -74,7 +74,7 @@
 | 
			
		|||
			USB_Audio_Descriptor_StreamEndpoint_Std_t Audio_StreamEndpoint;
 | 
			
		||||
			USB_Audio_Descriptor_StreamEndpoint_Spc_t Audio_StreamEndpoint_SPC;
 | 
			
		||||
		} USB_Descriptor_Configuration_t;
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	/* Function Prototypes: */
 | 
			
		||||
		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
		                                    const uint8_t wIndex,
 | 
			
		||||
| 
						 | 
				
			
			@ -82,3 +82,4 @@
 | 
			
		|||
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,7 +47,7 @@
 | 
			
		|||
# make doxygen = Generate DoxyGen documentation for the project (must have
 | 
			
		||||
#                DoxyGen installed)
 | 
			
		||||
#
 | 
			
		||||
# make debug = Start either simulavr or avarice as specified for debugging, 
 | 
			
		||||
# make debug = Start either simulavr or avarice as specified for debugging,
 | 
			
		||||
#              with avr-gdb or avr-insight as the front end for debugging.
 | 
			
		||||
#
 | 
			
		||||
# make filename.s = Just compile filename.c into the assembler code only.
 | 
			
		||||
| 
						 | 
				
			
			@ -64,14 +64,14 @@ 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 
 | 
			
		||||
# LUFA board drivers). If USER is selected, put custom board drivers in a directory called
 | 
			
		||||
# "Board" inside the application directory.
 | 
			
		||||
BOARD = USBKEY
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Processor frequency.
 | 
			
		||||
#     This will define a symbol, F_CPU, in all source code files equal to the 
 | 
			
		||||
#     processor frequency in Hz. You can then use this symbol in your source code to 
 | 
			
		||||
#     This will define a symbol, F_CPU, in all source code files equal to the
 | 
			
		||||
#     processor frequency in Hz. You can then use this symbol in your source code to
 | 
			
		||||
#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
 | 
			
		||||
#     automatically to create a 32-bit value in your source code.
 | 
			
		||||
#
 | 
			
		||||
| 
						 | 
				
			
			@ -84,7 +84,7 @@ F_CPU = 8000000
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Input clock frequency.
 | 
			
		||||
#     This will define a symbol, F_CLOCK, in all source code files equal to the 
 | 
			
		||||
#     This will define a symbol, F_CLOCK, in all source code files equal to the
 | 
			
		||||
#     input clock frequency (before any prescaling is performed) in Hz. This value may
 | 
			
		||||
#     differ from F_CPU if prescaling is used on the latter, and is required as the
 | 
			
		||||
#     raw input clock is fed directly to the PLL sections of the AVR for high speed
 | 
			
		||||
| 
						 | 
				
			
			@ -139,7 +139,7 @@ SRC = $(TARGET).c                                                 \
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# List C++ source files here. (C dependencies are automatically generated.)
 | 
			
		||||
CPPSRC = 
 | 
			
		||||
CPPSRC =
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# List Assembler source files here.
 | 
			
		||||
| 
						 | 
				
			
			@ -152,7 +152,7 @@ CPPSRC =
 | 
			
		|||
ASRC =
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Optimization level, can be [0, 1, 2, 3, s]. 
 | 
			
		||||
# Optimization level, can be [0, 1, 2, 3, s].
 | 
			
		||||
#     0 = turn off optimization. s = optimize for size.
 | 
			
		||||
#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
 | 
			
		||||
OPT = s
 | 
			
		||||
| 
						 | 
				
			
			@ -266,7 +266,7 @@ CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
 | 
			
		|||
#             for use in COFF files, additional information about filenames
 | 
			
		||||
#             and function names needs to be present in the assembler source
 | 
			
		||||
#             files -- see avr-libc docs [FIXME: not yet described there]
 | 
			
		||||
#  -listing-cont-lines: Sets the maximum number of continuation lines of hex 
 | 
			
		||||
#  -listing-cont-lines: Sets the maximum number of continuation lines of hex
 | 
			
		||||
#       dump that will be displayed for a given single line of source input.
 | 
			
		||||
ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -279,7 +279,7 @@ PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
 | 
			
		|||
PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
 | 
			
		||||
 | 
			
		||||
# If this is left blank, then it will use the Standard printf version.
 | 
			
		||||
PRINTF_LIB = 
 | 
			
		||||
PRINTF_LIB =
 | 
			
		||||
#PRINTF_LIB = $(PRINTF_LIB_MIN)
 | 
			
		||||
#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -291,7 +291,7 @@ SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
 | 
			
		|||
SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
 | 
			
		||||
 | 
			
		||||
# If this is left blank, then it will use the Standard scanf version.
 | 
			
		||||
SCANF_LIB = 
 | 
			
		||||
SCANF_LIB =
 | 
			
		||||
#SCANF_LIB = $(SCANF_LIB_MIN)
 | 
			
		||||
#SCANF_LIB = $(SCANF_LIB_FLOAT)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -303,7 +303,7 @@ MATH_LIB = -lm
 | 
			
		|||
#     Each directory must be seperated by a space.
 | 
			
		||||
#     Use forward slashes for directory separators.
 | 
			
		||||
#     For a directory that has spaces, enclose it in quotes.
 | 
			
		||||
EXTRALIBDIRS = 
 | 
			
		||||
EXTRALIBDIRS =
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -326,7 +326,7 @@ EXTMEMOPTS =
 | 
			
		|||
#    -Map:      create map file
 | 
			
		||||
#    --cref:    add cross reference to  map file
 | 
			
		||||
LDFLAGS  = -Wl,-Map=$(TARGET).map,--cref
 | 
			
		||||
LDFLAGS += -Wl,--relax 
 | 
			
		||||
LDFLAGS += -Wl,--relax
 | 
			
		||||
LDFLAGS += -Wl,--gc-sections
 | 
			
		||||
LDFLAGS += $(EXTMEMOPTS)
 | 
			
		||||
LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))
 | 
			
		||||
| 
						 | 
				
			
			@ -360,7 +360,7 @@ AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
 | 
			
		|||
#AVRDUDE_NO_VERIFY = -V
 | 
			
		||||
 | 
			
		||||
# Increase verbosity level.  Please use this when submitting bug
 | 
			
		||||
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
 | 
			
		||||
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
 | 
			
		||||
# to submit bug reports.
 | 
			
		||||
#AVRDUDE_VERBOSE = -v -v
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -394,7 +394,7 @@ JTAG_DEV = /dev/com1
 | 
			
		|||
DEBUG_PORT = 4242
 | 
			
		||||
 | 
			
		||||
# Debugging host used to communicate between GDB / avarice / simulavr, normally
 | 
			
		||||
#     just set to localhost unless doing some sort of crazy debugging when 
 | 
			
		||||
#     just set to localhost unless doing some sort of crazy debugging when
 | 
			
		||||
#     avarice is running on a different computer.
 | 
			
		||||
DEBUG_HOST = localhost
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -423,7 +423,7 @@ WINSHELL = cmd
 | 
			
		|||
MSG_ERRORS_NONE = Errors: none
 | 
			
		||||
MSG_BEGIN = -------- begin --------
 | 
			
		||||
MSG_END = --------  end  --------
 | 
			
		||||
MSG_SIZE_BEFORE = Size before: 
 | 
			
		||||
MSG_SIZE_BEFORE = Size before:
 | 
			
		||||
MSG_SIZE_AFTER = Size after:
 | 
			
		||||
MSG_COFF = Converting to AVR COFF:
 | 
			
		||||
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
 | 
			
		||||
| 
						 | 
				
			
			@ -442,10 +442,10 @@ MSG_CREATING_LIBRARY = Creating library:
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Define all object files.
 | 
			
		||||
OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) 
 | 
			
		||||
OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o)
 | 
			
		||||
 | 
			
		||||
# Define all listing files.
 | 
			
		||||
LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) 
 | 
			
		||||
LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Compiler flags to generate dependency files.
 | 
			
		||||
| 
						 | 
				
			
			@ -510,11 +510,11 @@ sizeafter:
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Display compiler version information.
 | 
			
		||||
gccversion : 
 | 
			
		||||
gccversion :
 | 
			
		||||
	@$(CC) --version
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Program the device.  
 | 
			
		||||
# Program the device.
 | 
			
		||||
program: $(TARGET).hex $(TARGET).eep
 | 
			
		||||
	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -541,9 +541,9 @@ dfu-ee: $(TARGET).hex $(TARGET).eep
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Generate avr-gdb config/init file which does the following:
 | 
			
		||||
#     define the reset signal, load the target file, connect to target, and set 
 | 
			
		||||
#     define the reset signal, load the target file, connect to target, and set
 | 
			
		||||
#     a breakpoint at main().
 | 
			
		||||
gdb-config: 
 | 
			
		||||
gdb-config:
 | 
			
		||||
	@$(REMOVE) $(GDBINIT_FILE)
 | 
			
		||||
	@echo define reset >> $(GDBINIT_FILE)
 | 
			
		||||
	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
 | 
			
		||||
| 
						 | 
				
			
			@ -641,14 +641,14 @@ extcoff: $(TARGET).elf
 | 
			
		|||
$(OBJDIR)/%.o : %.c
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo $(MSG_COMPILING) $<
 | 
			
		||||
	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
 | 
			
		||||
	$(CC) -c $(ALL_CFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Compile: create object files from C++ source files.
 | 
			
		||||
$(OBJDIR)/%.o : %.cpp
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo $(MSG_COMPILING_CPP) $<
 | 
			
		||||
	$(CC) -c $(ALL_CPPFLAGS) $< -o $@ 
 | 
			
		||||
	$(CC) -c $(ALL_CPPFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Compile: create assembler files from C source files.
 | 
			
		||||
| 
						 | 
				
			
			@ -670,7 +670,7 @@ $(OBJDIR)/%.o : %.S
 | 
			
		|||
 | 
			
		||||
# Create preprocessed source for use in sending a bug report.
 | 
			
		||||
%.i : %.c
 | 
			
		||||
	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
 | 
			
		||||
	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Target: clean project.
 | 
			
		||||
| 
						 | 
				
			
			@ -714,3 +714,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null)
 | 
			
		|||
build elf hex eep lss sym coff extcoff doxygen clean          \
 | 
			
		||||
clean_list clean_doxygen program dfu flip flip-ee dfu-ee      \
 | 
			
		||||
debug gdb-config
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -30,9 +30,9 @@
 | 
			
		|||
 | 
			
		||||
/** \file
 | 
			
		||||
 *
 | 
			
		||||
 *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special 
 | 
			
		||||
 *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special
 | 
			
		||||
 *  computer-readable structures which the host requests upon device enumeration, to determine
 | 
			
		||||
 *  the device's capabilities and functions.  
 | 
			
		||||
 *  the device's capabilities and functions.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "Descriptors.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -57,22 +57,22 @@
 | 
			
		|||
USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
 | 
			
		||||
{
 | 
			
		||||
	.Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	.USBSpecification       = VERSION_BCD(01.10),
 | 
			
		||||
	.Class                  = 0xEF,
 | 
			
		||||
	.SubClass               = 0x02,
 | 
			
		||||
	.Protocol               = 0x01,
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	.Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	.VendorID               = 0x03EB,
 | 
			
		||||
	.ProductID              = 0x204E,
 | 
			
		||||
	.ReleaseNumber          = VERSION_BCD(00.01),
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	.ManufacturerStrIndex   = 0x01,
 | 
			
		||||
	.ProductStrIndex        = 0x02,
 | 
			
		||||
	.SerialNumStrIndex      = USE_INTERNAL_SERIAL,
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -83,22 +83,22 @@ USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
 | 
			
		|||
 */
 | 
			
		||||
USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		||||
{
 | 
			
		||||
	.Config = 
 | 
			
		||||
	.Config =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},
 | 
			
		||||
 | 
			
		||||
			.TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),
 | 
			
		||||
			.TotalInterfaces        = 4,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.ConfigurationNumber    = 1,
 | 
			
		||||
			.ConfigurationStrIndex  = NO_DESCRIPTOR,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.ConfigAttributes       = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)
 | 
			
		||||
		},
 | 
			
		||||
		
 | 
			
		||||
	.CDC1_IAD = 
 | 
			
		||||
 | 
			
		||||
	.CDC1_IAD =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_Association_t), .Type = DTYPE_InterfaceAssociation},
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -112,94 +112,94 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		|||
			.IADStrIndex            = NO_DESCRIPTOR
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.CDC1_CCI_Interface = 
 | 
			
		||||
	.CDC1_CCI_Interface =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 | 
			
		||||
 | 
			
		||||
			.InterfaceNumber        = 0,
 | 
			
		||||
			.AlternateSetting       = 0,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.TotalEndpoints         = 1,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.Class                  = 0x02,
 | 
			
		||||
			.SubClass               = 0x02,
 | 
			
		||||
			.Protocol               = 0x01,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.InterfaceStrIndex      = NO_DESCRIPTOR
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.CDC1_Functional_Header = 
 | 
			
		||||
	.CDC1_Functional_Header =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), .Type = DTYPE_CSInterface},
 | 
			
		||||
			.Subtype                = CDC_DSUBTYPE_CSInterface_Header,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.CDCSpecification       = VERSION_BCD(01.10),
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.CDC1_Functional_ACM = 
 | 
			
		||||
	.CDC1_Functional_ACM =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = DTYPE_CSInterface},
 | 
			
		||||
			.Subtype                = CDC_DSUBTYPE_CSInterface_ACM,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.Capabilities           = 0x06,
 | 
			
		||||
		},
 | 
			
		||||
		
 | 
			
		||||
	.CDC1_Functional_Union = 
 | 
			
		||||
 | 
			
		||||
	.CDC1_Functional_Union =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = DTYPE_CSInterface},
 | 
			
		||||
			.Subtype                = CDC_DSUBTYPE_CSInterface_Union,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.MasterInterfaceNumber  = 0,
 | 
			
		||||
			.SlaveInterfaceNumber   = 1,
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.CDC1_ManagementEndpoint = 
 | 
			
		||||
	.CDC1_ManagementEndpoint =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC1_NOTIFICATION_EPNUM),
 | 
			
		||||
			.Attributes             = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
 | 
			
		||||
			.EndpointSize           = CDC_NOTIFICATION_EPSIZE,
 | 
			
		||||
			.PollingIntervalMS      = 0xFF
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.CDC1_DCI_Interface = 
 | 
			
		||||
	.CDC1_DCI_Interface =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 | 
			
		||||
 | 
			
		||||
			.InterfaceNumber        = 1,
 | 
			
		||||
			.AlternateSetting       = 0,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.TotalEndpoints         = 2,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.Class                  = 0x0A,
 | 
			
		||||
			.SubClass               = 0x00,
 | 
			
		||||
			.Protocol               = 0x00,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.InterfaceStrIndex      = NO_DESCRIPTOR
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.CDC1_DataOutEndpoint = 
 | 
			
		||||
	.CDC1_DataOutEndpoint =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC1_RX_EPNUM),
 | 
			
		||||
			.Attributes             = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
 | 
			
		||||
			.EndpointSize           = CDC_TXRX_EPSIZE,
 | 
			
		||||
			.PollingIntervalMS      = 0x00
 | 
			
		||||
		},
 | 
			
		||||
		
 | 
			
		||||
	.CDC1_DataInEndpoint = 
 | 
			
		||||
 | 
			
		||||
	.CDC1_DataInEndpoint =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC1_TX_EPNUM),
 | 
			
		||||
			.Attributes             = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
 | 
			
		||||
			.EndpointSize           = CDC_TXRX_EPSIZE,
 | 
			
		||||
			.PollingIntervalMS      = 0x00
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.CDC2_IAD = 
 | 
			
		||||
	.CDC2_IAD =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_Association_t), .Type = DTYPE_InterfaceAssociation},
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -213,87 +213,87 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		|||
			.IADStrIndex            = NO_DESCRIPTOR
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.CDC2_CCI_Interface = 
 | 
			
		||||
	.CDC2_CCI_Interface =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 | 
			
		||||
 | 
			
		||||
			.InterfaceNumber        = 2,
 | 
			
		||||
			.AlternateSetting       = 0,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.TotalEndpoints         = 1,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.Class                  = 0x02,
 | 
			
		||||
			.SubClass               = 0x02,
 | 
			
		||||
			.Protocol               = 0x01,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.InterfaceStrIndex      = NO_DESCRIPTOR
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.CDC2_Functional_Header = 
 | 
			
		||||
	.CDC2_Functional_Header =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), .Type = DTYPE_CSInterface},
 | 
			
		||||
			.Subtype                = CDC_DSUBTYPE_CSInterface_Header,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.CDCSpecification       = VERSION_BCD(01.10),
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.CDC2_Functional_ACM = 
 | 
			
		||||
	.CDC2_Functional_ACM =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = DTYPE_CSInterface},
 | 
			
		||||
			.Subtype                = CDC_DSUBTYPE_CSInterface_ACM,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.Capabilities           = 0x06,
 | 
			
		||||
		},
 | 
			
		||||
		
 | 
			
		||||
	.CDC2_Functional_Union = 
 | 
			
		||||
 | 
			
		||||
	.CDC2_Functional_Union =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = DTYPE_CSInterface},
 | 
			
		||||
			.Subtype                = CDC_DSUBTYPE_CSInterface_Union,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.MasterInterfaceNumber  = 2,
 | 
			
		||||
			.SlaveInterfaceNumber   = 3,
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.CDC2_ManagementEndpoint = 
 | 
			
		||||
	.CDC2_ManagementEndpoint =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC2_NOTIFICATION_EPNUM),
 | 
			
		||||
			.Attributes             = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
 | 
			
		||||
			.EndpointSize           = CDC_NOTIFICATION_EPSIZE,
 | 
			
		||||
			.PollingIntervalMS      = 0xFF
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.CDC2_DCI_Interface = 
 | 
			
		||||
	.CDC2_DCI_Interface =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 | 
			
		||||
 | 
			
		||||
			.InterfaceNumber        = 3,
 | 
			
		||||
			.AlternateSetting       = 0,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.TotalEndpoints         = 2,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.Class                  = 0x0A,
 | 
			
		||||
			.SubClass               = 0x00,
 | 
			
		||||
			.Protocol               = 0x00,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.InterfaceStrIndex      = NO_DESCRIPTOR
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.CDC2_DataOutEndpoint = 
 | 
			
		||||
	.CDC2_DataOutEndpoint =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC2_RX_EPNUM),
 | 
			
		||||
			.Attributes             = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
 | 
			
		||||
			.EndpointSize           = CDC_TXRX_EPSIZE,
 | 
			
		||||
			.PollingIntervalMS      = 0x00
 | 
			
		||||
		},
 | 
			
		||||
		
 | 
			
		||||
	.CDC2_DataInEndpoint = 
 | 
			
		||||
 | 
			
		||||
	.CDC2_DataInEndpoint =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC2_TX_EPNUM),
 | 
			
		||||
			.Attributes             = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
 | 
			
		||||
			.EndpointSize           = CDC_TXRX_EPSIZE,
 | 
			
		||||
| 
						 | 
				
			
			@ -356,30 +356,31 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		|||
			Address = &DeviceDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Configuration: 
 | 
			
		||||
		case DTYPE_Configuration:
 | 
			
		||||
			Address = &ConfigurationDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_String: 
 | 
			
		||||
		case DTYPE_String:
 | 
			
		||||
			switch (DescriptorNumber)
 | 
			
		||||
			{
 | 
			
		||||
				case 0x00: 
 | 
			
		||||
				case 0x00:
 | 
			
		||||
					Address = &LanguageString;
 | 
			
		||||
					Size    = pgm_read_byte(&LanguageString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x01: 
 | 
			
		||||
				case 0x01:
 | 
			
		||||
					Address = &ManufacturerString;
 | 
			
		||||
					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x02: 
 | 
			
		||||
				case 0x02:
 | 
			
		||||
					Address = &ProductString;
 | 
			
		||||
					Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			break;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	*DescriptorAddress = Address;
 | 
			
		||||
	return Size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -32,7 +32,7 @@
 | 
			
		|||
 *
 | 
			
		||||
 *  Header file for Descriptors.c.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
#ifndef _DESCRIPTORS_H_
 | 
			
		||||
#define _DESCRIPTORS_H_
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -102,3 +102,4 @@
 | 
			
		|||
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -92,7 +92,7 @@ USB_ClassInfo_CDC_Device_t VirtualSerial2_CDC_Interface =
 | 
			
		|||
int main(void)
 | 
			
		||||
{
 | 
			
		||||
	SetupHardware();
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
 | 
			
		||||
	sei();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -107,7 +107,7 @@ int main(void)
 | 
			
		|||
		int16_t ReceivedByte = CDC_Device_ReceiveByte(&VirtualSerial2_CDC_Interface);
 | 
			
		||||
		if (!(ReceivedByte < 0))
 | 
			
		||||
		  CDC_Device_SendByte(&VirtualSerial2_CDC_Interface, (uint8_t)ReceivedByte);
 | 
			
		||||
		  
 | 
			
		||||
 | 
			
		||||
		CDC_Device_USBTask(&VirtualSerial1_CDC_Interface);
 | 
			
		||||
		CDC_Device_USBTask(&VirtualSerial2_CDC_Interface);
 | 
			
		||||
		USB_USBTask();
 | 
			
		||||
| 
						 | 
				
			
			@ -151,12 +151,12 @@ void CheckJoystickMovement(void)
 | 
			
		|||
	  ReportString = "Joystick Pressed\r\n";
 | 
			
		||||
	else
 | 
			
		||||
	  ActionSent = false;
 | 
			
		||||
	  
 | 
			
		||||
 | 
			
		||||
	if ((ReportString != NULL) && (ActionSent == false))
 | 
			
		||||
	{
 | 
			
		||||
		ActionSent = true;
 | 
			
		||||
		
 | 
			
		||||
		CDC_Device_SendString(&VirtualSerial1_CDC_Interface, ReportString, strlen(ReportString));		
 | 
			
		||||
 | 
			
		||||
		CDC_Device_SendString(&VirtualSerial1_CDC_Interface, ReportString, strlen(ReportString));
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -189,3 +189,4 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
 | 
			
		|||
	CDC_Device_ProcessControlRequest(&VirtualSerial1_CDC_Interface);
 | 
			
		||||
	CDC_Device_ProcessControlRequest(&VirtualSerial2_CDC_Interface);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -63,7 +63,7 @@
 | 
			
		|||
 | 
			
		||||
		/** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */
 | 
			
		||||
		#define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	/* Function Prototypes: */
 | 
			
		||||
		void SetupHardware(void);
 | 
			
		||||
		void CheckJoystickMovement(void);
 | 
			
		||||
| 
						 | 
				
			
			@ -74,3 +74,4 @@
 | 
			
		|||
		void EVENT_USB_Device_UnhandledControlRequest(void);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,7 +3,7 @@
 | 
			
		|||
 *  This file contains special DoxyGen information for the generation of the main page and other special
 | 
			
		||||
 *  documentation pages. It is not a project source file.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
/** \mainpage Dual Communications Device Class (Dual Virtual Serial Port) Device
 | 
			
		||||
 *
 | 
			
		||||
 *  \section SSec_Compat Demo Compatibility:
 | 
			
		||||
| 
						 | 
				
			
			@ -27,7 +27,7 @@
 | 
			
		|||
 *    <td><b>USB Class:</b></td>
 | 
			
		||||
 *    <td>Communications Device Class (CDC)</td>
 | 
			
		||||
 *   </tr>
 | 
			
		||||
 *   <tr> 
 | 
			
		||||
 *   <tr>
 | 
			
		||||
 *    <td><b>USB Subclass:</b></td>
 | 
			
		||||
 *    <td>Abstract Control Model (ACM)</td>
 | 
			
		||||
 *   </tr>
 | 
			
		||||
| 
						 | 
				
			
			@ -46,7 +46,7 @@
 | 
			
		|||
 *   </tr>
 | 
			
		||||
 *  </table>
 | 
			
		||||
 *
 | 
			
		||||
 *  \section SSec_Description Project Description: 
 | 
			
		||||
 *  \section SSec_Description Project Description:
 | 
			
		||||
 *
 | 
			
		||||
 *  Dual Communications Device Class demonstration application.
 | 
			
		||||
 *  This gives a simple reference application for implementing
 | 
			
		||||
| 
						 | 
				
			
			@ -56,13 +56,13 @@
 | 
			
		|||
 *  descriptors for each virtual serial port, which may not be
 | 
			
		||||
 *  supported in all OSes - Windows Vista is supported, as is
 | 
			
		||||
 *  XP (although the latter may need a hotfix to function).
 | 
			
		||||
 *  
 | 
			
		||||
 *
 | 
			
		||||
 *  Joystick actions are transmitted to the host as strings
 | 
			
		||||
 *  through the first serial port. The device does not respond to
 | 
			
		||||
 *  serial data sent from the host in the first serial port.
 | 
			
		||||
 *  
 | 
			
		||||
 *
 | 
			
		||||
 *  The second serial port echoes back data sent from the host.
 | 
			
		||||
 *  
 | 
			
		||||
 *
 | 
			
		||||
 *  After running this demo for the first time on a new computer,
 | 
			
		||||
 *  you will need to supply the .INF file located in this demo
 | 
			
		||||
 *  project's directory as the device's driver when running under
 | 
			
		||||
| 
						 | 
				
			
			@ -83,3 +83,4 @@
 | 
			
		|||
 *   </tr>
 | 
			
		||||
 *  </table>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,7 +47,7 @@
 | 
			
		|||
# make doxygen = Generate DoxyGen documentation for the project (must have
 | 
			
		||||
#                DoxyGen installed)
 | 
			
		||||
#
 | 
			
		||||
# make debug = Start either simulavr or avarice as specified for debugging, 
 | 
			
		||||
# make debug = Start either simulavr or avarice as specified for debugging,
 | 
			
		||||
#              with avr-gdb or avr-insight as the front end for debugging.
 | 
			
		||||
#
 | 
			
		||||
# make filename.s = Just compile filename.c into the assembler code only.
 | 
			
		||||
| 
						 | 
				
			
			@ -64,14 +64,14 @@ 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 
 | 
			
		||||
# LUFA board drivers). If USER is selected, put custom board drivers in a directory called
 | 
			
		||||
# "Board" inside the application directory.
 | 
			
		||||
BOARD = USBKEY
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Processor frequency.
 | 
			
		||||
#     This will define a symbol, F_CPU, in all source code files equal to the 
 | 
			
		||||
#     processor frequency in Hz. You can then use this symbol in your source code to 
 | 
			
		||||
#     This will define a symbol, F_CPU, in all source code files equal to the
 | 
			
		||||
#     processor frequency in Hz. You can then use this symbol in your source code to
 | 
			
		||||
#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
 | 
			
		||||
#     automatically to create a 32-bit value in your source code.
 | 
			
		||||
#
 | 
			
		||||
| 
						 | 
				
			
			@ -84,7 +84,7 @@ F_CPU = 8000000
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Input clock frequency.
 | 
			
		||||
#     This will define a symbol, F_CLOCK, in all source code files equal to the 
 | 
			
		||||
#     This will define a symbol, F_CLOCK, in all source code files equal to the
 | 
			
		||||
#     input clock frequency (before any prescaling is performed) in Hz. This value may
 | 
			
		||||
#     differ from F_CPU if prescaling is used on the latter, and is required as the
 | 
			
		||||
#     raw input clock is fed directly to the PLL sections of the AVR for high speed
 | 
			
		||||
| 
						 | 
				
			
			@ -135,7 +135,7 @@ SRC = $(TARGET).c                                                 \
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# List C++ source files here. (C dependencies are automatically generated.)
 | 
			
		||||
CPPSRC = 
 | 
			
		||||
CPPSRC =
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# List Assembler source files here.
 | 
			
		||||
| 
						 | 
				
			
			@ -148,7 +148,7 @@ CPPSRC =
 | 
			
		|||
ASRC =
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Optimization level, can be [0, 1, 2, 3, s]. 
 | 
			
		||||
# Optimization level, can be [0, 1, 2, 3, s].
 | 
			
		||||
#     0 = turn off optimization. s = optimize for size.
 | 
			
		||||
#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
 | 
			
		||||
OPT = s
 | 
			
		||||
| 
						 | 
				
			
			@ -262,7 +262,7 @@ CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
 | 
			
		|||
#             for use in COFF files, additional information about filenames
 | 
			
		||||
#             and function names needs to be present in the assembler source
 | 
			
		||||
#             files -- see avr-libc docs [FIXME: not yet described there]
 | 
			
		||||
#  -listing-cont-lines: Sets the maximum number of continuation lines of hex 
 | 
			
		||||
#  -listing-cont-lines: Sets the maximum number of continuation lines of hex
 | 
			
		||||
#       dump that will be displayed for a given single line of source input.
 | 
			
		||||
ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -275,7 +275,7 @@ PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
 | 
			
		|||
PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
 | 
			
		||||
 | 
			
		||||
# If this is left blank, then it will use the Standard printf version.
 | 
			
		||||
PRINTF_LIB = 
 | 
			
		||||
PRINTF_LIB =
 | 
			
		||||
#PRINTF_LIB = $(PRINTF_LIB_MIN)
 | 
			
		||||
#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -287,7 +287,7 @@ SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
 | 
			
		|||
SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
 | 
			
		||||
 | 
			
		||||
# If this is left blank, then it will use the Standard scanf version.
 | 
			
		||||
SCANF_LIB = 
 | 
			
		||||
SCANF_LIB =
 | 
			
		||||
#SCANF_LIB = $(SCANF_LIB_MIN)
 | 
			
		||||
#SCANF_LIB = $(SCANF_LIB_FLOAT)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -299,7 +299,7 @@ MATH_LIB = -lm
 | 
			
		|||
#     Each directory must be seperated by a space.
 | 
			
		||||
#     Use forward slashes for directory separators.
 | 
			
		||||
#     For a directory that has spaces, enclose it in quotes.
 | 
			
		||||
EXTRALIBDIRS = 
 | 
			
		||||
EXTRALIBDIRS =
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -322,7 +322,7 @@ EXTMEMOPTS =
 | 
			
		|||
#    -Map:      create map file
 | 
			
		||||
#    --cref:    add cross reference to  map file
 | 
			
		||||
LDFLAGS  = -Wl,-Map=$(TARGET).map,--cref
 | 
			
		||||
LDFLAGS += -Wl,--relax 
 | 
			
		||||
LDFLAGS += -Wl,--relax
 | 
			
		||||
LDFLAGS += -Wl,--gc-sections
 | 
			
		||||
LDFLAGS += $(EXTMEMOPTS)
 | 
			
		||||
LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))
 | 
			
		||||
| 
						 | 
				
			
			@ -356,7 +356,7 @@ AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
 | 
			
		|||
#AVRDUDE_NO_VERIFY = -V
 | 
			
		||||
 | 
			
		||||
# Increase verbosity level.  Please use this when submitting bug
 | 
			
		||||
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
 | 
			
		||||
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
 | 
			
		||||
# to submit bug reports.
 | 
			
		||||
#AVRDUDE_VERBOSE = -v -v
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -390,7 +390,7 @@ JTAG_DEV = /dev/com1
 | 
			
		|||
DEBUG_PORT = 4242
 | 
			
		||||
 | 
			
		||||
# Debugging host used to communicate between GDB / avarice / simulavr, normally
 | 
			
		||||
#     just set to localhost unless doing some sort of crazy debugging when 
 | 
			
		||||
#     just set to localhost unless doing some sort of crazy debugging when
 | 
			
		||||
#     avarice is running on a different computer.
 | 
			
		||||
DEBUG_HOST = localhost
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -419,7 +419,7 @@ WINSHELL = cmd
 | 
			
		|||
MSG_ERRORS_NONE = Errors: none
 | 
			
		||||
MSG_BEGIN = -------- begin --------
 | 
			
		||||
MSG_END = --------  end  --------
 | 
			
		||||
MSG_SIZE_BEFORE = Size before: 
 | 
			
		||||
MSG_SIZE_BEFORE = Size before:
 | 
			
		||||
MSG_SIZE_AFTER = Size after:
 | 
			
		||||
MSG_COFF = Converting to AVR COFF:
 | 
			
		||||
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
 | 
			
		||||
| 
						 | 
				
			
			@ -438,10 +438,10 @@ MSG_CREATING_LIBRARY = Creating library:
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Define all object files.
 | 
			
		||||
OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) 
 | 
			
		||||
OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o)
 | 
			
		||||
 | 
			
		||||
# Define all listing files.
 | 
			
		||||
LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) 
 | 
			
		||||
LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Compiler flags to generate dependency files.
 | 
			
		||||
| 
						 | 
				
			
			@ -506,11 +506,11 @@ sizeafter:
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Display compiler version information.
 | 
			
		||||
gccversion : 
 | 
			
		||||
gccversion :
 | 
			
		||||
	@$(CC) --version
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Program the device.  
 | 
			
		||||
# Program the device.
 | 
			
		||||
program: $(TARGET).hex $(TARGET).eep
 | 
			
		||||
	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -537,9 +537,9 @@ dfu-ee: $(TARGET).hex $(TARGET).eep
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Generate avr-gdb config/init file which does the following:
 | 
			
		||||
#     define the reset signal, load the target file, connect to target, and set 
 | 
			
		||||
#     define the reset signal, load the target file, connect to target, and set
 | 
			
		||||
#     a breakpoint at main().
 | 
			
		||||
gdb-config: 
 | 
			
		||||
gdb-config:
 | 
			
		||||
	@$(REMOVE) $(GDBINIT_FILE)
 | 
			
		||||
	@echo define reset >> $(GDBINIT_FILE)
 | 
			
		||||
	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
 | 
			
		||||
| 
						 | 
				
			
			@ -637,14 +637,14 @@ extcoff: $(TARGET).elf
 | 
			
		|||
$(OBJDIR)/%.o : %.c
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo $(MSG_COMPILING) $<
 | 
			
		||||
	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
 | 
			
		||||
	$(CC) -c $(ALL_CFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Compile: create object files from C++ source files.
 | 
			
		||||
$(OBJDIR)/%.o : %.cpp
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo $(MSG_COMPILING_CPP) $<
 | 
			
		||||
	$(CC) -c $(ALL_CPPFLAGS) $< -o $@ 
 | 
			
		||||
	$(CC) -c $(ALL_CPPFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Compile: create assembler files from C source files.
 | 
			
		||||
| 
						 | 
				
			
			@ -666,7 +666,7 @@ $(OBJDIR)/%.o : %.S
 | 
			
		|||
 | 
			
		||||
# Create preprocessed source for use in sending a bug report.
 | 
			
		||||
%.i : %.c
 | 
			
		||||
	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
 | 
			
		||||
	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Target: clean project.
 | 
			
		||||
| 
						 | 
				
			
			@ -710,3 +710,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null)
 | 
			
		|||
build elf hex eep lss sym coff extcoff doxygen clean          \
 | 
			
		||||
clean_list clean_doxygen program dfu flip flip-ee dfu-ee      \
 | 
			
		||||
debug gdb-config
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -30,9 +30,9 @@
 | 
			
		|||
 | 
			
		||||
/** \file
 | 
			
		||||
 *
 | 
			
		||||
 *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special 
 | 
			
		||||
 *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special
 | 
			
		||||
 *  computer-readable structures which the host requests upon device enumeration, to determine
 | 
			
		||||
 *  the device's capabilities and functions.  
 | 
			
		||||
 *  the device's capabilities and functions.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "Descriptors.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -71,22 +71,22 @@ USB_Descriptor_HIDReport_Datatype_t PROGMEM GenericReport[] =
 | 
			
		|||
USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
 | 
			
		||||
{
 | 
			
		||||
	.Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.USBSpecification       = VERSION_BCD(01.10),
 | 
			
		||||
	.Class                  = 0x00,
 | 
			
		||||
	.SubClass               = 0x00,
 | 
			
		||||
	.Protocol               = 0x00,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
	.Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.VendorID               = 0x03EB,
 | 
			
		||||
	.ProductID              = 0x204F,
 | 
			
		||||
	.ReleaseNumber          = VERSION_BCD(00.01),
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.ManufacturerStrIndex   = 0x01,
 | 
			
		||||
	.ProductStrIndex        = 0x02,
 | 
			
		||||
	.SerialNumStrIndex      = NO_DESCRIPTOR,
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -97,41 +97,41 @@ USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
 | 
			
		|||
 */
 | 
			
		||||
USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		||||
{
 | 
			
		||||
	.Config = 
 | 
			
		||||
	.Config =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},
 | 
			
		||||
 | 
			
		||||
			.TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),
 | 
			
		||||
			.TotalInterfaces        = 1,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.ConfigurationNumber    = 1,
 | 
			
		||||
			.ConfigurationStrIndex  = NO_DESCRIPTOR,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.ConfigAttributes       = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)
 | 
			
		||||
		},
 | 
			
		||||
		
 | 
			
		||||
	.HID_Interface = 
 | 
			
		||||
 | 
			
		||||
	.HID_Interface =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 | 
			
		||||
 | 
			
		||||
			.InterfaceNumber        = 0x00,
 | 
			
		||||
			.AlternateSetting       = 0x00,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.TotalEndpoints         = 1,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.Class                  = 0x03,
 | 
			
		||||
			.SubClass               = 0x00,
 | 
			
		||||
			.Protocol               = HID_BOOTP_NonBootProtocol,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.InterfaceStrIndex      = NO_DESCRIPTOR
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.HID_GenericHID = 
 | 
			
		||||
	.HID_GenericHID =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID},
 | 
			
		||||
									 
 | 
			
		||||
 | 
			
		||||
			.HIDSpec                = VERSION_BCD(01.11),
 | 
			
		||||
			.CountryCode            = 0x00,
 | 
			
		||||
			.TotalReportDescriptors = 1,
 | 
			
		||||
| 
						 | 
				
			
			@ -139,10 +139,10 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		|||
			.HIDReportLength        = sizeof(GenericReport)
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.HID_ReportINEndpoint = 
 | 
			
		||||
	.HID_ReportINEndpoint =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
 | 
			
		||||
										 
 | 
			
		||||
 | 
			
		||||
			.EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | GENERIC_IN_EPNUM),
 | 
			
		||||
			.Attributes             = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
 | 
			
		||||
			.EndpointSize           = GENERIC_EPSIZE,
 | 
			
		||||
| 
						 | 
				
			
			@ -157,7 +157,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		|||
USB_Descriptor_String_t PROGMEM LanguageString =
 | 
			
		||||
{
 | 
			
		||||
	.Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.UnicodeString          = {LANGUAGE_ID_ENG}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -168,7 +168,7 @@ USB_Descriptor_String_t PROGMEM LanguageString =
 | 
			
		|||
USB_Descriptor_String_t PROGMEM ManufacturerString =
 | 
			
		||||
{
 | 
			
		||||
	.Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.UnicodeString          = L"Dean Camera"
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -179,7 +179,7 @@ USB_Descriptor_String_t PROGMEM ManufacturerString =
 | 
			
		|||
USB_Descriptor_String_t PROGMEM ProductString =
 | 
			
		||||
{
 | 
			
		||||
	.Header                 = {.Size = USB_STRING_LEN(21), .Type = DTYPE_String},
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.UnicodeString          = L"LUFA Generic HID Demo"
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -205,38 +205,39 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		|||
			Address = &DeviceDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Configuration: 
 | 
			
		||||
		case DTYPE_Configuration:
 | 
			
		||||
			Address = &ConfigurationDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_String: 
 | 
			
		||||
		case DTYPE_String:
 | 
			
		||||
			switch (DescriptorNumber)
 | 
			
		||||
			{
 | 
			
		||||
				case 0x00: 
 | 
			
		||||
				case 0x00:
 | 
			
		||||
					Address = &LanguageString;
 | 
			
		||||
					Size    = pgm_read_byte(&LanguageString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x01: 
 | 
			
		||||
				case 0x01:
 | 
			
		||||
					Address = &ManufacturerString;
 | 
			
		||||
					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x02: 
 | 
			
		||||
				case 0x02:
 | 
			
		||||
					Address = &ProductString;
 | 
			
		||||
					Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			break;
 | 
			
		||||
		case HID_DTYPE_HID: 
 | 
			
		||||
		case HID_DTYPE_HID:
 | 
			
		||||
			Address = &ConfigurationDescriptor.HID_GenericHID;
 | 
			
		||||
			Size    = sizeof(USB_HID_Descriptor_HID_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case HID_DTYPE_Report: 
 | 
			
		||||
		case HID_DTYPE_Report:
 | 
			
		||||
			Address = &GenericReport;
 | 
			
		||||
			Size    = sizeof(GenericReport);
 | 
			
		||||
			break;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	*DescriptorAddress = Address;
 | 
			
		||||
	return Size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -32,7 +32,7 @@
 | 
			
		|||
 *
 | 
			
		||||
 *  Header file for Descriptors.c.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
#ifndef _DESCRIPTORS_H_
 | 
			
		||||
#define _DESCRIPTORS_H_
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -61,14 +61,15 @@
 | 
			
		|||
 | 
			
		||||
		/** Size in bytes of the Generic HID reporting endpoint. */
 | 
			
		||||
		#define GENERIC_EPSIZE            8
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/** Size in bytes of the Generic HID reports (including report ID byte). */
 | 
			
		||||
		#define GENERIC_REPORT_SIZE       8
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	/* Function Prototypes: */
 | 
			
		||||
		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
		                                    const uint8_t wIndex,
 | 
			
		||||
		                                    const void** const DescriptorAddress)
 | 
			
		||||
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
											
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -60,7 +60,7 @@ USB_ClassInfo_HID_Device_t Generic_HID_Interface =
 | 
			
		|||
				.ReportINEndpointNumber       = GENERIC_IN_EPNUM,
 | 
			
		||||
				.ReportINEndpointSize         = GENERIC_EPSIZE,
 | 
			
		||||
				.ReportINEndpointDoubleBank   = false,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
				.PrevReportINBuffer           = PrevHIDReportBuffer,
 | 
			
		||||
				.PrevReportINBufferSize       = sizeof(PrevHIDReportBuffer),
 | 
			
		||||
			},
 | 
			
		||||
| 
						 | 
				
			
			@ -72,10 +72,10 @@ USB_ClassInfo_HID_Device_t Generic_HID_Interface =
 | 
			
		|||
int main(void)
 | 
			
		||||
{
 | 
			
		||||
	SetupHardware();
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
 | 
			
		||||
	sei();
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	for (;;)
 | 
			
		||||
	{
 | 
			
		||||
		HID_Device_USBTask(&Generic_HID_Interface);
 | 
			
		||||
| 
						 | 
				
			
			@ -101,7 +101,7 @@ void SetupHardware(void)
 | 
			
		|||
/** Event handler for the library USB Connection event. */
 | 
			
		||||
void EVENT_USB_Device_Connect(void)
 | 
			
		||||
{
 | 
			
		||||
	LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);	
 | 
			
		||||
	LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Event handler for the library USB Disconnection event. */
 | 
			
		||||
| 
						 | 
				
			
			@ -154,7 +154,7 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
 | 
			
		|||
	  *ReportID = HIDReportEcho.ReportID;
 | 
			
		||||
 | 
			
		||||
	memcpy(ReportData, HIDReportEcho.ReportData, HIDReportEcho.ReportSize);
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	*ReportSize = HIDReportEcho.ReportSize;
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -177,3 +177,4 @@ void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDI
 | 
			
		|||
	HIDReportEcho.ReportSize = ReportSize;
 | 
			
		||||
	memcpy(HIDReportEcho.ReportData, ReportData, ReportSize);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -32,7 +32,7 @@
 | 
			
		|||
 *
 | 
			
		||||
 *  Header file for GenericHID.c.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
#ifndef _GENERICHID_H_
 | 
			
		||||
#define _GENERICHID_H_
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -42,7 +42,7 @@
 | 
			
		|||
		#include <avr/power.h>
 | 
			
		||||
		#include <avr/interrupt.h>
 | 
			
		||||
		#include <string.h>
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		#include "Descriptors.h"
 | 
			
		||||
 | 
			
		||||
		#include <LUFA/Version.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -78,9 +78,10 @@
 | 
			
		|||
		                                         void* ReportData,
 | 
			
		||||
		                                         uint16_t* const ReportSize);
 | 
			
		||||
		void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo,
 | 
			
		||||
		                                          const uint8_t ReportID, 
 | 
			
		||||
		                                          const uint8_t ReportID,
 | 
			
		||||
		                                          const uint8_t ReportType,
 | 
			
		||||
		                                          const void* ReportData,
 | 
			
		||||
		                                          const uint16_t ReportSize);
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,7 +3,7 @@
 | 
			
		|||
 *  This file contains special DoxyGen information for the generation of the main page and other special
 | 
			
		||||
 *  documentation pages. It is not a project source file.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
/** \mainpage Generic HID Device
 | 
			
		||||
 *
 | 
			
		||||
 *  \section SSec_Compat Demo Compatibility:
 | 
			
		||||
| 
						 | 
				
			
			@ -28,7 +28,7 @@
 | 
			
		|||
 *    <td><b>USB Class:</b></td>
 | 
			
		||||
 *    <td>Human Interface Device (HID)</td>
 | 
			
		||||
 *   </tr>
 | 
			
		||||
 *   <tr> 
 | 
			
		||||
 *   <tr>
 | 
			
		||||
 *    <td><b>USB Subclass:</b></td>
 | 
			
		||||
 *    <td>N/A</td>
 | 
			
		||||
 *   </tr>
 | 
			
		||||
| 
						 | 
				
			
			@ -44,19 +44,19 @@
 | 
			
		|||
 *   </tr>
 | 
			
		||||
 *  </table>
 | 
			
		||||
 *
 | 
			
		||||
 *  \section SSec_Description Project Description: 
 | 
			
		||||
 *  \section SSec_Description Project Description:
 | 
			
		||||
 *
 | 
			
		||||
 *  Generic HID device demonstration application. This gives a simple reference application
 | 
			
		||||
 *  for implementing a generic HID device, using the basic USB HID drivers in all modern
 | 
			
		||||
 *  OSes (i.e. no special drivers required). By default it accepts and sends up to 8 byte reports
 | 
			
		||||
 *  to and from a USB Host, and transmits the last sent report back to the host.
 | 
			
		||||
 *  
 | 
			
		||||
 *
 | 
			
		||||
 *  On start-up the system will automatically enumerate and function as a vendor HID device.
 | 
			
		||||
 *  When controlled by a custom HID class application, reports can be sent and received by
 | 
			
		||||
 *  both the standard data endpoint and control request methods defined in the HID specification.
 | 
			
		||||
 *
 | 
			
		||||
 *  \section SSec_Options Project Options
 | 
			
		||||
 *  
 | 
			
		||||
 *
 | 
			
		||||
 *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.
 | 
			
		||||
 *
 | 
			
		||||
 *  <table>
 | 
			
		||||
| 
						 | 
				
			
			@ -73,3 +73,4 @@
 | 
			
		|||
 *   </tr>
 | 
			
		||||
 *  </table>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,7 +47,7 @@
 | 
			
		|||
# make doxygen = Generate DoxyGen documentation for the project (must have
 | 
			
		||||
#                DoxyGen installed)
 | 
			
		||||
#
 | 
			
		||||
# make debug = Start either simulavr or avarice as specified for debugging, 
 | 
			
		||||
# make debug = Start either simulavr or avarice as specified for debugging,
 | 
			
		||||
#              with avr-gdb or avr-insight as the front end for debugging.
 | 
			
		||||
#
 | 
			
		||||
# make filename.s = Just compile filename.c into the assembler code only.
 | 
			
		||||
| 
						 | 
				
			
			@ -64,14 +64,14 @@ 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 
 | 
			
		||||
# LUFA board drivers). If USER is selected, put custom board drivers in a directory called
 | 
			
		||||
# "Board" inside the application directory.
 | 
			
		||||
BOARD = USBKEY
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Processor frequency.
 | 
			
		||||
#     This will define a symbol, F_CPU, in all source code files equal to the 
 | 
			
		||||
#     processor frequency in Hz. You can then use this symbol in your source code to 
 | 
			
		||||
#     This will define a symbol, F_CPU, in all source code files equal to the
 | 
			
		||||
#     processor frequency in Hz. You can then use this symbol in your source code to
 | 
			
		||||
#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
 | 
			
		||||
#     automatically to create a 32-bit value in your source code.
 | 
			
		||||
#
 | 
			
		||||
| 
						 | 
				
			
			@ -84,7 +84,7 @@ F_CPU = 8000000
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Input clock frequency.
 | 
			
		||||
#     This will define a symbol, F_CLOCK, in all source code files equal to the 
 | 
			
		||||
#     This will define a symbol, F_CLOCK, in all source code files equal to the
 | 
			
		||||
#     input clock frequency (before any prescaling is performed) in Hz. This value may
 | 
			
		||||
#     differ from F_CPU if prescaling is used on the latter, and is required as the
 | 
			
		||||
#     raw input clock is fed directly to the PLL sections of the AVR for high speed
 | 
			
		||||
| 
						 | 
				
			
			@ -135,7 +135,7 @@ SRC = $(TARGET).c                                                 \
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# List C++ source files here. (C dependencies are automatically generated.)
 | 
			
		||||
CPPSRC = 
 | 
			
		||||
CPPSRC =
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# List Assembler source files here.
 | 
			
		||||
| 
						 | 
				
			
			@ -148,7 +148,7 @@ CPPSRC =
 | 
			
		|||
ASRC =
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Optimization level, can be [0, 1, 2, 3, s]. 
 | 
			
		||||
# Optimization level, can be [0, 1, 2, 3, s].
 | 
			
		||||
#     0 = turn off optimization. s = optimize for size.
 | 
			
		||||
#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
 | 
			
		||||
OPT = s
 | 
			
		||||
| 
						 | 
				
			
			@ -262,7 +262,7 @@ CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
 | 
			
		|||
#             for use in COFF files, additional information about filenames
 | 
			
		||||
#             and function names needs to be present in the assembler source
 | 
			
		||||
#             files -- see avr-libc docs [FIXME: not yet described there]
 | 
			
		||||
#  -listing-cont-lines: Sets the maximum number of continuation lines of hex 
 | 
			
		||||
#  -listing-cont-lines: Sets the maximum number of continuation lines of hex
 | 
			
		||||
#       dump that will be displayed for a given single line of source input.
 | 
			
		||||
ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -275,7 +275,7 @@ PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
 | 
			
		|||
PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
 | 
			
		||||
 | 
			
		||||
# If this is left blank, then it will use the Standard printf version.
 | 
			
		||||
PRINTF_LIB = 
 | 
			
		||||
PRINTF_LIB =
 | 
			
		||||
#PRINTF_LIB = $(PRINTF_LIB_MIN)
 | 
			
		||||
#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -287,7 +287,7 @@ SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
 | 
			
		|||
SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
 | 
			
		||||
 | 
			
		||||
# If this is left blank, then it will use the Standard scanf version.
 | 
			
		||||
SCANF_LIB = 
 | 
			
		||||
SCANF_LIB =
 | 
			
		||||
#SCANF_LIB = $(SCANF_LIB_MIN)
 | 
			
		||||
#SCANF_LIB = $(SCANF_LIB_FLOAT)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -299,7 +299,7 @@ MATH_LIB = -lm
 | 
			
		|||
#     Each directory must be seperated by a space.
 | 
			
		||||
#     Use forward slashes for directory separators.
 | 
			
		||||
#     For a directory that has spaces, enclose it in quotes.
 | 
			
		||||
EXTRALIBDIRS = 
 | 
			
		||||
EXTRALIBDIRS =
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -322,7 +322,7 @@ EXTMEMOPTS =
 | 
			
		|||
#    -Map:      create map file
 | 
			
		||||
#    --cref:    add cross reference to  map file
 | 
			
		||||
LDFLAGS  = -Wl,-Map=$(TARGET).map,--cref
 | 
			
		||||
LDFLAGS += -Wl,--relax 
 | 
			
		||||
LDFLAGS += -Wl,--relax
 | 
			
		||||
LDFLAGS += -Wl,--gc-sections
 | 
			
		||||
LDFLAGS += $(EXTMEMOPTS)
 | 
			
		||||
LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))
 | 
			
		||||
| 
						 | 
				
			
			@ -356,7 +356,7 @@ AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
 | 
			
		|||
#AVRDUDE_NO_VERIFY = -V
 | 
			
		||||
 | 
			
		||||
# Increase verbosity level.  Please use this when submitting bug
 | 
			
		||||
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
 | 
			
		||||
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
 | 
			
		||||
# to submit bug reports.
 | 
			
		||||
#AVRDUDE_VERBOSE = -v -v
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -390,7 +390,7 @@ JTAG_DEV = /dev/com1
 | 
			
		|||
DEBUG_PORT = 4242
 | 
			
		||||
 | 
			
		||||
# Debugging host used to communicate between GDB / avarice / simulavr, normally
 | 
			
		||||
#     just set to localhost unless doing some sort of crazy debugging when 
 | 
			
		||||
#     just set to localhost unless doing some sort of crazy debugging when
 | 
			
		||||
#     avarice is running on a different computer.
 | 
			
		||||
DEBUG_HOST = localhost
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -419,7 +419,7 @@ WINSHELL = cmd
 | 
			
		|||
MSG_ERRORS_NONE = Errors: none
 | 
			
		||||
MSG_BEGIN = -------- begin --------
 | 
			
		||||
MSG_END = --------  end  --------
 | 
			
		||||
MSG_SIZE_BEFORE = Size before: 
 | 
			
		||||
MSG_SIZE_BEFORE = Size before:
 | 
			
		||||
MSG_SIZE_AFTER = Size after:
 | 
			
		||||
MSG_COFF = Converting to AVR COFF:
 | 
			
		||||
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
 | 
			
		||||
| 
						 | 
				
			
			@ -438,10 +438,10 @@ MSG_CREATING_LIBRARY = Creating library:
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Define all object files.
 | 
			
		||||
OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) 
 | 
			
		||||
OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o)
 | 
			
		||||
 | 
			
		||||
# Define all listing files.
 | 
			
		||||
LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) 
 | 
			
		||||
LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Compiler flags to generate dependency files.
 | 
			
		||||
| 
						 | 
				
			
			@ -506,11 +506,11 @@ sizeafter:
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Display compiler version information.
 | 
			
		||||
gccversion : 
 | 
			
		||||
gccversion :
 | 
			
		||||
	@$(CC) --version
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Program the device.  
 | 
			
		||||
# Program the device.
 | 
			
		||||
program: $(TARGET).hex $(TARGET).eep
 | 
			
		||||
	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -537,9 +537,9 @@ dfu-ee: $(TARGET).hex $(TARGET).eep
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Generate avr-gdb config/init file which does the following:
 | 
			
		||||
#     define the reset signal, load the target file, connect to target, and set 
 | 
			
		||||
#     define the reset signal, load the target file, connect to target, and set
 | 
			
		||||
#     a breakpoint at main().
 | 
			
		||||
gdb-config: 
 | 
			
		||||
gdb-config:
 | 
			
		||||
	@$(REMOVE) $(GDBINIT_FILE)
 | 
			
		||||
	@echo define reset >> $(GDBINIT_FILE)
 | 
			
		||||
	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
 | 
			
		||||
| 
						 | 
				
			
			@ -637,14 +637,14 @@ extcoff: $(TARGET).elf
 | 
			
		|||
$(OBJDIR)/%.o : %.c
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo $(MSG_COMPILING) $<
 | 
			
		||||
	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
 | 
			
		||||
	$(CC) -c $(ALL_CFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Compile: create object files from C++ source files.
 | 
			
		||||
$(OBJDIR)/%.o : %.cpp
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo $(MSG_COMPILING_CPP) $<
 | 
			
		||||
	$(CC) -c $(ALL_CPPFLAGS) $< -o $@ 
 | 
			
		||||
	$(CC) -c $(ALL_CPPFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Compile: create assembler files from C source files.
 | 
			
		||||
| 
						 | 
				
			
			@ -666,7 +666,7 @@ $(OBJDIR)/%.o : %.S
 | 
			
		|||
 | 
			
		||||
# Create preprocessed source for use in sending a bug report.
 | 
			
		||||
%.i : %.c
 | 
			
		||||
	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
 | 
			
		||||
	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Target: clean project.
 | 
			
		||||
| 
						 | 
				
			
			@ -710,3 +710,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null)
 | 
			
		|||
build elf hex eep lss sym coff extcoff doxygen clean          \
 | 
			
		||||
clean_list clean_doxygen program dfu flip flip-ee dfu-ee      \
 | 
			
		||||
debug gdb-config
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -30,9 +30,9 @@
 | 
			
		|||
 | 
			
		||||
/** \file
 | 
			
		||||
 *
 | 
			
		||||
 *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special 
 | 
			
		||||
 *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special
 | 
			
		||||
 *  computer-readable structures which the host requests upon device enumeration, to determine
 | 
			
		||||
 *  the device's capabilities and functions.  
 | 
			
		||||
 *  the device's capabilities and functions.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "Descriptors.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -81,22 +81,22 @@ USB_Descriptor_HIDReport_Datatype_t PROGMEM JoystickReport[] =
 | 
			
		|||
USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
 | 
			
		||||
{
 | 
			
		||||
	.Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.USBSpecification       = VERSION_BCD(01.10),
 | 
			
		||||
	.Class                  = 0x00,
 | 
			
		||||
	.SubClass               = 0x00,
 | 
			
		||||
	.Protocol               = 0x00,
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	.Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.VendorID               = 0x03EB,
 | 
			
		||||
	.ProductID              = 0x2043,
 | 
			
		||||
	.ReleaseNumber          = VERSION_BCD(00.01),
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.ManufacturerStrIndex   = 0x01,
 | 
			
		||||
	.ProductStrIndex        = 0x02,
 | 
			
		||||
	.SerialNumStrIndex      = NO_DESCRIPTOR,
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -107,41 +107,41 @@ USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
 | 
			
		|||
 */
 | 
			
		||||
USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		||||
{
 | 
			
		||||
	.Config = 
 | 
			
		||||
	.Config =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},
 | 
			
		||||
 | 
			
		||||
			.TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),
 | 
			
		||||
			.TotalInterfaces        = 1,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.ConfigurationNumber    = 1,
 | 
			
		||||
			.ConfigurationStrIndex  = NO_DESCRIPTOR,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.ConfigAttributes       = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)
 | 
			
		||||
		},
 | 
			
		||||
		
 | 
			
		||||
	.HID_Interface = 
 | 
			
		||||
 | 
			
		||||
	.HID_Interface =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 | 
			
		||||
 | 
			
		||||
			.InterfaceNumber        = 0x00,
 | 
			
		||||
			.AlternateSetting       = 0x00,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.TotalEndpoints         = 1,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.Class                  = 0x03,
 | 
			
		||||
			.SubClass               = 0x00,
 | 
			
		||||
			.Protocol               = HID_BOOTP_NonBootProtocol,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.InterfaceStrIndex      = NO_DESCRIPTOR
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.HID_JoystickHID = 
 | 
			
		||||
	.HID_JoystickHID =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID},
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.HIDSpec                = VERSION_BCD(01.11),
 | 
			
		||||
			.CountryCode            = 0x00,
 | 
			
		||||
			.TotalReportDescriptors = 1,
 | 
			
		||||
| 
						 | 
				
			
			@ -149,15 +149,15 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		|||
			.HIDReportLength        = sizeof(JoystickReport)
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.HID_ReportINEndpoint = 
 | 
			
		||||
	.HID_ReportINEndpoint =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | JOYSTICK_EPNUM),
 | 
			
		||||
			.Attributes             = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
 | 
			
		||||
			.EndpointSize           = JOYSTICK_EPSIZE,
 | 
			
		||||
			.PollingIntervalMS      = 0x0A
 | 
			
		||||
		}	
 | 
			
		||||
		}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests
 | 
			
		||||
| 
						 | 
				
			
			@ -167,7 +167,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		|||
USB_Descriptor_String_t PROGMEM LanguageString =
 | 
			
		||||
{
 | 
			
		||||
	.Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.UnicodeString          = {LANGUAGE_ID_ENG}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -178,7 +178,7 @@ USB_Descriptor_String_t PROGMEM LanguageString =
 | 
			
		|||
USB_Descriptor_String_t PROGMEM ManufacturerString =
 | 
			
		||||
{
 | 
			
		||||
	.Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.UnicodeString          = L"Dean Camera"
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -189,7 +189,7 @@ USB_Descriptor_String_t PROGMEM ManufacturerString =
 | 
			
		|||
USB_Descriptor_String_t PROGMEM ProductString =
 | 
			
		||||
{
 | 
			
		||||
	.Header                 = {.Size = USB_STRING_LEN(18), .Type = DTYPE_String},
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.UnicodeString          = L"LUFA Joystick Demo"
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -215,38 +215,39 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		|||
			Address = &DeviceDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Configuration: 
 | 
			
		||||
		case DTYPE_Configuration:
 | 
			
		||||
			Address = &ConfigurationDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_String: 
 | 
			
		||||
		case DTYPE_String:
 | 
			
		||||
			switch (DescriptorNumber)
 | 
			
		||||
			{
 | 
			
		||||
				case 0x00: 
 | 
			
		||||
				case 0x00:
 | 
			
		||||
					Address = &LanguageString;
 | 
			
		||||
					Size    = pgm_read_byte(&LanguageString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x01: 
 | 
			
		||||
				case 0x01:
 | 
			
		||||
					Address = &ManufacturerString;
 | 
			
		||||
					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x02: 
 | 
			
		||||
				case 0x02:
 | 
			
		||||
					Address = &ProductString;
 | 
			
		||||
					Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			break;
 | 
			
		||||
		case HID_DTYPE_HID: 
 | 
			
		||||
		case HID_DTYPE_HID:
 | 
			
		||||
			Address = &ConfigurationDescriptor.HID_JoystickHID;
 | 
			
		||||
			Size    = sizeof(USB_HID_Descriptor_HID_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case HID_DTYPE_Report: 
 | 
			
		||||
		case HID_DTYPE_Report:
 | 
			
		||||
			Address = &JoystickReport;
 | 
			
		||||
			Size    = sizeof(JoystickReport);
 | 
			
		||||
			break;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	*DescriptorAddress = Address;
 | 
			
		||||
	return Size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -32,7 +32,7 @@
 | 
			
		|||
 *
 | 
			
		||||
 *  Header file for Descriptors.c.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
#ifndef _DESCRIPTORS_H_
 | 
			
		||||
#define _DESCRIPTORS_H_
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -69,3 +69,4 @@
 | 
			
		|||
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -64,10 +64,10 @@ USB_ClassInfo_HID_Device_t Joystick_HID_Interface =
 | 
			
		|||
int main(void)
 | 
			
		||||
{
 | 
			
		||||
	SetupHardware();
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
 | 
			
		||||
	sei();
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	for (;;)
 | 
			
		||||
	{
 | 
			
		||||
		HID_Device_USBTask(&Joystick_HID_Interface);
 | 
			
		||||
| 
						 | 
				
			
			@ -145,7 +145,7 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
 | 
			
		|||
                                         uint16_t* const ReportSize)
 | 
			
		||||
{
 | 
			
		||||
	USB_JoystickReport_Data_t* JoystickReport = (USB_JoystickReport_Data_t*)ReportData;
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	uint8_t JoyStatus_LCL    = Joystick_GetStatus();
 | 
			
		||||
	uint8_t ButtonStatus_LCL = Buttons_GetStatus();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -161,10 +161,10 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
 | 
			
		|||
 | 
			
		||||
	if (JoyStatus_LCL & JOY_PRESS)
 | 
			
		||||
	  JoystickReport->Button  = (1 << 1);
 | 
			
		||||
	  
 | 
			
		||||
 | 
			
		||||
	if (ButtonStatus_LCL & BUTTONS_BUTTON1)
 | 
			
		||||
	  JoystickReport->Button |= (1 << 0);
 | 
			
		||||
	  
 | 
			
		||||
 | 
			
		||||
	*ReportSize = sizeof(USB_JoystickReport_Data_t);
 | 
			
		||||
	return false;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -185,3 +185,4 @@ void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDI
 | 
			
		|||
{
 | 
			
		||||
	// Unused (but mandatory for the HID class driver) in this demo, since there are no Host->Device reports
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -32,7 +32,7 @@
 | 
			
		|||
 *
 | 
			
		||||
 *  Header file for Joystick.c.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
#ifndef _JOYSTICK_H_
 | 
			
		||||
#define _JOYSTICK_H_
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -62,7 +62,7 @@
 | 
			
		|||
			int8_t  Y; /**< Current absolute joystick Y position, as a signed 8-bit integer */
 | 
			
		||||
			uint8_t Button; /**< Bit mask of the currently pressed joystick buttons */
 | 
			
		||||
		} USB_JoystickReport_Data_t;
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
	/* Macros: */
 | 
			
		||||
		/** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
 | 
			
		||||
		#define LEDMASK_USB_NOTREADY      LEDS_LED1
 | 
			
		||||
| 
						 | 
				
			
			@ -91,9 +91,10 @@
 | 
			
		|||
		                                         void* ReportData,
 | 
			
		||||
		                                         uint16_t* const ReportSize);
 | 
			
		||||
		void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo,
 | 
			
		||||
		                                          const uint8_t ReportID, 
 | 
			
		||||
		                                          const uint8_t ReportID,
 | 
			
		||||
		                                          const uint8_t ReportType,
 | 
			
		||||
		                                          const void* ReportData,
 | 
			
		||||
		                                          const uint16_t ReportSize);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,7 +3,7 @@
 | 
			
		|||
 *  This file contains special DoxyGen information for the generation of the main page and other special
 | 
			
		||||
 *  documentation pages. It is not a project source file.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
/** \mainpage Joystick Device Demo
 | 
			
		||||
 *
 | 
			
		||||
 *  \section SSec_Compat Demo Compatibility:
 | 
			
		||||
| 
						 | 
				
			
			@ -28,7 +28,7 @@
 | 
			
		|||
 *    <td><b>USB Class:</b></td>
 | 
			
		||||
 *    <td>Human Interface Device (HID)</td>
 | 
			
		||||
 *   </tr>
 | 
			
		||||
 *   <tr> 
 | 
			
		||||
 *   <tr>
 | 
			
		||||
 *    <td><b>USB Subclass:</b></td>
 | 
			
		||||
 *    <td>N/A</td>
 | 
			
		||||
 *   </tr>
 | 
			
		||||
| 
						 | 
				
			
			@ -44,19 +44,19 @@
 | 
			
		|||
 *   </tr>
 | 
			
		||||
 *  </table>
 | 
			
		||||
 *
 | 
			
		||||
 *  \section SSec_Description Project Description: 
 | 
			
		||||
 *  \section SSec_Description Project Description:
 | 
			
		||||
 *
 | 
			
		||||
 *  Joystick demonstration application. This gives a simple reference
 | 
			
		||||
 *  application for implementing a USB Keyboard device, for USB Joysticks
 | 
			
		||||
 *  using the standard Keyboard HID profile.
 | 
			
		||||
 *  
 | 
			
		||||
 *
 | 
			
		||||
 *  This device will show up as a generic joystick device, with two buttons.
 | 
			
		||||
 *  Pressing the joystick inwards is the first button, and the HWB button
 | 
			
		||||
 *  is the second.
 | 
			
		||||
 *  
 | 
			
		||||
 *
 | 
			
		||||
 *  Moving the joystick on the selected board moves the joystick location on
 | 
			
		||||
 *  the host computer.
 | 
			
		||||
 *  
 | 
			
		||||
 *
 | 
			
		||||
 *  Currently only single interface joysticks are supported.
 | 
			
		||||
 *
 | 
			
		||||
 *  \section SSec_Options Project Options
 | 
			
		||||
| 
						 | 
				
			
			@ -71,3 +71,4 @@
 | 
			
		|||
 *   </tr>
 | 
			
		||||
 *  </table>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,7 +47,7 @@
 | 
			
		|||
# make doxygen = Generate DoxyGen documentation for the project (must have
 | 
			
		||||
#                DoxyGen installed)
 | 
			
		||||
#
 | 
			
		||||
# make debug = Start either simulavr or avarice as specified for debugging, 
 | 
			
		||||
# make debug = Start either simulavr or avarice as specified for debugging,
 | 
			
		||||
#              with avr-gdb or avr-insight as the front end for debugging.
 | 
			
		||||
#
 | 
			
		||||
# make filename.s = Just compile filename.c into the assembler code only.
 | 
			
		||||
| 
						 | 
				
			
			@ -64,14 +64,14 @@ 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 
 | 
			
		||||
# LUFA board drivers). If USER is selected, put custom board drivers in a directory called
 | 
			
		||||
# "Board" inside the application directory.
 | 
			
		||||
BOARD = USBKEY
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Processor frequency.
 | 
			
		||||
#     This will define a symbol, F_CPU, in all source code files equal to the 
 | 
			
		||||
#     processor frequency in Hz. You can then use this symbol in your source code to 
 | 
			
		||||
#     This will define a symbol, F_CPU, in all source code files equal to the
 | 
			
		||||
#     processor frequency in Hz. You can then use this symbol in your source code to
 | 
			
		||||
#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
 | 
			
		||||
#     automatically to create a 32-bit value in your source code.
 | 
			
		||||
#
 | 
			
		||||
| 
						 | 
				
			
			@ -84,7 +84,7 @@ F_CPU = 8000000
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Input clock frequency.
 | 
			
		||||
#     This will define a symbol, F_CLOCK, in all source code files equal to the 
 | 
			
		||||
#     This will define a symbol, F_CLOCK, in all source code files equal to the
 | 
			
		||||
#     input clock frequency (before any prescaling is performed) in Hz. This value may
 | 
			
		||||
#     differ from F_CPU if prescaling is used on the latter, and is required as the
 | 
			
		||||
#     raw input clock is fed directly to the PLL sections of the AVR for high speed
 | 
			
		||||
| 
						 | 
				
			
			@ -135,7 +135,7 @@ SRC = $(TARGET).c                                                 \
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# List C++ source files here. (C dependencies are automatically generated.)
 | 
			
		||||
CPPSRC = 
 | 
			
		||||
CPPSRC =
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# List Assembler source files here.
 | 
			
		||||
| 
						 | 
				
			
			@ -148,7 +148,7 @@ CPPSRC =
 | 
			
		|||
ASRC =
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Optimization level, can be [0, 1, 2, 3, s]. 
 | 
			
		||||
# Optimization level, can be [0, 1, 2, 3, s].
 | 
			
		||||
#     0 = turn off optimization. s = optimize for size.
 | 
			
		||||
#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
 | 
			
		||||
OPT = s
 | 
			
		||||
| 
						 | 
				
			
			@ -262,7 +262,7 @@ CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
 | 
			
		|||
#             for use in COFF files, additional information about filenames
 | 
			
		||||
#             and function names needs to be present in the assembler source
 | 
			
		||||
#             files -- see avr-libc docs [FIXME: not yet described there]
 | 
			
		||||
#  -listing-cont-lines: Sets the maximum number of continuation lines of hex 
 | 
			
		||||
#  -listing-cont-lines: Sets the maximum number of continuation lines of hex
 | 
			
		||||
#       dump that will be displayed for a given single line of source input.
 | 
			
		||||
ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -275,7 +275,7 @@ PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
 | 
			
		|||
PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
 | 
			
		||||
 | 
			
		||||
# If this is left blank, then it will use the Standard printf version.
 | 
			
		||||
PRINTF_LIB = 
 | 
			
		||||
PRINTF_LIB =
 | 
			
		||||
#PRINTF_LIB = $(PRINTF_LIB_MIN)
 | 
			
		||||
#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -287,7 +287,7 @@ SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
 | 
			
		|||
SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
 | 
			
		||||
 | 
			
		||||
# If this is left blank, then it will use the Standard scanf version.
 | 
			
		||||
SCANF_LIB = 
 | 
			
		||||
SCANF_LIB =
 | 
			
		||||
#SCANF_LIB = $(SCANF_LIB_MIN)
 | 
			
		||||
#SCANF_LIB = $(SCANF_LIB_FLOAT)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -299,7 +299,7 @@ MATH_LIB = -lm
 | 
			
		|||
#     Each directory must be seperated by a space.
 | 
			
		||||
#     Use forward slashes for directory separators.
 | 
			
		||||
#     For a directory that has spaces, enclose it in quotes.
 | 
			
		||||
EXTRALIBDIRS = 
 | 
			
		||||
EXTRALIBDIRS =
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -322,7 +322,7 @@ EXTMEMOPTS =
 | 
			
		|||
#    -Map:      create map file
 | 
			
		||||
#    --cref:    add cross reference to  map file
 | 
			
		||||
LDFLAGS  = -Wl,-Map=$(TARGET).map,--cref
 | 
			
		||||
LDFLAGS += -Wl,--relax 
 | 
			
		||||
LDFLAGS += -Wl,--relax
 | 
			
		||||
LDFLAGS += -Wl,--gc-sections
 | 
			
		||||
LDFLAGS += $(EXTMEMOPTS)
 | 
			
		||||
LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))
 | 
			
		||||
| 
						 | 
				
			
			@ -356,7 +356,7 @@ AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
 | 
			
		|||
#AVRDUDE_NO_VERIFY = -V
 | 
			
		||||
 | 
			
		||||
# Increase verbosity level.  Please use this when submitting bug
 | 
			
		||||
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
 | 
			
		||||
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
 | 
			
		||||
# to submit bug reports.
 | 
			
		||||
#AVRDUDE_VERBOSE = -v -v
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -390,7 +390,7 @@ JTAG_DEV = /dev/com1
 | 
			
		|||
DEBUG_PORT = 4242
 | 
			
		||||
 | 
			
		||||
# Debugging host used to communicate between GDB / avarice / simulavr, normally
 | 
			
		||||
#     just set to localhost unless doing some sort of crazy debugging when 
 | 
			
		||||
#     just set to localhost unless doing some sort of crazy debugging when
 | 
			
		||||
#     avarice is running on a different computer.
 | 
			
		||||
DEBUG_HOST = localhost
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -419,7 +419,7 @@ WINSHELL = cmd
 | 
			
		|||
MSG_ERRORS_NONE = Errors: none
 | 
			
		||||
MSG_BEGIN = -------- begin --------
 | 
			
		||||
MSG_END = --------  end  --------
 | 
			
		||||
MSG_SIZE_BEFORE = Size before: 
 | 
			
		||||
MSG_SIZE_BEFORE = Size before:
 | 
			
		||||
MSG_SIZE_AFTER = Size after:
 | 
			
		||||
MSG_COFF = Converting to AVR COFF:
 | 
			
		||||
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
 | 
			
		||||
| 
						 | 
				
			
			@ -438,10 +438,10 @@ MSG_CREATING_LIBRARY = Creating library:
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Define all object files.
 | 
			
		||||
OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) 
 | 
			
		||||
OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o)
 | 
			
		||||
 | 
			
		||||
# Define all listing files.
 | 
			
		||||
LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) 
 | 
			
		||||
LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Compiler flags to generate dependency files.
 | 
			
		||||
| 
						 | 
				
			
			@ -506,11 +506,11 @@ sizeafter:
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Display compiler version information.
 | 
			
		||||
gccversion : 
 | 
			
		||||
gccversion :
 | 
			
		||||
	@$(CC) --version
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Program the device.  
 | 
			
		||||
# Program the device.
 | 
			
		||||
program: $(TARGET).hex $(TARGET).eep
 | 
			
		||||
	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -537,9 +537,9 @@ dfu-ee: $(TARGET).hex $(TARGET).eep
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Generate avr-gdb config/init file which does the following:
 | 
			
		||||
#     define the reset signal, load the target file, connect to target, and set 
 | 
			
		||||
#     define the reset signal, load the target file, connect to target, and set
 | 
			
		||||
#     a breakpoint at main().
 | 
			
		||||
gdb-config: 
 | 
			
		||||
gdb-config:
 | 
			
		||||
	@$(REMOVE) $(GDBINIT_FILE)
 | 
			
		||||
	@echo define reset >> $(GDBINIT_FILE)
 | 
			
		||||
	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
 | 
			
		||||
| 
						 | 
				
			
			@ -637,14 +637,14 @@ extcoff: $(TARGET).elf
 | 
			
		|||
$(OBJDIR)/%.o : %.c
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo $(MSG_COMPILING) $<
 | 
			
		||||
	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
 | 
			
		||||
	$(CC) -c $(ALL_CFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Compile: create object files from C++ source files.
 | 
			
		||||
$(OBJDIR)/%.o : %.cpp
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo $(MSG_COMPILING_CPP) $<
 | 
			
		||||
	$(CC) -c $(ALL_CPPFLAGS) $< -o $@ 
 | 
			
		||||
	$(CC) -c $(ALL_CPPFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Compile: create assembler files from C source files.
 | 
			
		||||
| 
						 | 
				
			
			@ -666,7 +666,7 @@ $(OBJDIR)/%.o : %.S
 | 
			
		|||
 | 
			
		||||
# Create preprocessed source for use in sending a bug report.
 | 
			
		||||
%.i : %.c
 | 
			
		||||
	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
 | 
			
		||||
	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Target: clean project.
 | 
			
		||||
| 
						 | 
				
			
			@ -710,3 +710,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null)
 | 
			
		|||
build elf hex eep lss sym coff extcoff doxygen clean          \
 | 
			
		||||
clean_list clean_doxygen program dfu flip flip-ee dfu-ee      \
 | 
			
		||||
debug gdb-config
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,21 +1,21 @@
 | 
			
		|||
/*
 | 
			
		||||
             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 
 | 
			
		||||
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -30,9 +30,9 @@
 | 
			
		|||
 | 
			
		||||
/** \file
 | 
			
		||||
 *
 | 
			
		||||
 *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special 
 | 
			
		||||
 *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special
 | 
			
		||||
 *  computer-readable structures which the host requests upon device enumeration, to determine
 | 
			
		||||
 *  the device's capabilities and functions.  
 | 
			
		||||
 *  the device's capabilities and functions.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "Descriptors.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -87,22 +87,22 @@ USB_Descriptor_HIDReport_Datatype_t PROGMEM KeyboardReport[] =
 | 
			
		|||
USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
 | 
			
		||||
{
 | 
			
		||||
	.Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.USBSpecification       = VERSION_BCD(01.10),
 | 
			
		||||
	.Class                  = 0x00,
 | 
			
		||||
	.SubClass               = 0x00,
 | 
			
		||||
	.Protocol               = 0x00,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
	.Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.VendorID               = 0x03EB,
 | 
			
		||||
	.ProductID              = 0x2042,
 | 
			
		||||
	.ReleaseNumber          = VERSION_BCD(00.01),
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.ManufacturerStrIndex   = 0x01,
 | 
			
		||||
	.ProductStrIndex        = 0x02,
 | 
			
		||||
	.SerialNumStrIndex      = NO_DESCRIPTOR,
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -113,49 +113,49 @@ USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
 | 
			
		|||
 */
 | 
			
		||||
USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		||||
{
 | 
			
		||||
	.Config = 
 | 
			
		||||
	.Config =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},
 | 
			
		||||
 | 
			
		||||
			.TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),
 | 
			
		||||
			.TotalInterfaces        = 1,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.ConfigurationNumber    = 1,
 | 
			
		||||
			.ConfigurationStrIndex  = NO_DESCRIPTOR,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.ConfigAttributes       = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)
 | 
			
		||||
		},
 | 
			
		||||
		
 | 
			
		||||
	.HID_Interface = 
 | 
			
		||||
 | 
			
		||||
	.HID_Interface =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 | 
			
		||||
 | 
			
		||||
			.InterfaceNumber        = 0x00,
 | 
			
		||||
			.AlternateSetting       = 0x00,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.TotalEndpoints         = 1,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.Class                  = 0x03,
 | 
			
		||||
			.SubClass               = 0x01,
 | 
			
		||||
			.Protocol               = HID_BOOTP_KeyboardBootProtocol,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.InterfaceStrIndex      = NO_DESCRIPTOR
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.HID_KeyboardHID = 
 | 
			
		||||
		{  
 | 
			
		||||
	.HID_KeyboardHID =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID},
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.HIDSpec                = VERSION_BCD(01.11),
 | 
			
		||||
			.CountryCode            = 0x00,
 | 
			
		||||
			.TotalReportDescriptors = 1,
 | 
			
		||||
			.HIDReportType          = HID_DTYPE_Report,
 | 
			
		||||
			.HIDReportLength        = sizeof(KeyboardReport)
 | 
			
		||||
		},
 | 
			
		||||
		
 | 
			
		||||
	.HID_ReportINEndpoint = 
 | 
			
		||||
 | 
			
		||||
	.HID_ReportINEndpoint =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -173,7 +173,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		|||
USB_Descriptor_String_t PROGMEM LanguageString =
 | 
			
		||||
{
 | 
			
		||||
	.Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.UnicodeString          = {LANGUAGE_ID_ENG}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -184,7 +184,7 @@ USB_Descriptor_String_t PROGMEM LanguageString =
 | 
			
		|||
USB_Descriptor_String_t PROGMEM ManufacturerString =
 | 
			
		||||
{
 | 
			
		||||
	.Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.UnicodeString          = L"Dean Camera"
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -195,7 +195,7 @@ USB_Descriptor_String_t PROGMEM ManufacturerString =
 | 
			
		|||
USB_Descriptor_String_t PROGMEM ProductString =
 | 
			
		||||
{
 | 
			
		||||
	.Header                 = {.Size = USB_STRING_LEN(18), .Type = DTYPE_String},
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.UnicodeString          = L"LUFA Keyboard Demo"
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -217,42 +217,43 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		|||
 | 
			
		||||
	switch (DescriptorType)
 | 
			
		||||
	{
 | 
			
		||||
		case DTYPE_Device: 
 | 
			
		||||
		case DTYPE_Device:
 | 
			
		||||
			Address = &DeviceDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Configuration: 
 | 
			
		||||
		case DTYPE_Configuration:
 | 
			
		||||
			Address = &ConfigurationDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_String: 
 | 
			
		||||
		case DTYPE_String:
 | 
			
		||||
			switch (DescriptorNumber)
 | 
			
		||||
			{
 | 
			
		||||
				case 0x00: 
 | 
			
		||||
				case 0x00:
 | 
			
		||||
					Address = &LanguageString;
 | 
			
		||||
					Size    = pgm_read_byte(&LanguageString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x01: 
 | 
			
		||||
				case 0x01:
 | 
			
		||||
					Address = &ManufacturerString;
 | 
			
		||||
					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x02: 
 | 
			
		||||
				case 0x02:
 | 
			
		||||
					Address = &ProductString;
 | 
			
		||||
					Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			break;
 | 
			
		||||
		case HID_DTYPE_HID: 
 | 
			
		||||
		case HID_DTYPE_HID:
 | 
			
		||||
			Address = &ConfigurationDescriptor.HID_KeyboardHID;
 | 
			
		||||
			Size    = sizeof(USB_HID_Descriptor_HID_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case HID_DTYPE_Report: 
 | 
			
		||||
		case HID_DTYPE_Report:
 | 
			
		||||
			Address = &KeyboardReport;
 | 
			
		||||
			Size    = sizeof(KeyboardReport);
 | 
			
		||||
			break;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	*DescriptorAddress = Address;
 | 
			
		||||
	return Size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,21 +1,21 @@
 | 
			
		|||
/*
 | 
			
		||||
             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 
 | 
			
		||||
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -54,12 +54,12 @@
 | 
			
		|||
			USB_HID_Descriptor_HID_t              HID_KeyboardHID;
 | 
			
		||||
	        USB_Descriptor_Endpoint_t             HID_ReportINEndpoint;
 | 
			
		||||
		} USB_Descriptor_Configuration_t;
 | 
			
		||||
					
 | 
			
		||||
 | 
			
		||||
	/* Macros: */
 | 
			
		||||
		/** Endpoint number of the Keyboard HID reporting IN endpoint. */
 | 
			
		||||
		#define KEYBOARD_EPNUM               1
 | 
			
		||||
		
 | 
			
		||||
		/** Size in bytes of the Keyboard HID reporting IN and OUT endpoints. */		
 | 
			
		||||
 | 
			
		||||
		/** Size in bytes of the Keyboard HID reporting IN and OUT endpoints. */
 | 
			
		||||
		#define KEYBOARD_EPSIZE              8
 | 
			
		||||
 | 
			
		||||
	/* Function Prototypes: */
 | 
			
		||||
| 
						 | 
				
			
			@ -69,3 +69,4 @@
 | 
			
		|||
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -67,7 +67,7 @@ int main(void)
 | 
			
		|||
 | 
			
		||||
	LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
 | 
			
		||||
	sei();
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	for (;;)
 | 
			
		||||
	{
 | 
			
		||||
		HID_Device_USBTask(&Keyboard_HID_Interface);
 | 
			
		||||
| 
						 | 
				
			
			@ -142,12 +142,12 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
 | 
			
		|||
                                         const uint8_t ReportType, void* ReportData, uint16_t* const ReportSize)
 | 
			
		||||
{
 | 
			
		||||
	USB_KeyboardReport_Data_t* KeyboardReport = (USB_KeyboardReport_Data_t*)ReportData;
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	uint8_t JoyStatus_LCL    = Joystick_GetStatus();
 | 
			
		||||
	uint8_t ButtonStatus_LCL = Buttons_GetStatus();
 | 
			
		||||
 | 
			
		||||
	uint8_t UsedKeyCodes = 0;
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	if (JoyStatus_LCL & JOY_UP)
 | 
			
		||||
	  KeyboardReport->KeyCode[UsedKeyCodes++] = 0x04; // A
 | 
			
		||||
	else if (JoyStatus_LCL & JOY_DOWN)
 | 
			
		||||
| 
						 | 
				
			
			@ -160,7 +160,7 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
 | 
			
		|||
 | 
			
		||||
	if (JoyStatus_LCL & JOY_PRESS)
 | 
			
		||||
	  KeyboardReport->KeyCode[UsedKeyCodes++] = 0x08; // E
 | 
			
		||||
	  
 | 
			
		||||
 | 
			
		||||
	if (ButtonStatus_LCL & BUTTONS_BUTTON1)
 | 
			
		||||
	  KeyboardReport->KeyCode[UsedKeyCodes++] = 0x09; // F
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -190,12 +190,13 @@ void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDI
 | 
			
		|||
 | 
			
		||||
	if (*LEDReport & HID_KEYBOARD_LED_NUMLOCK)
 | 
			
		||||
	  LEDMask |= LEDS_LED1;
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	if (*LEDReport & HID_KEYBOARD_LED_CAPSLOCK)
 | 
			
		||||
	  LEDMask |= LEDS_LED3;
 | 
			
		||||
 | 
			
		||||
	if (*LEDReport & HID_KEYBOARD_LED_SCROLLLOCK)
 | 
			
		||||
	  LEDMask |= LEDS_LED4;
 | 
			
		||||
	  
 | 
			
		||||
 | 
			
		||||
	LEDs_SetAllLEDs(LEDMask);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -52,7 +52,7 @@
 | 
			
		|||
		#include <LUFA/Drivers/Board/Buttons.h>
 | 
			
		||||
		#include <LUFA/Drivers/USB/USB.h>
 | 
			
		||||
		#include <LUFA/Drivers/USB/Class/HID.h>
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
	/* Macros: */
 | 
			
		||||
		/** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
 | 
			
		||||
		#define LEDMASK_USB_NOTREADY      LEDS_LED1
 | 
			
		||||
| 
						 | 
				
			
			@ -65,7 +65,7 @@
 | 
			
		|||
 | 
			
		||||
		/** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */
 | 
			
		||||
		#define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	/* Function Prototypes: */
 | 
			
		||||
		void SetupHardware(void);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -81,9 +81,10 @@
 | 
			
		|||
		                                         void* ReportData,
 | 
			
		||||
		                                         uint16_t* const ReportSize);
 | 
			
		||||
		void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo,
 | 
			
		||||
		                                          const uint8_t ReportID, 
 | 
			
		||||
		                                          const uint8_t ReportID,
 | 
			
		||||
		                                          const uint8_t ReportType,
 | 
			
		||||
		                                          const void* ReportData,
 | 
			
		||||
		                                          const uint16_t ReportSize);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,7 +3,7 @@
 | 
			
		|||
 *  This file contains special DoxyGen information for the generation of the main page and other special
 | 
			
		||||
 *  documentation pages. It is not a project source file.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
/** \mainpage Keyboard Device Demo
 | 
			
		||||
 *
 | 
			
		||||
 *  \section SSec_Compat Demo Compatibility:
 | 
			
		||||
| 
						 | 
				
			
			@ -28,7 +28,7 @@
 | 
			
		|||
 *    <td><b>USB Class:</b></td>
 | 
			
		||||
 *    <td>Human Interface Device (HID)</td>
 | 
			
		||||
 *   </tr>
 | 
			
		||||
 *   <tr> 
 | 
			
		||||
 *   <tr>
 | 
			
		||||
 *    <td><b>USB Subclass:</b></td>
 | 
			
		||||
 *    <td>Keyboard Subclass</td>
 | 
			
		||||
 *   </tr>
 | 
			
		||||
| 
						 | 
				
			
			@ -50,8 +50,8 @@
 | 
			
		|||
 *  for implementing a USB Keyboard using the basic USB HID drivers in all modern
 | 
			
		||||
 *  OSes (i.e. no special drivers required). It is boot protocol compatible, and thus
 | 
			
		||||
 *  works under compatible BIOS as if it was a native keyboard (e.g. PS/2).
 | 
			
		||||
 *  
 | 
			
		||||
 *  On start-up the system will automatically enumerate and function as a keyboard 
 | 
			
		||||
 *
 | 
			
		||||
 *  On start-up the system will automatically enumerate and function as a keyboard
 | 
			
		||||
 *  when the USB connection to a host is present. To use the keyboard example,
 | 
			
		||||
 *  manipulate the joystick to send the letters a, b, c, d and e. See the USB HID
 | 
			
		||||
 *  documentation for more information on sending keyboard event and key presses. Unlike
 | 
			
		||||
| 
						 | 
				
			
			@ -59,7 +59,7 @@
 | 
			
		|||
 *  inside the same report to the host.
 | 
			
		||||
 *
 | 
			
		||||
 *  \section SSec_Options Project Options
 | 
			
		||||
 *  
 | 
			
		||||
 *
 | 
			
		||||
 *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.
 | 
			
		||||
 *
 | 
			
		||||
 *  <table>
 | 
			
		||||
| 
						 | 
				
			
			@ -70,3 +70,4 @@
 | 
			
		|||
 *   </tr>
 | 
			
		||||
 *  </table>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,7 +47,7 @@
 | 
			
		|||
# make doxygen = Generate DoxyGen documentation for the project (must have
 | 
			
		||||
#                DoxyGen installed)
 | 
			
		||||
#
 | 
			
		||||
# make debug = Start either simulavr or avarice as specified for debugging, 
 | 
			
		||||
# make debug = Start either simulavr or avarice as specified for debugging,
 | 
			
		||||
#              with avr-gdb or avr-insight as the front end for debugging.
 | 
			
		||||
#
 | 
			
		||||
# make filename.s = Just compile filename.c into the assembler code only.
 | 
			
		||||
| 
						 | 
				
			
			@ -64,14 +64,14 @@ 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 
 | 
			
		||||
# LUFA board drivers). If USER is selected, put custom board drivers in a directory called
 | 
			
		||||
# "Board" inside the application directory.
 | 
			
		||||
BOARD = USBKEY
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Processor frequency.
 | 
			
		||||
#     This will define a symbol, F_CPU, in all source code files equal to the 
 | 
			
		||||
#     processor frequency in Hz. You can then use this symbol in your source code to 
 | 
			
		||||
#     This will define a symbol, F_CPU, in all source code files equal to the
 | 
			
		||||
#     processor frequency in Hz. You can then use this symbol in your source code to
 | 
			
		||||
#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
 | 
			
		||||
#     automatically to create a 32-bit value in your source code.
 | 
			
		||||
#
 | 
			
		||||
| 
						 | 
				
			
			@ -84,7 +84,7 @@ F_CPU = 8000000
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Input clock frequency.
 | 
			
		||||
#     This will define a symbol, F_CLOCK, in all source code files equal to the 
 | 
			
		||||
#     This will define a symbol, F_CLOCK, in all source code files equal to the
 | 
			
		||||
#     input clock frequency (before any prescaling is performed) in Hz. This value may
 | 
			
		||||
#     differ from F_CPU if prescaling is used on the latter, and is required as the
 | 
			
		||||
#     raw input clock is fed directly to the PLL sections of the AVR for high speed
 | 
			
		||||
| 
						 | 
				
			
			@ -135,7 +135,7 @@ SRC = $(TARGET).c                                                 \
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# List C++ source files here. (C dependencies are automatically generated.)
 | 
			
		||||
CPPSRC = 
 | 
			
		||||
CPPSRC =
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# List Assembler source files here.
 | 
			
		||||
| 
						 | 
				
			
			@ -148,7 +148,7 @@ CPPSRC =
 | 
			
		|||
ASRC =
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Optimization level, can be [0, 1, 2, 3, s]. 
 | 
			
		||||
# Optimization level, can be [0, 1, 2, 3, s].
 | 
			
		||||
#     0 = turn off optimization. s = optimize for size.
 | 
			
		||||
#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
 | 
			
		||||
OPT = s
 | 
			
		||||
| 
						 | 
				
			
			@ -262,7 +262,7 @@ CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
 | 
			
		|||
#             for use in COFF files, additional information about filenames
 | 
			
		||||
#             and function names needs to be present in the assembler source
 | 
			
		||||
#             files -- see avr-libc docs [FIXME: not yet described there]
 | 
			
		||||
#  -listing-cont-lines: Sets the maximum number of continuation lines of hex 
 | 
			
		||||
#  -listing-cont-lines: Sets the maximum number of continuation lines of hex
 | 
			
		||||
#       dump that will be displayed for a given single line of source input.
 | 
			
		||||
ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -275,7 +275,7 @@ PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
 | 
			
		|||
PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
 | 
			
		||||
 | 
			
		||||
# If this is left blank, then it will use the Standard printf version.
 | 
			
		||||
PRINTF_LIB = 
 | 
			
		||||
PRINTF_LIB =
 | 
			
		||||
#PRINTF_LIB = $(PRINTF_LIB_MIN)
 | 
			
		||||
#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -287,7 +287,7 @@ SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
 | 
			
		|||
SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
 | 
			
		||||
 | 
			
		||||
# If this is left blank, then it will use the Standard scanf version.
 | 
			
		||||
SCANF_LIB = 
 | 
			
		||||
SCANF_LIB =
 | 
			
		||||
#SCANF_LIB = $(SCANF_LIB_MIN)
 | 
			
		||||
#SCANF_LIB = $(SCANF_LIB_FLOAT)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -299,7 +299,7 @@ MATH_LIB = -lm
 | 
			
		|||
#     Each directory must be seperated by a space.
 | 
			
		||||
#     Use forward slashes for directory separators.
 | 
			
		||||
#     For a directory that has spaces, enclose it in quotes.
 | 
			
		||||
EXTRALIBDIRS = 
 | 
			
		||||
EXTRALIBDIRS =
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -322,7 +322,7 @@ EXTMEMOPTS =
 | 
			
		|||
#    -Map:      create map file
 | 
			
		||||
#    --cref:    add cross reference to  map file
 | 
			
		||||
LDFLAGS  = -Wl,-Map=$(TARGET).map,--cref
 | 
			
		||||
LDFLAGS += -Wl,--relax 
 | 
			
		||||
LDFLAGS += -Wl,--relax
 | 
			
		||||
LDFLAGS += -Wl,--gc-sections
 | 
			
		||||
LDFLAGS += $(EXTMEMOPTS)
 | 
			
		||||
LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))
 | 
			
		||||
| 
						 | 
				
			
			@ -356,7 +356,7 @@ AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
 | 
			
		|||
#AVRDUDE_NO_VERIFY = -V
 | 
			
		||||
 | 
			
		||||
# Increase verbosity level.  Please use this when submitting bug
 | 
			
		||||
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
 | 
			
		||||
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
 | 
			
		||||
# to submit bug reports.
 | 
			
		||||
#AVRDUDE_VERBOSE = -v -v
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -390,7 +390,7 @@ JTAG_DEV = /dev/com1
 | 
			
		|||
DEBUG_PORT = 4242
 | 
			
		||||
 | 
			
		||||
# Debugging host used to communicate between GDB / avarice / simulavr, normally
 | 
			
		||||
#     just set to localhost unless doing some sort of crazy debugging when 
 | 
			
		||||
#     just set to localhost unless doing some sort of crazy debugging when
 | 
			
		||||
#     avarice is running on a different computer.
 | 
			
		||||
DEBUG_HOST = localhost
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -419,7 +419,7 @@ WINSHELL = cmd
 | 
			
		|||
MSG_ERRORS_NONE = Errors: none
 | 
			
		||||
MSG_BEGIN = -------- begin --------
 | 
			
		||||
MSG_END = --------  end  --------
 | 
			
		||||
MSG_SIZE_BEFORE = Size before: 
 | 
			
		||||
MSG_SIZE_BEFORE = Size before:
 | 
			
		||||
MSG_SIZE_AFTER = Size after:
 | 
			
		||||
MSG_COFF = Converting to AVR COFF:
 | 
			
		||||
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
 | 
			
		||||
| 
						 | 
				
			
			@ -438,10 +438,10 @@ MSG_CREATING_LIBRARY = Creating library:
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Define all object files.
 | 
			
		||||
OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) 
 | 
			
		||||
OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o)
 | 
			
		||||
 | 
			
		||||
# Define all listing files.
 | 
			
		||||
LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) 
 | 
			
		||||
LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Compiler flags to generate dependency files.
 | 
			
		||||
| 
						 | 
				
			
			@ -506,11 +506,11 @@ sizeafter:
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Display compiler version information.
 | 
			
		||||
gccversion : 
 | 
			
		||||
gccversion :
 | 
			
		||||
	@$(CC) --version
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Program the device.  
 | 
			
		||||
# Program the device.
 | 
			
		||||
program: $(TARGET).hex $(TARGET).eep
 | 
			
		||||
	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -537,9 +537,9 @@ dfu-ee: $(TARGET).hex $(TARGET).eep
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Generate avr-gdb config/init file which does the following:
 | 
			
		||||
#     define the reset signal, load the target file, connect to target, and set 
 | 
			
		||||
#     define the reset signal, load the target file, connect to target, and set
 | 
			
		||||
#     a breakpoint at main().
 | 
			
		||||
gdb-config: 
 | 
			
		||||
gdb-config:
 | 
			
		||||
	@$(REMOVE) $(GDBINIT_FILE)
 | 
			
		||||
	@echo define reset >> $(GDBINIT_FILE)
 | 
			
		||||
	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
 | 
			
		||||
| 
						 | 
				
			
			@ -637,14 +637,14 @@ extcoff: $(TARGET).elf
 | 
			
		|||
$(OBJDIR)/%.o : %.c
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo $(MSG_COMPILING) $<
 | 
			
		||||
	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
 | 
			
		||||
	$(CC) -c $(ALL_CFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Compile: create object files from C++ source files.
 | 
			
		||||
$(OBJDIR)/%.o : %.cpp
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo $(MSG_COMPILING_CPP) $<
 | 
			
		||||
	$(CC) -c $(ALL_CPPFLAGS) $< -o $@ 
 | 
			
		||||
	$(CC) -c $(ALL_CPPFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Compile: create assembler files from C source files.
 | 
			
		||||
| 
						 | 
				
			
			@ -666,7 +666,7 @@ $(OBJDIR)/%.o : %.S
 | 
			
		|||
 | 
			
		||||
# Create preprocessed source for use in sending a bug report.
 | 
			
		||||
%.i : %.c
 | 
			
		||||
	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
 | 
			
		||||
	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Target: clean project.
 | 
			
		||||
| 
						 | 
				
			
			@ -710,3 +710,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null)
 | 
			
		|||
build elf hex eep lss sym coff extcoff doxygen clean          \
 | 
			
		||||
clean_list clean_doxygen program dfu flip flip-ee dfu-ee      \
 | 
			
		||||
debug gdb-config
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,21 +1,21 @@
 | 
			
		|||
/*
 | 
			
		||||
             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 
 | 
			
		||||
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -30,9 +30,9 @@
 | 
			
		|||
 | 
			
		||||
/** \file
 | 
			
		||||
 *
 | 
			
		||||
 *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special 
 | 
			
		||||
 *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special
 | 
			
		||||
 *  computer-readable structures which the host requests upon device enumeration, to determine
 | 
			
		||||
 *  the device's capabilities and functions.  
 | 
			
		||||
 *  the device's capabilities and functions.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "Descriptors.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -120,22 +120,22 @@ USB_Descriptor_HIDReport_Datatype_t PROGMEM KeyboardReport[] =
 | 
			
		|||
USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
 | 
			
		||||
{
 | 
			
		||||
	.Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.USBSpecification       = VERSION_BCD(01.10),
 | 
			
		||||
	.Class                  = 0x00,
 | 
			
		||||
	.SubClass               = 0x00,
 | 
			
		||||
	.Protocol               = 0x00,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
	.Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.VendorID               = 0x03EB,
 | 
			
		||||
	.ProductID              = 0x204D,
 | 
			
		||||
	.ReleaseNumber          = VERSION_BCD(00.01),
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.ManufacturerStrIndex   = 0x01,
 | 
			
		||||
	.ProductStrIndex        = 0x02,
 | 
			
		||||
	.SerialNumStrIndex      = NO_DESCRIPTOR,
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -146,49 +146,49 @@ USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
 | 
			
		|||
 */
 | 
			
		||||
USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		||||
{
 | 
			
		||||
	.Config = 
 | 
			
		||||
	.Config =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},
 | 
			
		||||
 | 
			
		||||
			.TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),
 | 
			
		||||
			.TotalInterfaces        = 2,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.ConfigurationNumber    = 1,
 | 
			
		||||
			.ConfigurationStrIndex  = NO_DESCRIPTOR,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.ConfigAttributes       = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)
 | 
			
		||||
		},
 | 
			
		||||
		
 | 
			
		||||
	.HID1_KeyboardInterface = 
 | 
			
		||||
 | 
			
		||||
	.HID1_KeyboardInterface =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 | 
			
		||||
 | 
			
		||||
			.InterfaceNumber        = 0x00,
 | 
			
		||||
			.AlternateSetting       = 0x00,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.TotalEndpoints         = 1,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.Class                  = 0x03,
 | 
			
		||||
			.SubClass               = 0x01,
 | 
			
		||||
			.Protocol               = HID_BOOTP_KeyboardBootProtocol,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.InterfaceStrIndex      = NO_DESCRIPTOR
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.HID1_KeyboardHID = 
 | 
			
		||||
		{  
 | 
			
		||||
	.HID1_KeyboardHID =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID},
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.HIDSpec                = VERSION_BCD(01.11),
 | 
			
		||||
			.CountryCode            = 0x00,
 | 
			
		||||
			.TotalReportDescriptors = 1,
 | 
			
		||||
			.HIDReportType          = HID_DTYPE_Report,
 | 
			
		||||
			.HIDReportLength        = sizeof(KeyboardReport)
 | 
			
		||||
		},
 | 
			
		||||
		
 | 
			
		||||
	.HID1_ReportINEndpoint = 
 | 
			
		||||
 | 
			
		||||
	.HID1_ReportINEndpoint =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -198,34 +198,34 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		|||
			.PollingIntervalMS      = 0x0A
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.HID2_MouseInterface = 
 | 
			
		||||
	.HID2_MouseInterface =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 | 
			
		||||
 | 
			
		||||
			.InterfaceNumber        = 0x01,
 | 
			
		||||
			.AlternateSetting       = 0x00,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.TotalEndpoints         = 1,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.Class                  = 0x03,
 | 
			
		||||
			.SubClass               = 0x01,
 | 
			
		||||
			.Protocol               = HID_BOOTP_MouseBootProtocol,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.InterfaceStrIndex      = NO_DESCRIPTOR
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.HID2_MouseHID = 
 | 
			
		||||
		{  
 | 
			
		||||
	.HID2_MouseHID =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID},
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.HIDSpec                = VERSION_BCD(01.11),
 | 
			
		||||
			.CountryCode            = 0x00,
 | 
			
		||||
			.TotalReportDescriptors = 1,
 | 
			
		||||
			.HIDReportType          = HID_DTYPE_Report,
 | 
			
		||||
			.HIDReportLength        = sizeof(MouseReport)
 | 
			
		||||
		},
 | 
			
		||||
		
 | 
			
		||||
	.HID2_ReportINEndpoint = 
 | 
			
		||||
 | 
			
		||||
	.HID2_ReportINEndpoint =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -243,7 +243,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		|||
USB_Descriptor_String_t PROGMEM LanguageString =
 | 
			
		||||
{
 | 
			
		||||
	.Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.UnicodeString          = {LANGUAGE_ID_ENG}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -254,7 +254,7 @@ USB_Descriptor_String_t PROGMEM LanguageString =
 | 
			
		|||
USB_Descriptor_String_t PROGMEM ManufacturerString =
 | 
			
		||||
{
 | 
			
		||||
	.Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.UnicodeString          = L"Dean Camera"
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -265,7 +265,7 @@ USB_Descriptor_String_t PROGMEM ManufacturerString =
 | 
			
		|||
USB_Descriptor_String_t PROGMEM ProductString =
 | 
			
		||||
{
 | 
			
		||||
	.Header                 = {.Size = USB_STRING_LEN(28), .Type = DTYPE_String},
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.UnicodeString          = L"LUFA Mouse and Keyboard Demo"
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -287,33 +287,33 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		|||
 | 
			
		||||
	switch (DescriptorType)
 | 
			
		||||
	{
 | 
			
		||||
		case DTYPE_Device: 
 | 
			
		||||
		case DTYPE_Device:
 | 
			
		||||
			Address = &DeviceDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Configuration: 
 | 
			
		||||
		case DTYPE_Configuration:
 | 
			
		||||
			Address = &ConfigurationDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_String: 
 | 
			
		||||
		case DTYPE_String:
 | 
			
		||||
			switch (DescriptorNumber)
 | 
			
		||||
			{
 | 
			
		||||
				case 0x00: 
 | 
			
		||||
				case 0x00:
 | 
			
		||||
					Address = &LanguageString;
 | 
			
		||||
					Size    = pgm_read_byte(&LanguageString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x01: 
 | 
			
		||||
				case 0x01:
 | 
			
		||||
					Address = &ManufacturerString;
 | 
			
		||||
					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x02: 
 | 
			
		||||
				case 0x02:
 | 
			
		||||
					Address = &ProductString;
 | 
			
		||||
					Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			break;
 | 
			
		||||
		case HID_DTYPE_HID: 
 | 
			
		||||
		case HID_DTYPE_HID:
 | 
			
		||||
			if (!(wIndex))
 | 
			
		||||
			{
 | 
			
		||||
				Address = &ConfigurationDescriptor.HID1_KeyboardHID;
 | 
			
		||||
| 
						 | 
				
			
			@ -322,24 +322,25 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		|||
			else
 | 
			
		||||
			{
 | 
			
		||||
				Address = &ConfigurationDescriptor.HID2_MouseHID;
 | 
			
		||||
				Size    = sizeof(USB_HID_Descriptor_HID_t);			
 | 
			
		||||
				Size    = sizeof(USB_HID_Descriptor_HID_t);
 | 
			
		||||
			}
 | 
			
		||||
			break;
 | 
			
		||||
		case HID_DTYPE_Report: 
 | 
			
		||||
		case HID_DTYPE_Report:
 | 
			
		||||
			if (!(wIndex))
 | 
			
		||||
			{
 | 
			
		||||
				Address = &KeyboardReport;
 | 
			
		||||
				Size    = sizeof(KeyboardReport);
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
			{			
 | 
			
		||||
			{
 | 
			
		||||
				Address = &MouseReport;
 | 
			
		||||
				Size    = sizeof(MouseReport);
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			break;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	*DescriptorAddress = Address;
 | 
			
		||||
	return Size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,21 +1,21 @@
 | 
			
		|||
/*
 | 
			
		||||
             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 
 | 
			
		||||
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -32,7 +32,7 @@
 | 
			
		|||
 *
 | 
			
		||||
 *  Header file for Descriptors.c.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
#ifndef _DESCRIPTORS_H_
 | 
			
		||||
#define _DESCRIPTORS_H_
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -57,7 +57,7 @@
 | 
			
		|||
			USB_HID_Descriptor_HID_t              HID2_MouseHID;
 | 
			
		||||
	        USB_Descriptor_Endpoint_t             HID2_ReportINEndpoint;
 | 
			
		||||
		} USB_Descriptor_Configuration_t;
 | 
			
		||||
					
 | 
			
		||||
 | 
			
		||||
	/* Macros: */
 | 
			
		||||
		/** Endpoint number of the Keyboard HID reporting IN endpoint. */
 | 
			
		||||
		#define KEYBOARD_IN_EPNUM         1
 | 
			
		||||
| 
						 | 
				
			
			@ -75,3 +75,4 @@
 | 
			
		|||
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,21 +1,21 @@
 | 
			
		|||
/*
 | 
			
		||||
             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 
 | 
			
		||||
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -61,7 +61,7 @@ USB_ClassInfo_HID_Device_t Keyboard_HID_Interface =
 | 
			
		|||
				.PrevReportINBufferSize       = sizeof(PrevKeyboardHIDReportBuffer),
 | 
			
		||||
			},
 | 
			
		||||
	};
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
/** LUFA HID Class driver interface configuration and state information. This structure is
 | 
			
		||||
 *  passed to all HID Class driver functions, so that multiple instances of the same class
 | 
			
		||||
 *  within a device can be differentiated from one another. This is for the mouse HID
 | 
			
		||||
| 
						 | 
				
			
			@ -78,7 +78,7 @@ USB_ClassInfo_HID_Device_t Mouse_HID_Interface =
 | 
			
		|||
 | 
			
		||||
				.PrevReportINBuffer           = PrevMouseHIDReportBuffer,
 | 
			
		||||
				.PrevReportINBufferSize       = sizeof(PrevMouseHIDReportBuffer),
 | 
			
		||||
			},		
 | 
			
		||||
			},
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
/** Main program entry point. This routine contains the overall program flow, including initial
 | 
			
		||||
| 
						 | 
				
			
			@ -177,11 +177,11 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
 | 
			
		|||
	if (HIDInterfaceInfo == &Keyboard_HID_Interface)
 | 
			
		||||
	{
 | 
			
		||||
		USB_KeyboardReport_Data_t* KeyboardReport = (USB_KeyboardReport_Data_t*)ReportData;
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/* If first board button not being held down, no keyboard report */
 | 
			
		||||
		if (!(ButtonStatus_LCL & BUTTONS_BUTTON1))
 | 
			
		||||
		  return 0;
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		KeyboardReport->Modifier = HID_KEYBOARD_MODIFER_LEFTSHIFT;
 | 
			
		||||
 | 
			
		||||
		if (JoyStatus_LCL & JOY_UP)
 | 
			
		||||
| 
						 | 
				
			
			@ -196,7 +196,7 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
 | 
			
		|||
 | 
			
		||||
		if (JoyStatus_LCL & JOY_PRESS)
 | 
			
		||||
		  KeyboardReport->KeyCode[0] = 0x08; // E
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		*ReportSize = sizeof(USB_KeyboardReport_Data_t);
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -207,7 +207,7 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
 | 
			
		|||
		/* If first board button being held down, no mouse report */
 | 
			
		||||
		if (ButtonStatus_LCL & BUTTONS_BUTTON1)
 | 
			
		||||
		  return 0;
 | 
			
		||||
		  
 | 
			
		||||
 | 
			
		||||
		if (JoyStatus_LCL & JOY_UP)
 | 
			
		||||
		  MouseReport->Y = -1;
 | 
			
		||||
		else if (JoyStatus_LCL & JOY_DOWN)
 | 
			
		||||
| 
						 | 
				
			
			@ -220,9 +220,9 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
 | 
			
		|||
 | 
			
		||||
		if (JoyStatus_LCL & JOY_PRESS)
 | 
			
		||||
		  MouseReport->Button |= (1 << 0);
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		*ReportSize = sizeof(USB_MouseReport_Data_t);
 | 
			
		||||
		return true;		
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -247,13 +247,13 @@ void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDI
 | 
			
		|||
 | 
			
		||||
		if (*LEDReport & HID_KEYBOARD_LED_NUMLOCK)
 | 
			
		||||
		  LEDMask |= LEDS_LED1;
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		if (*LEDReport & HID_KEYBOARD_LED_CAPSLOCK)
 | 
			
		||||
		  LEDMask |= LEDS_LED3;
 | 
			
		||||
 | 
			
		||||
		if (*LEDReport & HID_KEYBOARD_LED_SCROLLLOCK)
 | 
			
		||||
		  LEDMask |= LEDS_LED4;
 | 
			
		||||
		  
 | 
			
		||||
 | 
			
		||||
		LEDs_SetAllLEDs(LEDMask);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,21 +1,21 @@
 | 
			
		|||
/*
 | 
			
		||||
             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 
 | 
			
		||||
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -60,7 +60,7 @@
 | 
			
		|||
 | 
			
		||||
		/** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */
 | 
			
		||||
		#define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
	/* Function Prototypes: */
 | 
			
		||||
		void SetupHardware(void);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -76,9 +76,10 @@
 | 
			
		|||
		                                         void* ReportData,
 | 
			
		||||
		                                         uint16_t* const ReportSize);
 | 
			
		||||
		void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo,
 | 
			
		||||
		                                          const uint8_t ReportID, 
 | 
			
		||||
		                                          const uint8_t ReportID,
 | 
			
		||||
		                                          const uint8_t ReportType,
 | 
			
		||||
		                                          const void* ReportData,
 | 
			
		||||
		                                          const uint16_t ReportSize);
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,7 +3,7 @@
 | 
			
		|||
 *  This file contains special DoxyGen information for the generation of the main page and other special
 | 
			
		||||
 *  documentation pages. It is not a project source file.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
/** \mainpage Dual HID Keyboard and Mouse Device Demo
 | 
			
		||||
 *
 | 
			
		||||
 *  \section SSec_Compat Demo Compatibility:
 | 
			
		||||
| 
						 | 
				
			
			@ -28,7 +28,7 @@
 | 
			
		|||
 *    <td><b>USB Class:</b></td>
 | 
			
		||||
 *    <td>Human Interface Device (HID)</td>
 | 
			
		||||
 *   </tr>
 | 
			
		||||
 *   <tr> 
 | 
			
		||||
 *   <tr>
 | 
			
		||||
 *    <td><b>USB Subclass:</b></td>
 | 
			
		||||
 *    <td>N/A</td>
 | 
			
		||||
 *   </tr>
 | 
			
		||||
| 
						 | 
				
			
			@ -44,7 +44,7 @@
 | 
			
		|||
 *   </tr>
 | 
			
		||||
 *  </table>
 | 
			
		||||
 *
 | 
			
		||||
 *  \section SSec_Description Project Description: 
 | 
			
		||||
 *  \section SSec_Description Project Description:
 | 
			
		||||
 *
 | 
			
		||||
 *  Keyboard/Mouse demonstration application. This gives a simple reference
 | 
			
		||||
 *  application for implementing a composite device containing both USB Keyboard
 | 
			
		||||
| 
						 | 
				
			
			@ -52,13 +52,13 @@
 | 
			
		|||
 *  (i.e. no special drivers required). This example uses two separate HID
 | 
			
		||||
 *  interfaces for each function. It is boot protocol compatible, and thus works under
 | 
			
		||||
 *  compatible BIOS as if it was a native keyboard and mouse (e.g. PS/2).
 | 
			
		||||
 *  
 | 
			
		||||
 *
 | 
			
		||||
 *  On start-up the system will automatically enumerate and function
 | 
			
		||||
 *  as a keyboard when the USB connection to a host is present and the HWB is not
 | 
			
		||||
 *  pressed. When enabled, manipulate the joystick to send the letters
 | 
			
		||||
 *  a, b, c, d and e. See the USB HID documentation for more information
 | 
			
		||||
 *  on sending keyboard event and key presses.
 | 
			
		||||
 *  
 | 
			
		||||
 *
 | 
			
		||||
 *  When the HWB is pressed, the mouse mode is enabled. When enabled, move the
 | 
			
		||||
 *  joystick to move the pointer, and push the joystick inwards to simulate a
 | 
			
		||||
 *  left-button click.
 | 
			
		||||
| 
						 | 
				
			
			@ -75,3 +75,4 @@
 | 
			
		|||
 *   </tr>
 | 
			
		||||
 *  </table>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,7 +47,7 @@
 | 
			
		|||
# make doxygen = Generate DoxyGen documentation for the project (must have
 | 
			
		||||
#                DoxyGen installed)
 | 
			
		||||
#
 | 
			
		||||
# make debug = Start either simulavr or avarice as specified for debugging, 
 | 
			
		||||
# make debug = Start either simulavr or avarice as specified for debugging,
 | 
			
		||||
#              with avr-gdb or avr-insight as the front end for debugging.
 | 
			
		||||
#
 | 
			
		||||
# make filename.s = Just compile filename.c into the assembler code only.
 | 
			
		||||
| 
						 | 
				
			
			@ -64,14 +64,14 @@ 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 
 | 
			
		||||
# LUFA board drivers). If USER is selected, put custom board drivers in a directory called
 | 
			
		||||
# "Board" inside the application directory.
 | 
			
		||||
BOARD = USBKEY
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Processor frequency.
 | 
			
		||||
#     This will define a symbol, F_CPU, in all source code files equal to the 
 | 
			
		||||
#     processor frequency in Hz. You can then use this symbol in your source code to 
 | 
			
		||||
#     This will define a symbol, F_CPU, in all source code files equal to the
 | 
			
		||||
#     processor frequency in Hz. You can then use this symbol in your source code to
 | 
			
		||||
#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
 | 
			
		||||
#     automatically to create a 32-bit value in your source code.
 | 
			
		||||
#
 | 
			
		||||
| 
						 | 
				
			
			@ -84,7 +84,7 @@ F_CPU = 8000000
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Input clock frequency.
 | 
			
		||||
#     This will define a symbol, F_CLOCK, in all source code files equal to the 
 | 
			
		||||
#     This will define a symbol, F_CLOCK, in all source code files equal to the
 | 
			
		||||
#     input clock frequency (before any prescaling is performed) in Hz. This value may
 | 
			
		||||
#     differ from F_CPU if prescaling is used on the latter, and is required as the
 | 
			
		||||
#     raw input clock is fed directly to the PLL sections of the AVR for high speed
 | 
			
		||||
| 
						 | 
				
			
			@ -135,7 +135,7 @@ SRC = $(TARGET).c                                                 \
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# List C++ source files here. (C dependencies are automatically generated.)
 | 
			
		||||
CPPSRC = 
 | 
			
		||||
CPPSRC =
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# List Assembler source files here.
 | 
			
		||||
| 
						 | 
				
			
			@ -148,7 +148,7 @@ CPPSRC =
 | 
			
		|||
ASRC =
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Optimization level, can be [0, 1, 2, 3, s]. 
 | 
			
		||||
# Optimization level, can be [0, 1, 2, 3, s].
 | 
			
		||||
#     0 = turn off optimization. s = optimize for size.
 | 
			
		||||
#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
 | 
			
		||||
OPT = s
 | 
			
		||||
| 
						 | 
				
			
			@ -262,7 +262,7 @@ CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
 | 
			
		|||
#             for use in COFF files, additional information about filenames
 | 
			
		||||
#             and function names needs to be present in the assembler source
 | 
			
		||||
#             files -- see avr-libc docs [FIXME: not yet described there]
 | 
			
		||||
#  -listing-cont-lines: Sets the maximum number of continuation lines of hex 
 | 
			
		||||
#  -listing-cont-lines: Sets the maximum number of continuation lines of hex
 | 
			
		||||
#       dump that will be displayed for a given single line of source input.
 | 
			
		||||
ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -275,7 +275,7 @@ PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
 | 
			
		|||
PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
 | 
			
		||||
 | 
			
		||||
# If this is left blank, then it will use the Standard printf version.
 | 
			
		||||
PRINTF_LIB = 
 | 
			
		||||
PRINTF_LIB =
 | 
			
		||||
#PRINTF_LIB = $(PRINTF_LIB_MIN)
 | 
			
		||||
#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -287,7 +287,7 @@ SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
 | 
			
		|||
SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
 | 
			
		||||
 | 
			
		||||
# If this is left blank, then it will use the Standard scanf version.
 | 
			
		||||
SCANF_LIB = 
 | 
			
		||||
SCANF_LIB =
 | 
			
		||||
#SCANF_LIB = $(SCANF_LIB_MIN)
 | 
			
		||||
#SCANF_LIB = $(SCANF_LIB_FLOAT)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -299,7 +299,7 @@ MATH_LIB = -lm
 | 
			
		|||
#     Each directory must be seperated by a space.
 | 
			
		||||
#     Use forward slashes for directory separators.
 | 
			
		||||
#     For a directory that has spaces, enclose it in quotes.
 | 
			
		||||
EXTRALIBDIRS = 
 | 
			
		||||
EXTRALIBDIRS =
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -322,7 +322,7 @@ EXTMEMOPTS =
 | 
			
		|||
#    -Map:      create map file
 | 
			
		||||
#    --cref:    add cross reference to  map file
 | 
			
		||||
LDFLAGS  = -Wl,-Map=$(TARGET).map,--cref
 | 
			
		||||
LDFLAGS += -Wl,--relax 
 | 
			
		||||
LDFLAGS += -Wl,--relax
 | 
			
		||||
LDFLAGS += -Wl,--gc-sections
 | 
			
		||||
LDFLAGS += $(EXTMEMOPTS)
 | 
			
		||||
LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))
 | 
			
		||||
| 
						 | 
				
			
			@ -356,7 +356,7 @@ AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
 | 
			
		|||
#AVRDUDE_NO_VERIFY = -V
 | 
			
		||||
 | 
			
		||||
# Increase verbosity level.  Please use this when submitting bug
 | 
			
		||||
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
 | 
			
		||||
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
 | 
			
		||||
# to submit bug reports.
 | 
			
		||||
#AVRDUDE_VERBOSE = -v -v
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -390,7 +390,7 @@ JTAG_DEV = /dev/com1
 | 
			
		|||
DEBUG_PORT = 4242
 | 
			
		||||
 | 
			
		||||
# Debugging host used to communicate between GDB / avarice / simulavr, normally
 | 
			
		||||
#     just set to localhost unless doing some sort of crazy debugging when 
 | 
			
		||||
#     just set to localhost unless doing some sort of crazy debugging when
 | 
			
		||||
#     avarice is running on a different computer.
 | 
			
		||||
DEBUG_HOST = localhost
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -419,7 +419,7 @@ WINSHELL = cmd
 | 
			
		|||
MSG_ERRORS_NONE = Errors: none
 | 
			
		||||
MSG_BEGIN = -------- begin --------
 | 
			
		||||
MSG_END = --------  end  --------
 | 
			
		||||
MSG_SIZE_BEFORE = Size before: 
 | 
			
		||||
MSG_SIZE_BEFORE = Size before:
 | 
			
		||||
MSG_SIZE_AFTER = Size after:
 | 
			
		||||
MSG_COFF = Converting to AVR COFF:
 | 
			
		||||
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
 | 
			
		||||
| 
						 | 
				
			
			@ -438,10 +438,10 @@ MSG_CREATING_LIBRARY = Creating library:
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Define all object files.
 | 
			
		||||
OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) 
 | 
			
		||||
OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o)
 | 
			
		||||
 | 
			
		||||
# Define all listing files.
 | 
			
		||||
LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) 
 | 
			
		||||
LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Compiler flags to generate dependency files.
 | 
			
		||||
| 
						 | 
				
			
			@ -506,11 +506,11 @@ sizeafter:
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Display compiler version information.
 | 
			
		||||
gccversion : 
 | 
			
		||||
gccversion :
 | 
			
		||||
	@$(CC) --version
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Program the device.  
 | 
			
		||||
# Program the device.
 | 
			
		||||
program: $(TARGET).hex $(TARGET).eep
 | 
			
		||||
	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -537,9 +537,9 @@ dfu-ee: $(TARGET).hex $(TARGET).eep
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Generate avr-gdb config/init file which does the following:
 | 
			
		||||
#     define the reset signal, load the target file, connect to target, and set 
 | 
			
		||||
#     define the reset signal, load the target file, connect to target, and set
 | 
			
		||||
#     a breakpoint at main().
 | 
			
		||||
gdb-config: 
 | 
			
		||||
gdb-config:
 | 
			
		||||
	@$(REMOVE) $(GDBINIT_FILE)
 | 
			
		||||
	@echo define reset >> $(GDBINIT_FILE)
 | 
			
		||||
	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
 | 
			
		||||
| 
						 | 
				
			
			@ -637,14 +637,14 @@ extcoff: $(TARGET).elf
 | 
			
		|||
$(OBJDIR)/%.o : %.c
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo $(MSG_COMPILING) $<
 | 
			
		||||
	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
 | 
			
		||||
	$(CC) -c $(ALL_CFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Compile: create object files from C++ source files.
 | 
			
		||||
$(OBJDIR)/%.o : %.cpp
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo $(MSG_COMPILING_CPP) $<
 | 
			
		||||
	$(CC) -c $(ALL_CPPFLAGS) $< -o $@ 
 | 
			
		||||
	$(CC) -c $(ALL_CPPFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Compile: create assembler files from C source files.
 | 
			
		||||
| 
						 | 
				
			
			@ -666,7 +666,7 @@ $(OBJDIR)/%.o : %.S
 | 
			
		|||
 | 
			
		||||
# Create preprocessed source for use in sending a bug report.
 | 
			
		||||
%.i : %.c
 | 
			
		||||
	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
 | 
			
		||||
	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Target: clean project.
 | 
			
		||||
| 
						 | 
				
			
			@ -710,3 +710,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null)
 | 
			
		|||
build elf hex eep lss sym coff extcoff doxygen clean          \
 | 
			
		||||
clean_list clean_doxygen program dfu flip flip-ee dfu-ee      \
 | 
			
		||||
debug gdb-config
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -30,11 +30,11 @@
 | 
			
		|||
 | 
			
		||||
/** \file
 | 
			
		||||
 *
 | 
			
		||||
 *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special 
 | 
			
		||||
 *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special
 | 
			
		||||
 *  computer-readable structures which the host requests upon device enumeration, to determine
 | 
			
		||||
 *  the device's capabilities and functions.  
 | 
			
		||||
 *  the device's capabilities and functions.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
#include "Descriptors.h"
 | 
			
		||||
 | 
			
		||||
/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall
 | 
			
		||||
| 
						 | 
				
			
			@ -45,22 +45,22 @@
 | 
			
		|||
USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
 | 
			
		||||
{
 | 
			
		||||
	.Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.USBSpecification       = VERSION_BCD(01.10),
 | 
			
		||||
	.Class                  = 0x00,
 | 
			
		||||
	.SubClass               = 0x00,
 | 
			
		||||
	.Protocol               = 0x00,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
	.Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.VendorID               = 0x03EB,
 | 
			
		||||
	.ProductID              = 0x2048,
 | 
			
		||||
	.ReleaseNumber          = VERSION_BCD(00.01),
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.ManufacturerStrIndex   = 0x01,
 | 
			
		||||
	.ProductStrIndex        = 0x02,
 | 
			
		||||
	.SerialNumStrIndex      = NO_DESCRIPTOR,
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -71,7 +71,7 @@ USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
 | 
			
		|||
 */
 | 
			
		||||
USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		||||
{
 | 
			
		||||
	.Config = 
 | 
			
		||||
	.Config =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                   = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -80,122 +80,122 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		|||
 | 
			
		||||
			.ConfigurationNumber      = 1,
 | 
			
		||||
			.ConfigurationStrIndex    = NO_DESCRIPTOR,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.ConfigAttributes         = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.MaxPowerConsumption      = USB_CONFIG_POWER_MA(100)
 | 
			
		||||
		},
 | 
			
		||||
		
 | 
			
		||||
	.Audio_ControlInterface = 
 | 
			
		||||
 | 
			
		||||
	.Audio_ControlInterface =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 | 
			
		||||
 | 
			
		||||
			.InterfaceNumber          = 0,
 | 
			
		||||
			.AlternateSetting         = 0,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.TotalEndpoints           = 0,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.Class                    = 0x01,
 | 
			
		||||
			.SubClass                 = 0x01,
 | 
			
		||||
			.Protocol                 = 0x00,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.InterfaceStrIndex        = NO_DESCRIPTOR
 | 
			
		||||
		},
 | 
			
		||||
	
 | 
			
		||||
	.Audio_ControlInterface_SPC = 
 | 
			
		||||
 | 
			
		||||
	.Audio_ControlInterface_SPC =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                   = {.Size = sizeof(USB_Audio_Descriptor_Interface_AC_t), .Type = DTYPE_CSInterface},
 | 
			
		||||
			.Subtype                  = AUDIO_DSUBTYPE_CSInterface_Header,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.ACSpecification          = VERSION_BCD(01.00),
 | 
			
		||||
			.TotalLength              = sizeof(USB_Audio_Descriptor_Interface_AC_t),
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.InCollection             = 1,
 | 
			
		||||
			.InterfaceNumber          = 1,
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.Audio_StreamInterface = 
 | 
			
		||||
	.Audio_StreamInterface =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 | 
			
		||||
 | 
			
		||||
			.InterfaceNumber          = 1,
 | 
			
		||||
			.AlternateSetting         = 0,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.TotalEndpoints           = 2,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.Class                    = 0x01,
 | 
			
		||||
			.SubClass                 = 0x03,
 | 
			
		||||
			.Protocol                 = 0x00,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.InterfaceStrIndex        = NO_DESCRIPTOR
 | 
			
		||||
		},
 | 
			
		||||
		
 | 
			
		||||
	.Audio_StreamInterface_SPC = 
 | 
			
		||||
 | 
			
		||||
	.Audio_StreamInterface_SPC =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                   = {.Size = sizeof(USB_MIDI_Descriptor_AudioInterface_AS_t), .Type = DTYPE_CSInterface},
 | 
			
		||||
			.Subtype                  = AUDIO_DSUBTYPE_CSInterface_General,
 | 
			
		||||
 | 
			
		||||
			.AudioSpecification       = VERSION_BCD(01.00),
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.TotalLength              = (sizeof(USB_Descriptor_Configuration_t) -
 | 
			
		||||
			                             offsetof(USB_Descriptor_Configuration_t, Audio_StreamInterface_SPC))
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.MIDI_In_Jack_Emb = 
 | 
			
		||||
	.MIDI_In_Jack_Emb =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                   = {.Size = sizeof(USB_MIDI_Descriptor_InputJack_t), .Type = DTYPE_CSInterface},
 | 
			
		||||
			.Subtype                  = AUDIO_DSUBTYPE_CSInterface_InputTerminal,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.JackType                 = MIDI_JACKTYPE_Embedded,
 | 
			
		||||
			.JackID                   = 0x01,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.JackStrIndex             = NO_DESCRIPTOR
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.MIDI_In_Jack_Ext = 
 | 
			
		||||
	.MIDI_In_Jack_Ext =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                   = {.Size = sizeof(USB_MIDI_Descriptor_InputJack_t), .Type = DTYPE_CSInterface},
 | 
			
		||||
			.Subtype                  = AUDIO_DSUBTYPE_CSInterface_InputTerminal,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.JackType                 = MIDI_JACKTYPE_External,
 | 
			
		||||
			.JackID                   = 0x02,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.JackStrIndex             = NO_DESCRIPTOR
 | 
			
		||||
		},
 | 
			
		||||
		
 | 
			
		||||
	.MIDI_Out_Jack_Emb = 
 | 
			
		||||
 | 
			
		||||
	.MIDI_Out_Jack_Emb =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                   = {.Size = sizeof(USB_MIDI_Descriptor_OutputJack_t), .Type = DTYPE_CSInterface},
 | 
			
		||||
			.Subtype                  = AUDIO_DSUBTYPE_CSInterface_OutputTerminal,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.JackType                 = MIDI_JACKTYPE_Embedded,
 | 
			
		||||
			.JackID                   = 0x03,
 | 
			
		||||
 | 
			
		||||
			.NumberOfPins             = 1,
 | 
			
		||||
			.SourceJackID             = {0x02},
 | 
			
		||||
			.SourcePinID              = {0x01},
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.JackStrIndex             = NO_DESCRIPTOR
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.MIDI_Out_Jack_Ext = 
 | 
			
		||||
	.MIDI_Out_Jack_Ext =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                   = {.Size = sizeof(USB_MIDI_Descriptor_OutputJack_t), .Type = DTYPE_CSInterface},
 | 
			
		||||
			.Subtype                  = AUDIO_DSUBTYPE_CSInterface_OutputTerminal,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.JackType                 = MIDI_JACKTYPE_External,
 | 
			
		||||
			.JackID                   = 0x04,
 | 
			
		||||
 | 
			
		||||
			.NumberOfPins             = 1,
 | 
			
		||||
			.SourceJackID             = {0x01},
 | 
			
		||||
			.SourcePinID              = {0x01},
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.JackStrIndex             = NO_DESCRIPTOR
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.MIDI_In_Jack_Endpoint = 
 | 
			
		||||
	.MIDI_In_Jack_Endpoint =
 | 
			
		||||
		{
 | 
			
		||||
			.Endpoint = 
 | 
			
		||||
			.Endpoint =
 | 
			
		||||
				{
 | 
			
		||||
					.Header              = {.Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Std_t), .Type = DTYPE_Endpoint},
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -204,12 +204,12 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		|||
					.EndpointSize        = MIDI_STREAM_EPSIZE,
 | 
			
		||||
					.PollingIntervalMS   = 0
 | 
			
		||||
				},
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.Refresh                  = 0,
 | 
			
		||||
			.SyncEndpointNumber       = 0
 | 
			
		||||
		},
 | 
			
		||||
		
 | 
			
		||||
	.MIDI_In_Jack_Endpoint_SPC = 
 | 
			
		||||
 | 
			
		||||
	.MIDI_In_Jack_Endpoint_SPC =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                   = {.Size = sizeof(USB_MIDI_Descriptor_Jack_Endpoint_t), .Type = DTYPE_CSEndpoint},
 | 
			
		||||
			.Subtype                  = AUDIO_DSUBTYPE_CSEndpoint_General,
 | 
			
		||||
| 
						 | 
				
			
			@ -218,9 +218,9 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		|||
			.AssociatedJackID         = {0x01}
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.MIDI_Out_Jack_Endpoint = 
 | 
			
		||||
	.MIDI_Out_Jack_Endpoint =
 | 
			
		||||
		{
 | 
			
		||||
			.Endpoint = 
 | 
			
		||||
			.Endpoint =
 | 
			
		||||
				{
 | 
			
		||||
					.Header              = {.Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Std_t), .Type = DTYPE_Endpoint},
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -229,12 +229,12 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		|||
					.EndpointSize        = MIDI_STREAM_EPSIZE,
 | 
			
		||||
					.PollingIntervalMS   = 0
 | 
			
		||||
				},
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.Refresh                  = 0,
 | 
			
		||||
			.SyncEndpointNumber       = 0
 | 
			
		||||
		},
 | 
			
		||||
		
 | 
			
		||||
	.MIDI_Out_Jack_Endpoint_SPC = 
 | 
			
		||||
 | 
			
		||||
	.MIDI_Out_Jack_Endpoint_SPC =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                   = {.Size = sizeof(USB_MIDI_Descriptor_Jack_Endpoint_t), .Type = DTYPE_CSEndpoint},
 | 
			
		||||
			.Subtype                  = AUDIO_DSUBTYPE_CSEndpoint_General,
 | 
			
		||||
| 
						 | 
				
			
			@ -251,7 +251,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		|||
USB_Descriptor_String_t PROGMEM LanguageString =
 | 
			
		||||
{
 | 
			
		||||
	.Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.UnicodeString          = {LANGUAGE_ID_ENG}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -262,7 +262,7 @@ USB_Descriptor_String_t PROGMEM LanguageString =
 | 
			
		|||
USB_Descriptor_String_t PROGMEM ManufacturerString =
 | 
			
		||||
{
 | 
			
		||||
	.Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.UnicodeString          = L"Dean Camera"
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -273,7 +273,7 @@ USB_Descriptor_String_t PROGMEM ManufacturerString =
 | 
			
		|||
USB_Descriptor_String_t PROGMEM ProductString =
 | 
			
		||||
{
 | 
			
		||||
	.Header                 = {.Size = USB_STRING_LEN(14), .Type = DTYPE_String},
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.UnicodeString          = L"LUFA MIDI Demo"
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -295,34 +295,35 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		|||
 | 
			
		||||
	switch (DescriptorType)
 | 
			
		||||
	{
 | 
			
		||||
		case DTYPE_Device: 
 | 
			
		||||
		case DTYPE_Device:
 | 
			
		||||
			Address = &DeviceDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Configuration: 
 | 
			
		||||
		case DTYPE_Configuration:
 | 
			
		||||
			Address = &ConfigurationDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_String: 
 | 
			
		||||
		case DTYPE_String:
 | 
			
		||||
			switch (DescriptorNumber)
 | 
			
		||||
			{
 | 
			
		||||
				case 0x00: 
 | 
			
		||||
				case 0x00:
 | 
			
		||||
					Address = &LanguageString;
 | 
			
		||||
					Size    = pgm_read_byte(&LanguageString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x01: 
 | 
			
		||||
				case 0x01:
 | 
			
		||||
					Address = &ManufacturerString;
 | 
			
		||||
					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x02: 
 | 
			
		||||
				case 0x02:
 | 
			
		||||
					Address = &ProductString;
 | 
			
		||||
					Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			break;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	*DescriptorAddress = Address;
 | 
			
		||||
	return Size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -32,7 +32,7 @@
 | 
			
		|||
 *
 | 
			
		||||
 *  Header file for Descriptors.c.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
#ifndef _DESCRIPTORS_H_
 | 
			
		||||
#define _DESCRIPTORS_H_
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -51,7 +51,7 @@
 | 
			
		|||
 | 
			
		||||
		/** Endpoint size in bytes of the Audio isochronous streaming data IN and OUT endpoints. */
 | 
			
		||||
		#define MIDI_STREAM_EPSIZE          64
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	/* Type Defines: */
 | 
			
		||||
		/** Type define for the device configuration descriptor structure. This must be defined in the
 | 
			
		||||
		 *  application code, as the configuration descriptor contains several sub-descriptors which
 | 
			
		||||
| 
						 | 
				
			
			@ -73,7 +73,7 @@
 | 
			
		|||
			USB_Audio_Descriptor_StreamEndpoint_Std_t MIDI_Out_Jack_Endpoint;
 | 
			
		||||
			USB_MIDI_Descriptor_Jack_Endpoint_t       MIDI_Out_Jack_Endpoint_SPC;
 | 
			
		||||
		} USB_Descriptor_Configuration_t;
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	/* Function Prototypes: */
 | 
			
		||||
		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
		                                    const uint8_t wIndex,
 | 
			
		||||
| 
						 | 
				
			
			@ -81,3 +81,4 @@
 | 
			
		|||
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -65,11 +65,11 @@ int main(void)
 | 
			
		|||
 | 
			
		||||
	LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
 | 
			
		||||
	sei();
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	for (;;)
 | 
			
		||||
	{
 | 
			
		||||
		CheckJoystickMovement();
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		MIDI_EventPacket_t ReceivedMIDIEvent;
 | 
			
		||||
		if (MIDI_Device_ReceiveEventPacket(&Keyboard_MIDI_Interface, &ReceivedMIDIEvent))
 | 
			
		||||
		{
 | 
			
		||||
| 
						 | 
				
			
			@ -78,7 +78,7 @@ int main(void)
 | 
			
		|||
			else
 | 
			
		||||
			  LEDs_SetAllLEDs(LEDS_NO_LEDS);
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
		MIDI_Device_USBTask(&Keyboard_MIDI_Interface);
 | 
			
		||||
		USB_USBTask();
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -93,7 +93,7 @@ void SetupHardware(void)
 | 
			
		|||
 | 
			
		||||
	/* Disable clock division */
 | 
			
		||||
	clock_prescale_set(clock_div_1);
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Hardware Initialization */
 | 
			
		||||
	Joystick_Init();
 | 
			
		||||
	LEDs_Init();
 | 
			
		||||
| 
						 | 
				
			
			@ -108,11 +108,11 @@ void CheckJoystickMovement(void)
 | 
			
		|||
 | 
			
		||||
	uint8_t MIDICommand = 0;
 | 
			
		||||
	uint8_t MIDIPitch;
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Get current joystick mask, XOR with previous to detect joystick changes */
 | 
			
		||||
	uint8_t JoystickStatus  = Joystick_GetStatus();
 | 
			
		||||
	uint8_t JoystickChanges = (JoystickStatus ^ PrevJoystickStatus);
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	/* Get board button status - if pressed use channel 10 (percussion), otherwise use channel 1 */
 | 
			
		||||
	uint8_t Channel = ((Buttons_GetStatus() & BUTTONS_BUTTON1) ? MIDI_CHANNEL(10) : MIDI_CHANNEL(1));
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -133,7 +133,7 @@ void CheckJoystickMovement(void)
 | 
			
		|||
		MIDICommand = ((JoystickStatus & JOY_RIGHT)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF);
 | 
			
		||||
		MIDIPitch   = 0x3E;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	if (JoystickChanges & JOY_DOWN)
 | 
			
		||||
	{
 | 
			
		||||
		MIDICommand = ((JoystickStatus & JOY_DOWN)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF);
 | 
			
		||||
| 
						 | 
				
			
			@ -145,19 +145,19 @@ void CheckJoystickMovement(void)
 | 
			
		|||
		MIDICommand = ((JoystickStatus & JOY_PRESS)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF);
 | 
			
		||||
		MIDIPitch   = 0x3B;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	if (MIDICommand)
 | 
			
		||||
	{
 | 
			
		||||
		MIDI_EventPacket_t MIDIEvent = (MIDI_EventPacket_t)
 | 
			
		||||
			{
 | 
			
		||||
				.CableNumber = 0,
 | 
			
		||||
				.Command     = (MIDICommand >> 4),
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
				.Data1       = MIDICommand | Channel,
 | 
			
		||||
				.Data2       = MIDIPitch,
 | 
			
		||||
				.Data3       = MIDI_STANDARD_VELOCITY,			
 | 
			
		||||
				.Data3       = MIDI_STANDARD_VELOCITY,
 | 
			
		||||
			};
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
		MIDI_Device_SendEventPacket(&Keyboard_MIDI_Interface, &MIDIEvent);
 | 
			
		||||
		MIDI_Device_Flush(&Keyboard_MIDI_Interface);
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -192,3 +192,4 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
 | 
			
		|||
{
 | 
			
		||||
	MIDI_Device_ProcessControlRequest(&Keyboard_MIDI_Interface);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -32,7 +32,7 @@
 | 
			
		|||
 *
 | 
			
		||||
 *  Header file for AudioOutput.c.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
#ifndef _AUDIO_OUTPUT_H_
 | 
			
		||||
#define _AUDIO_OUTPUT_H_
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -45,7 +45,7 @@
 | 
			
		|||
		#include <string.h>
 | 
			
		||||
 | 
			
		||||
		#include "Descriptors.h"
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
		#include <LUFA/Version.h>
 | 
			
		||||
		#include <LUFA/Drivers/Board/LEDs.h>
 | 
			
		||||
		#include <LUFA/Drivers/Board/Joystick.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -65,14 +65,15 @@
 | 
			
		|||
 | 
			
		||||
		/** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */
 | 
			
		||||
		#define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	/* Function Prototypes: */
 | 
			
		||||
		void SetupHardware(void);
 | 
			
		||||
		void CheckJoystickMovement(void);
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		void EVENT_USB_Device_Connect(void);
 | 
			
		||||
		void EVENT_USB_Device_Disconnect(void);
 | 
			
		||||
		void EVENT_USB_Device_ConfigurationChanged(void);
 | 
			
		||||
		void EVENT_USB_Device_UnhandledControlRequest(void);
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,7 +3,7 @@
 | 
			
		|||
 *  This file contains special DoxyGen information for the generation of the main page and other special
 | 
			
		||||
 *  documentation pages. It is not a project source file.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
/** \mainpage MIDI Input Device Demo
 | 
			
		||||
 *
 | 
			
		||||
 *  \section SSec_Compat Demo Compatibility:
 | 
			
		||||
| 
						 | 
				
			
			@ -28,7 +28,7 @@
 | 
			
		|||
 *    <td><b>USB Class:</b></td>
 | 
			
		||||
 *    <td>Audio Class</td>
 | 
			
		||||
 *   </tr>
 | 
			
		||||
 *   <tr> 
 | 
			
		||||
 *   <tr>
 | 
			
		||||
 *    <td><b>USB Subclass:</b></td>
 | 
			
		||||
 *    <td>Standard Audio Device</td>
 | 
			
		||||
 *   </tr>
 | 
			
		||||
| 
						 | 
				
			
			@ -44,19 +44,19 @@
 | 
			
		|||
 *   </tr>
 | 
			
		||||
 *  </table>
 | 
			
		||||
 *
 | 
			
		||||
 *  \section SSec_Description Project Description: 
 | 
			
		||||
 *  \section SSec_Description Project Description:
 | 
			
		||||
 *
 | 
			
		||||
 *  MIDI demonstration application. This gives a simple reference
 | 
			
		||||
 *  application for implementing the USB-MIDI class in USB devices.
 | 
			
		||||
 *  It is built upon the USB Audio class.
 | 
			
		||||
 *  
 | 
			
		||||
 *
 | 
			
		||||
 *  Joystick movements are translated into note on/off messages and
 | 
			
		||||
 *  are sent to the host PC as MIDI streams which can be read by any
 | 
			
		||||
 *  MIDI program supporting MIDI IN devices.
 | 
			
		||||
 *  
 | 
			
		||||
 *
 | 
			
		||||
 *  If the HWB is not pressed, channel 1 (default piano) is used. If
 | 
			
		||||
 *  the HWB is set, then channel 10 (default percussion) is selected.
 | 
			
		||||
 *  
 | 
			
		||||
 *
 | 
			
		||||
 *  This device implements MIDI-THRU mode, with the IN MIDI data being
 | 
			
		||||
 *  generated by the device itself. OUT MIDI data is discarded.
 | 
			
		||||
 *
 | 
			
		||||
| 
						 | 
				
			
			@ -72,3 +72,4 @@
 | 
			
		|||
 *   </tr>
 | 
			
		||||
 *  </table>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,7 +47,7 @@
 | 
			
		|||
# make doxygen = Generate DoxyGen documentation for the project (must have
 | 
			
		||||
#                DoxyGen installed)
 | 
			
		||||
#
 | 
			
		||||
# make debug = Start either simulavr or avarice as specified for debugging, 
 | 
			
		||||
# make debug = Start either simulavr or avarice as specified for debugging,
 | 
			
		||||
#              with avr-gdb or avr-insight as the front end for debugging.
 | 
			
		||||
#
 | 
			
		||||
# make filename.s = Just compile filename.c into the assembler code only.
 | 
			
		||||
| 
						 | 
				
			
			@ -64,14 +64,14 @@ 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 
 | 
			
		||||
# LUFA board drivers). If USER is selected, put custom board drivers in a directory called
 | 
			
		||||
# "Board" inside the application directory.
 | 
			
		||||
BOARD = USBKEY
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Processor frequency.
 | 
			
		||||
#     This will define a symbol, F_CPU, in all source code files equal to the 
 | 
			
		||||
#     processor frequency in Hz. You can then use this symbol in your source code to 
 | 
			
		||||
#     This will define a symbol, F_CPU, in all source code files equal to the
 | 
			
		||||
#     processor frequency in Hz. You can then use this symbol in your source code to
 | 
			
		||||
#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
 | 
			
		||||
#     automatically to create a 32-bit value in your source code.
 | 
			
		||||
#
 | 
			
		||||
| 
						 | 
				
			
			@ -84,7 +84,7 @@ F_CPU = 8000000
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Input clock frequency.
 | 
			
		||||
#     This will define a symbol, F_CLOCK, in all source code files equal to the 
 | 
			
		||||
#     This will define a symbol, F_CLOCK, in all source code files equal to the
 | 
			
		||||
#     input clock frequency (before any prescaling is performed) in Hz. This value may
 | 
			
		||||
#     differ from F_CPU if prescaling is used on the latter, and is required as the
 | 
			
		||||
#     raw input clock is fed directly to the PLL sections of the AVR for high speed
 | 
			
		||||
| 
						 | 
				
			
			@ -135,7 +135,7 @@ SRC = $(TARGET).c                                                 \
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# List C++ source files here. (C dependencies are automatically generated.)
 | 
			
		||||
CPPSRC = 
 | 
			
		||||
CPPSRC =
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# List Assembler source files here.
 | 
			
		||||
| 
						 | 
				
			
			@ -148,7 +148,7 @@ CPPSRC =
 | 
			
		|||
ASRC =
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Optimization level, can be [0, 1, 2, 3, s]. 
 | 
			
		||||
# Optimization level, can be [0, 1, 2, 3, s].
 | 
			
		||||
#     0 = turn off optimization. s = optimize for size.
 | 
			
		||||
#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
 | 
			
		||||
OPT = s
 | 
			
		||||
| 
						 | 
				
			
			@ -262,7 +262,7 @@ CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
 | 
			
		|||
#             for use in COFF files, additional information about filenames
 | 
			
		||||
#             and function names needs to be present in the assembler source
 | 
			
		||||
#             files -- see avr-libc docs [FIXME: not yet described there]
 | 
			
		||||
#  -listing-cont-lines: Sets the maximum number of continuation lines of hex 
 | 
			
		||||
#  -listing-cont-lines: Sets the maximum number of continuation lines of hex
 | 
			
		||||
#       dump that will be displayed for a given single line of source input.
 | 
			
		||||
ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -275,7 +275,7 @@ PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
 | 
			
		|||
PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
 | 
			
		||||
 | 
			
		||||
# If this is left blank, then it will use the Standard printf version.
 | 
			
		||||
PRINTF_LIB = 
 | 
			
		||||
PRINTF_LIB =
 | 
			
		||||
#PRINTF_LIB = $(PRINTF_LIB_MIN)
 | 
			
		||||
#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -287,7 +287,7 @@ SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
 | 
			
		|||
SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
 | 
			
		||||
 | 
			
		||||
# If this is left blank, then it will use the Standard scanf version.
 | 
			
		||||
SCANF_LIB = 
 | 
			
		||||
SCANF_LIB =
 | 
			
		||||
#SCANF_LIB = $(SCANF_LIB_MIN)
 | 
			
		||||
#SCANF_LIB = $(SCANF_LIB_FLOAT)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -299,7 +299,7 @@ MATH_LIB = -lm
 | 
			
		|||
#     Each directory must be seperated by a space.
 | 
			
		||||
#     Use forward slashes for directory separators.
 | 
			
		||||
#     For a directory that has spaces, enclose it in quotes.
 | 
			
		||||
EXTRALIBDIRS = 
 | 
			
		||||
EXTRALIBDIRS =
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -322,7 +322,7 @@ EXTMEMOPTS =
 | 
			
		|||
#    -Map:      create map file
 | 
			
		||||
#    --cref:    add cross reference to  map file
 | 
			
		||||
LDFLAGS  = -Wl,-Map=$(TARGET).map,--cref
 | 
			
		||||
LDFLAGS += -Wl,--relax 
 | 
			
		||||
LDFLAGS += -Wl,--relax
 | 
			
		||||
LDFLAGS += -Wl,--gc-sections
 | 
			
		||||
LDFLAGS += $(EXTMEMOPTS)
 | 
			
		||||
LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))
 | 
			
		||||
| 
						 | 
				
			
			@ -356,7 +356,7 @@ AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
 | 
			
		|||
#AVRDUDE_NO_VERIFY = -V
 | 
			
		||||
 | 
			
		||||
# Increase verbosity level.  Please use this when submitting bug
 | 
			
		||||
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
 | 
			
		||||
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
 | 
			
		||||
# to submit bug reports.
 | 
			
		||||
#AVRDUDE_VERBOSE = -v -v
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -390,7 +390,7 @@ JTAG_DEV = /dev/com1
 | 
			
		|||
DEBUG_PORT = 4242
 | 
			
		||||
 | 
			
		||||
# Debugging host used to communicate between GDB / avarice / simulavr, normally
 | 
			
		||||
#     just set to localhost unless doing some sort of crazy debugging when 
 | 
			
		||||
#     just set to localhost unless doing some sort of crazy debugging when
 | 
			
		||||
#     avarice is running on a different computer.
 | 
			
		||||
DEBUG_HOST = localhost
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -419,7 +419,7 @@ WINSHELL = cmd
 | 
			
		|||
MSG_ERRORS_NONE = Errors: none
 | 
			
		||||
MSG_BEGIN = -------- begin --------
 | 
			
		||||
MSG_END = --------  end  --------
 | 
			
		||||
MSG_SIZE_BEFORE = Size before: 
 | 
			
		||||
MSG_SIZE_BEFORE = Size before:
 | 
			
		||||
MSG_SIZE_AFTER = Size after:
 | 
			
		||||
MSG_COFF = Converting to AVR COFF:
 | 
			
		||||
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
 | 
			
		||||
| 
						 | 
				
			
			@ -438,10 +438,10 @@ MSG_CREATING_LIBRARY = Creating library:
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Define all object files.
 | 
			
		||||
OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) 
 | 
			
		||||
OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o)
 | 
			
		||||
 | 
			
		||||
# Define all listing files.
 | 
			
		||||
LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) 
 | 
			
		||||
LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Compiler flags to generate dependency files.
 | 
			
		||||
| 
						 | 
				
			
			@ -506,11 +506,11 @@ sizeafter:
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Display compiler version information.
 | 
			
		||||
gccversion : 
 | 
			
		||||
gccversion :
 | 
			
		||||
	@$(CC) --version
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Program the device.  
 | 
			
		||||
# Program the device.
 | 
			
		||||
program: $(TARGET).hex $(TARGET).eep
 | 
			
		||||
	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -537,9 +537,9 @@ dfu-ee: $(TARGET).hex $(TARGET).eep
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Generate avr-gdb config/init file which does the following:
 | 
			
		||||
#     define the reset signal, load the target file, connect to target, and set 
 | 
			
		||||
#     define the reset signal, load the target file, connect to target, and set
 | 
			
		||||
#     a breakpoint at main().
 | 
			
		||||
gdb-config: 
 | 
			
		||||
gdb-config:
 | 
			
		||||
	@$(REMOVE) $(GDBINIT_FILE)
 | 
			
		||||
	@echo define reset >> $(GDBINIT_FILE)
 | 
			
		||||
	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
 | 
			
		||||
| 
						 | 
				
			
			@ -637,14 +637,14 @@ extcoff: $(TARGET).elf
 | 
			
		|||
$(OBJDIR)/%.o : %.c
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo $(MSG_COMPILING) $<
 | 
			
		||||
	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
 | 
			
		||||
	$(CC) -c $(ALL_CFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Compile: create object files from C++ source files.
 | 
			
		||||
$(OBJDIR)/%.o : %.cpp
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo $(MSG_COMPILING_CPP) $<
 | 
			
		||||
	$(CC) -c $(ALL_CPPFLAGS) $< -o $@ 
 | 
			
		||||
	$(CC) -c $(ALL_CPPFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Compile: create assembler files from C source files.
 | 
			
		||||
| 
						 | 
				
			
			@ -666,7 +666,7 @@ $(OBJDIR)/%.o : %.S
 | 
			
		|||
 | 
			
		||||
# Create preprocessed source for use in sending a bug report.
 | 
			
		||||
%.i : %.c
 | 
			
		||||
	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
 | 
			
		||||
	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Target: clean project.
 | 
			
		||||
| 
						 | 
				
			
			@ -710,3 +710,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null)
 | 
			
		|||
build elf hex eep lss sym coff extcoff doxygen clean          \
 | 
			
		||||
clean_list clean_doxygen program dfu flip flip-ee dfu-ee      \
 | 
			
		||||
debug gdb-config
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -30,9 +30,9 @@
 | 
			
		|||
 | 
			
		||||
/** \file
 | 
			
		||||
 *
 | 
			
		||||
 *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special 
 | 
			
		||||
 *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special
 | 
			
		||||
 *  computer-readable structures which the host requests upon device enumeration, to determine
 | 
			
		||||
 *  the device's capabilities and functions.  
 | 
			
		||||
 *  the device's capabilities and functions.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "Descriptors.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -57,22 +57,22 @@
 | 
			
		|||
USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
 | 
			
		||||
{
 | 
			
		||||
	.Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.USBSpecification       = VERSION_BCD(01.10),
 | 
			
		||||
	.Class                  = 0x00,
 | 
			
		||||
	.SubClass               = 0x00,
 | 
			
		||||
	.Protocol               = 0x00,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
	.Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.VendorID               = 0x03EB,
 | 
			
		||||
	.ProductID              = 0x2045,
 | 
			
		||||
	.ReleaseNumber          = VERSION_BCD(00.01),
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.ManufacturerStrIndex   = 0x01,
 | 
			
		||||
	.ProductStrIndex        = 0x02,
 | 
			
		||||
	.SerialNumStrIndex      = USE_INTERNAL_SERIAL,
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -83,38 +83,38 @@ USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
 | 
			
		|||
 */
 | 
			
		||||
USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		||||
{
 | 
			
		||||
	.Config = 
 | 
			
		||||
	.Config =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},
 | 
			
		||||
 | 
			
		||||
			.TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),
 | 
			
		||||
			.TotalInterfaces        = 1,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.ConfigurationNumber    = 1,
 | 
			
		||||
			.ConfigurationStrIndex  = NO_DESCRIPTOR,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.ConfigAttributes       = USB_CONFIG_ATTR_BUSPOWERED,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)
 | 
			
		||||
		},
 | 
			
		||||
		
 | 
			
		||||
	.MS_Interface = 
 | 
			
		||||
 | 
			
		||||
	.MS_Interface =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 | 
			
		||||
 | 
			
		||||
			.InterfaceNumber        = 0,
 | 
			
		||||
			.AlternateSetting       = 0,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.TotalEndpoints         = 2,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.Class                  = 0x08,
 | 
			
		||||
			.SubClass               = 0x06,
 | 
			
		||||
			.Protocol               = 0x50,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.InterfaceStrIndex      = NO_DESCRIPTOR
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.MS_DataInEndpoint = 
 | 
			
		||||
	.MS_DataInEndpoint =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -124,7 +124,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		|||
			.PollingIntervalMS      = 0x00
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.MS_DataOutEndpoint = 
 | 
			
		||||
	.MS_DataOutEndpoint =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -142,7 +142,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		|||
USB_Descriptor_String_t PROGMEM LanguageString =
 | 
			
		||||
{
 | 
			
		||||
	.Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.UnicodeString          = {LANGUAGE_ID_ENG}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -153,7 +153,7 @@ USB_Descriptor_String_t PROGMEM LanguageString =
 | 
			
		|||
USB_Descriptor_String_t PROGMEM ManufacturerString =
 | 
			
		||||
{
 | 
			
		||||
	.Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.UnicodeString          = L"Dean Camera"
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -164,7 +164,7 @@ USB_Descriptor_String_t PROGMEM ManufacturerString =
 | 
			
		|||
USB_Descriptor_String_t PROGMEM ProductString =
 | 
			
		||||
{
 | 
			
		||||
	.Header                 = {.Size = USB_STRING_LEN(22), .Type = DTYPE_String},
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.UnicodeString          = L"LUFA Mass Storage Demo"
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -186,34 +186,35 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		|||
 | 
			
		||||
	switch (DescriptorType)
 | 
			
		||||
	{
 | 
			
		||||
		case DTYPE_Device: 
 | 
			
		||||
		case DTYPE_Device:
 | 
			
		||||
			Address = &DeviceDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Configuration: 
 | 
			
		||||
		case DTYPE_Configuration:
 | 
			
		||||
			Address = &ConfigurationDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_String: 
 | 
			
		||||
		case DTYPE_String:
 | 
			
		||||
			switch (DescriptorNumber)
 | 
			
		||||
			{
 | 
			
		||||
				case 0x00: 
 | 
			
		||||
				case 0x00:
 | 
			
		||||
					Address = &LanguageString;
 | 
			
		||||
					Size    = pgm_read_byte(&LanguageString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x01: 
 | 
			
		||||
				case 0x01:
 | 
			
		||||
					Address = &ManufacturerString;
 | 
			
		||||
					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x02: 
 | 
			
		||||
				case 0x02:
 | 
			
		||||
					Address = &ProductString;
 | 
			
		||||
					Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			break;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	*DescriptorAddress = Address;
 | 
			
		||||
	return Size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -32,7 +32,7 @@
 | 
			
		|||
 *
 | 
			
		||||
 *  Header file for Descriptors.c.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
#ifndef _DESCRIPTORS_H_
 | 
			
		||||
#define _DESCRIPTORS_H_
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -44,15 +44,15 @@
 | 
			
		|||
 | 
			
		||||
	/* Macros: */
 | 
			
		||||
		/** Endpoint number of the Mass Storage device-to-host data IN endpoint. */
 | 
			
		||||
		#define MASS_STORAGE_IN_EPNUM          3	
 | 
			
		||||
		#define MASS_STORAGE_IN_EPNUM          3
 | 
			
		||||
 | 
			
		||||
		/** Endpoint number of the Mass Storage host-to-device data OUT endpoint. */
 | 
			
		||||
		#define MASS_STORAGE_OUT_EPNUM         4	
 | 
			
		||||
		#define MASS_STORAGE_OUT_EPNUM         4
 | 
			
		||||
 | 
			
		||||
		/** Size in bytes of the Mass Storage data endpoints. */
 | 
			
		||||
		#define MASS_STORAGE_IO_EPSIZE         64
 | 
			
		||||
		
 | 
			
		||||
	/* Type Defines: */		
 | 
			
		||||
 | 
			
		||||
	/* Type Defines: */
 | 
			
		||||
		/** Type define for the device configuration descriptor structure. This must be defined in the
 | 
			
		||||
		 *  application code, as the configuration descriptor contains several sub-descriptors which
 | 
			
		||||
		 *  vary between devices, and which describe the device's usage to the host.
 | 
			
		||||
| 
						 | 
				
			
			@ -64,7 +64,7 @@
 | 
			
		|||
			USB_Descriptor_Endpoint_t             MS_DataInEndpoint;
 | 
			
		||||
			USB_Descriptor_Endpoint_t             MS_DataOutEndpoint;
 | 
			
		||||
		} USB_Descriptor_Configuration_t;
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	/* Function Prototypes: */
 | 
			
		||||
		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
		                                    const uint8_t wIndex,
 | 
			
		||||
| 
						 | 
				
			
			@ -72,3 +72,4 @@
 | 
			
		|||
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -77,7 +77,7 @@ void DataflashManager_WriteBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceIn
 | 
			
		|||
	while (TotalBlocks)
 | 
			
		||||
	{
 | 
			
		||||
		uint8_t BytesInBlockDiv16 = 0;
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/* Write an endpoint packet sized data block to the Dataflash */
 | 
			
		||||
		while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4))
 | 
			
		||||
		{
 | 
			
		||||
| 
						 | 
				
			
			@ -86,7 +86,7 @@ void DataflashManager_WriteBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceIn
 | 
			
		|||
			{
 | 
			
		||||
				/* Clear the current endpoint bank */
 | 
			
		||||
				Endpoint_ClearOUT();
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
				/* Wait until the host has sent another packet */
 | 
			
		||||
				if (Endpoint_WaitUntilReady())
 | 
			
		||||
				  return;
 | 
			
		||||
| 
						 | 
				
			
			@ -125,7 +125,7 @@ void DataflashManager_WriteBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceIn
 | 
			
		|||
 | 
			
		||||
				/* Send the Dataflash buffer write command */
 | 
			
		||||
				Dataflash_SendByte(UsingSecondBuffer ? DF_CMD_BUFF2WRITE : DF_CMD_BUFF1WRITE);
 | 
			
		||||
				Dataflash_SendAddressBytes(0, 0);				
 | 
			
		||||
				Dataflash_SendAddressBytes(0, 0);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			/* Write one 16-byte chunk of data to the Dataflash */
 | 
			
		||||
| 
						 | 
				
			
			@ -145,7 +145,7 @@ void DataflashManager_WriteBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceIn
 | 
			
		|||
			Dataflash_SendByte(Endpoint_Read_Byte());
 | 
			
		||||
			Dataflash_SendByte(Endpoint_Read_Byte());
 | 
			
		||||
			Dataflash_SendByte(Endpoint_Read_Byte());
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			/* Increment the Dataflash page 16 byte block counter */
 | 
			
		||||
			CurrDFPageByteDiv16++;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -154,9 +154,9 @@ void DataflashManager_WriteBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceIn
 | 
			
		|||
 | 
			
		||||
			/* Check if the current command is being aborted by the host */
 | 
			
		||||
			if (MSInterfaceInfo->State.IsMassStoreReset)
 | 
			
		||||
			  return;			
 | 
			
		||||
			  return;
 | 
			
		||||
		}
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
		/* Decrement the blocks remaining counter and reset the sub block counter */
 | 
			
		||||
		TotalBlocks--;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -201,15 +201,15 @@ void DataflashManager_ReadBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceInf
 | 
			
		|||
	Dataflash_SendByte(0x00);
 | 
			
		||||
	Dataflash_SendByte(0x00);
 | 
			
		||||
	Dataflash_SendByte(0x00);
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Wait until endpoint is ready before continuing */
 | 
			
		||||
	if (Endpoint_WaitUntilReady())
 | 
			
		||||
	  return;
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	while (TotalBlocks)
 | 
			
		||||
	{
 | 
			
		||||
		uint8_t BytesInBlockDiv16 = 0;
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/* Write an endpoint packet sized data block to the Dataflash */
 | 
			
		||||
		while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4))
 | 
			
		||||
		{
 | 
			
		||||
| 
						 | 
				
			
			@ -218,12 +218,12 @@ void DataflashManager_ReadBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceInf
 | 
			
		|||
			{
 | 
			
		||||
				/* Clear the endpoint bank to send its contents to the host */
 | 
			
		||||
				Endpoint_ClearIN();
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
				/* Wait until the endpoint is ready for more data */
 | 
			
		||||
				if (Endpoint_WaitUntilReady())
 | 
			
		||||
				  return;
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			/* Check if end of Dataflash page reached */
 | 
			
		||||
			if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4))
 | 
			
		||||
			{
 | 
			
		||||
| 
						 | 
				
			
			@ -233,7 +233,7 @@ void DataflashManager_ReadBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceInf
 | 
			
		|||
 | 
			
		||||
				/* Select the next Dataflash chip based on the new Dataflash page index */
 | 
			
		||||
				Dataflash_SelectChipFromPage(CurrDFPage);
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
				/* Send the Dataflash main memory page read command */
 | 
			
		||||
				Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD);
 | 
			
		||||
				Dataflash_SendAddressBytes(CurrDFPage, 0);
 | 
			
		||||
| 
						 | 
				
			
			@ -241,7 +241,7 @@ void DataflashManager_ReadBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceInf
 | 
			
		|||
				Dataflash_SendByte(0x00);
 | 
			
		||||
				Dataflash_SendByte(0x00);
 | 
			
		||||
				Dataflash_SendByte(0x00);
 | 
			
		||||
			}	
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			/* Read one 16-byte chunk of data from the Dataflash */
 | 
			
		||||
			Endpoint_Write_Byte(Dataflash_ReceiveByte());
 | 
			
		||||
| 
						 | 
				
			
			@ -260,10 +260,10 @@ void DataflashManager_ReadBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceInf
 | 
			
		|||
			Endpoint_Write_Byte(Dataflash_ReceiveByte());
 | 
			
		||||
			Endpoint_Write_Byte(Dataflash_ReceiveByte());
 | 
			
		||||
			Endpoint_Write_Byte(Dataflash_ReceiveByte());
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			/* Increment the Dataflash page 16 byte block counter */
 | 
			
		||||
			CurrDFPageByteDiv16++;
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			/* Increment the block 16 byte block counter */
 | 
			
		||||
			BytesInBlockDiv16++;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -271,11 +271,11 @@ void DataflashManager_ReadBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceInf
 | 
			
		|||
			if (MSInterfaceInfo->State.IsMassStoreReset)
 | 
			
		||||
			  return;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/* Decrement the blocks remaining counter */
 | 
			
		||||
		TotalBlocks--;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* If the endpoint is full, send its contents to the host */
 | 
			
		||||
	if (!(Endpoint_IsReadWriteAllowed()))
 | 
			
		||||
	  Endpoint_ClearIN();
 | 
			
		||||
| 
						 | 
				
			
			@ -315,11 +315,11 @@ void DataflashManager_WriteBlocks_RAM(const uint32_t BlockAddress,
 | 
			
		|||
	/* Send the Dataflash buffer write command */
 | 
			
		||||
	Dataflash_SendByte(DF_CMD_BUFF1WRITE);
 | 
			
		||||
	Dataflash_SendAddressBytes(0, CurrDFPageByte);
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	while (TotalBlocks)
 | 
			
		||||
	{
 | 
			
		||||
		uint8_t BytesInBlockDiv16 = 0;
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/* Write an endpoint packet sized data block to the Dataflash */
 | 
			
		||||
		while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4))
 | 
			
		||||
		{
 | 
			
		||||
| 
						 | 
				
			
			@ -359,18 +359,18 @@ void DataflashManager_WriteBlocks_RAM(const uint32_t BlockAddress,
 | 
			
		|||
				Dataflash_SendByte(DF_CMD_BUFF1WRITE);
 | 
			
		||||
				Dataflash_SendAddressBytes(0, 0);
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			/* Write one 16-byte chunk of data to the Dataflash */
 | 
			
		||||
			for (uint8_t ByteNum = 0; ByteNum < 16; ByteNum++)
 | 
			
		||||
			  Dataflash_SendByte(*(BufferPtr++));
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			/* Increment the Dataflash page 16 byte block counter */
 | 
			
		||||
			CurrDFPageByteDiv16++;
 | 
			
		||||
 | 
			
		||||
			/* Increment the block 16 byte block counter */
 | 
			
		||||
			BytesInBlockDiv16++;		
 | 
			
		||||
			BytesInBlockDiv16++;
 | 
			
		||||
		}
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
		/* Decrement the blocks remaining counter and reset the sub block counter */
 | 
			
		||||
		TotalBlocks--;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -416,7 +416,7 @@ void DataflashManager_ReadBlocks_RAM(const uint32_t BlockAddress,
 | 
			
		|||
	while (TotalBlocks)
 | 
			
		||||
	{
 | 
			
		||||
		uint8_t BytesInBlockDiv16 = 0;
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/* Write an endpoint packet sized data block to the Dataflash */
 | 
			
		||||
		while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4))
 | 
			
		||||
		{
 | 
			
		||||
| 
						 | 
				
			
			@ -429,7 +429,7 @@ void DataflashManager_ReadBlocks_RAM(const uint32_t BlockAddress,
 | 
			
		|||
 | 
			
		||||
				/* Select the next Dataflash chip based on the new Dataflash page index */
 | 
			
		||||
				Dataflash_SelectChipFromPage(CurrDFPage);
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
				/* Send the Dataflash main memory page read command */
 | 
			
		||||
				Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD);
 | 
			
		||||
				Dataflash_SendAddressBytes(CurrDFPage, 0);
 | 
			
		||||
| 
						 | 
				
			
			@ -437,19 +437,19 @@ void DataflashManager_ReadBlocks_RAM(const uint32_t BlockAddress,
 | 
			
		|||
				Dataflash_SendByte(0x00);
 | 
			
		||||
				Dataflash_SendByte(0x00);
 | 
			
		||||
				Dataflash_SendByte(0x00);
 | 
			
		||||
			}	
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			/* Read one 16-byte chunk of data from the Dataflash */
 | 
			
		||||
			for (uint8_t ByteNum = 0; ByteNum < 16; ByteNum++)
 | 
			
		||||
			  *(BufferPtr++) = Dataflash_ReceiveByte();
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			/* Increment the Dataflash page 16 byte block counter */
 | 
			
		||||
			CurrDFPageByteDiv16++;
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			/* Increment the block 16 byte block counter */
 | 
			
		||||
			BytesInBlockDiv16++;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/* Decrement the blocks remaining counter */
 | 
			
		||||
		TotalBlocks--;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -464,7 +464,7 @@ void DataflashManager_ResetDataflashProtections(void)
 | 
			
		|||
	/* Select first Dataflash chip, send the read status register command */
 | 
			
		||||
	Dataflash_SelectChip(DATAFLASH_CHIP1);
 | 
			
		||||
	Dataflash_SendByte(DF_CMD_GETSTATUS);
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Check if sector protection is enabled */
 | 
			
		||||
	if (Dataflash_ReceiveByte() & DF_STATUS_SECTORPROTECTION_ON)
 | 
			
		||||
	{
 | 
			
		||||
| 
						 | 
				
			
			@ -476,12 +476,12 @@ void DataflashManager_ResetDataflashProtections(void)
 | 
			
		|||
		Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[2]);
 | 
			
		||||
		Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[3]);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Select second Dataflash chip (if present on selected board), send read status register command */
 | 
			
		||||
	#if (DATAFLASH_TOTALCHIPS == 2)
 | 
			
		||||
	Dataflash_SelectChip(DATAFLASH_CHIP2);
 | 
			
		||||
	Dataflash_SendByte(DF_CMD_GETSTATUS);
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Check if sector protection is enabled */
 | 
			
		||||
	if (Dataflash_ReceiveByte() & DF_STATUS_SECTORPROTECTION_ON)
 | 
			
		||||
	{
 | 
			
		||||
| 
						 | 
				
			
			@ -494,7 +494,7 @@ void DataflashManager_ResetDataflashProtections(void)
 | 
			
		|||
		Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[3]);
 | 
			
		||||
	}
 | 
			
		||||
	#endif
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Deselect current Dataflash chip */
 | 
			
		||||
	Dataflash_DeselectChip();
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -528,6 +528,7 @@ bool DataflashManager_CheckDataflashOperation(void)
 | 
			
		|||
	if (ReturnByte != DF_MANUFACTURER_ATMEL)
 | 
			
		||||
	  return false;
 | 
			
		||||
	#endif
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -32,13 +32,13 @@
 | 
			
		|||
 *
 | 
			
		||||
 *  Header file for DataflashManager.c.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
#ifndef _DATAFLASH_MANAGER_H_
 | 
			
		||||
#define _DATAFLASH_MANAGER_H_
 | 
			
		||||
 | 
			
		||||
	/* Includes: */
 | 
			
		||||
		#include <avr/io.h>
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		#include "MassStorage.h"
 | 
			
		||||
		#include "Descriptors.h"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -60,12 +60,12 @@
 | 
			
		|||
		 *  storage media (Dataflash) using a different native block size. Do not change this value.
 | 
			
		||||
		 */
 | 
			
		||||
		#define VIRTUAL_MEMORY_BLOCK_SIZE           512
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/** Total number of blocks of the virtual memory for reporting to the host as the device's total capacity. Do not
 | 
			
		||||
		 *  change this value; change VIRTUAL_MEMORY_BYTES instead to alter the media size.
 | 
			
		||||
		 */
 | 
			
		||||
		#define VIRTUAL_MEMORY_BLOCKS               (VIRTUAL_MEMORY_BYTES / VIRTUAL_MEMORY_BLOCK_SIZE)
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	/* Function Prototypes: */
 | 
			
		||||
		void DataflashManager_WriteBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo,
 | 
			
		||||
		                                  const uint32_t BlockAddress,
 | 
			
		||||
| 
						 | 
				
			
			@ -81,5 +81,6 @@
 | 
			
		|||
		                                     uint8_t* BufferPtr) ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
		void DataflashManager_ResetDataflashProtections(void);
 | 
			
		||||
		bool DataflashManager_CheckDataflashOperation(void);
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -34,29 +34,29 @@
 | 
			
		|||
 *  devices use a thin "Bulk-Only Transport" protocol for issuing commands and status information,
 | 
			
		||||
 *  which wrap around standard SCSI device commands for controlling the actual storage medium.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
#define  INCLUDE_FROM_SCSI_C
 | 
			
		||||
#include "SCSI.h"
 | 
			
		||||
 | 
			
		||||
/** Structure to hold the SCSI response data to a SCSI INQUIRY command. This gives information about the device's
 | 
			
		||||
 *  features and capabilities.
 | 
			
		||||
 */
 | 
			
		||||
SCSI_Inquiry_Response_t InquiryData = 
 | 
			
		||||
SCSI_Inquiry_Response_t InquiryData =
 | 
			
		||||
	{
 | 
			
		||||
		.DeviceType          = DEVICE_TYPE_BLOCK,
 | 
			
		||||
		.PeripheralQualifier = 0,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
		.Removable           = true,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
		.Version             = 0,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
		.ResponseDataFormat  = 2,
 | 
			
		||||
		.NormACA             = false,
 | 
			
		||||
		.TrmTsk              = false,
 | 
			
		||||
		.AERC                = false,
 | 
			
		||||
 | 
			
		||||
		.AdditionalLength    = 0x1F,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
		.SoftReset           = false,
 | 
			
		||||
		.CmdQue              = false,
 | 
			
		||||
		.Linked              = false,
 | 
			
		||||
| 
						 | 
				
			
			@ -64,7 +64,7 @@ SCSI_Inquiry_Response_t InquiryData =
 | 
			
		|||
		.WideBus16Bit        = false,
 | 
			
		||||
		.WideBus32Bit        = false,
 | 
			
		||||
		.RelAddr             = false,
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		.VendorID            = "LUFA",
 | 
			
		||||
		.ProductID           = "Dataflash Disk",
 | 
			
		||||
		.RevisionID          = {'0','.','0','0'},
 | 
			
		||||
| 
						 | 
				
			
			@ -96,13 +96,13 @@ bool SCSI_DecodeSCSICommand(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)
 | 
			
		|||
	switch (MSInterfaceInfo->State.CommandBlock.SCSICommandData[0])
 | 
			
		||||
	{
 | 
			
		||||
		case SCSI_CMD_INQUIRY:
 | 
			
		||||
			CommandSuccess = SCSI_Command_Inquiry(MSInterfaceInfo);			
 | 
			
		||||
			CommandSuccess = SCSI_Command_Inquiry(MSInterfaceInfo);
 | 
			
		||||
			break;
 | 
			
		||||
		case SCSI_CMD_REQUEST_SENSE:
 | 
			
		||||
			CommandSuccess = SCSI_Command_Request_Sense(MSInterfaceInfo);
 | 
			
		||||
			break;
 | 
			
		||||
		case SCSI_CMD_READ_CAPACITY_10:
 | 
			
		||||
			CommandSuccess = SCSI_Command_Read_Capacity_10(MSInterfaceInfo);			
 | 
			
		||||
			CommandSuccess = SCSI_Command_Read_Capacity_10(MSInterfaceInfo);
 | 
			
		||||
			break;
 | 
			
		||||
		case SCSI_CMD_SEND_DIAGNOSTIC:
 | 
			
		||||
			CommandSuccess = SCSI_Command_Send_Diagnostic(MSInterfaceInfo);
 | 
			
		||||
| 
						 | 
				
			
			@ -134,7 +134,7 @@ bool SCSI_DecodeSCSICommand(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)
 | 
			
		|||
		SCSI_SET_SENSE(SCSI_SENSE_KEY_GOOD,
 | 
			
		||||
		               SCSI_ASENSE_NO_ADDITIONAL_INFORMATION,
 | 
			
		||||
		               SCSI_ASENSEQ_NO_QUALIFIER);
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -165,11 +165,11 @@ static bool SCSI_Command_Inquiry(USB_ClassInfo_MS_Device_t* const MSInterfaceInf
 | 
			
		|||
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	Endpoint_Write_Stream_LE(&InquiryData, BytesTransferred, NO_STREAM_CALLBACK);
 | 
			
		||||
 | 
			
		||||
	uint8_t PadBytes[AllocationLength - BytesTransferred];
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Pad out remaining bytes with 0x00 */
 | 
			
		||||
	Endpoint_Write_Stream_LE(&PadBytes, sizeof(PadBytes), NO_STREAM_CALLBACK);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -178,7 +178,7 @@ static bool SCSI_Command_Inquiry(USB_ClassInfo_MS_Device_t* const MSInterfaceInf
 | 
			
		|||
 | 
			
		||||
	/* Succeed the command and update the bytes transferred counter */
 | 
			
		||||
	MSInterfaceInfo->State.CommandBlock.DataTransferLength -= BytesTransferred;
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -193,7 +193,7 @@ static bool SCSI_Command_Request_Sense(USB_ClassInfo_MS_Device_t* const MSInterf
 | 
			
		|||
{
 | 
			
		||||
	uint8_t  AllocationLength = MSInterfaceInfo->State.CommandBlock.SCSICommandData[4];
 | 
			
		||||
	uint8_t  BytesTransferred = (AllocationLength < sizeof(SenseData))? AllocationLength : sizeof(SenseData);
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	uint8_t PadBytes[AllocationLength - BytesTransferred];
 | 
			
		||||
 | 
			
		||||
	Endpoint_Write_Stream_LE(&SenseData, BytesTransferred, NO_STREAM_CALLBACK);
 | 
			
		||||
| 
						 | 
				
			
			@ -221,10 +221,10 @@ static bool SCSI_Command_Read_Capacity_10(USB_ClassInfo_MS_Device_t* const MSInt
 | 
			
		|||
	Endpoint_Write_Stream_BE(&LastBlockAddressInLUN, sizeof(LastBlockAddressInLUN), NO_STREAM_CALLBACK);
 | 
			
		||||
	Endpoint_Write_Stream_BE(&MediaBlockSize, sizeof(MediaBlockSize), NO_STREAM_CALLBACK);
 | 
			
		||||
	Endpoint_ClearIN();
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Succeed the command and update the bytes transferred counter */
 | 
			
		||||
	MSInterfaceInfo->State.CommandBlock.DataTransferLength -= 8;
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -248,21 +248,21 @@ static bool SCSI_Command_Send_Diagnostic(USB_ClassInfo_MS_Device_t* const MSInte
 | 
			
		|||
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Check to see if all attached Dataflash ICs are functional */
 | 
			
		||||
	if (!(DataflashManager_CheckDataflashOperation()))
 | 
			
		||||
	{
 | 
			
		||||
		/* Update SENSE key with a hardware error condition and return command fail */
 | 
			
		||||
		SCSI_SET_SENSE(SCSI_SENSE_KEY_HARDWARE_ERROR,
 | 
			
		||||
		               SCSI_ASENSE_NO_ADDITIONAL_INFORMATION,
 | 
			
		||||
		               SCSI_ASENSEQ_NO_QUALIFIER);	
 | 
			
		||||
	
 | 
			
		||||
		               SCSI_ASENSEQ_NO_QUALIFIER);
 | 
			
		||||
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Succeed the command and update the bytes transferred counter */
 | 
			
		||||
	MSInterfaceInfo->State.CommandBlock.DataTransferLength = 0;
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -280,13 +280,13 @@ static bool SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_Device_t* const MSInterfa
 | 
			
		|||
{
 | 
			
		||||
	uint32_t BlockAddress;
 | 
			
		||||
	uint16_t TotalBlocks;
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Load in the 32-bit block address (SCSI uses big-endian, so have to reverse the byte order) */
 | 
			
		||||
	BlockAddress = SwapEndian_32(*(uint32_t*)&MSInterfaceInfo->State.CommandBlock.SCSICommandData[2]);
 | 
			
		||||
 | 
			
		||||
	/* Load in the 16-bit total blocks (SCSI uses big-endian, so have to reverse the byte order) */
 | 
			
		||||
	TotalBlocks  = SwapEndian_16(*(uint16_t*)&MSInterfaceInfo->State.CommandBlock.SCSICommandData[7]);
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Check if the block address is outside the maximum allowable value for the LUN */
 | 
			
		||||
	if (BlockAddress >= LUN_MEDIA_BLOCKS)
 | 
			
		||||
	{
 | 
			
		||||
| 
						 | 
				
			
			@ -302,7 +302,7 @@ static bool SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_Device_t* const MSInterfa
 | 
			
		|||
	/* Adjust the given block address to the real media address based on the selected LUN */
 | 
			
		||||
	BlockAddress += ((uint32_t)MSInterfaceInfo->State.CommandBlock.LUN * LUN_MEDIA_BLOCKS);
 | 
			
		||||
	#endif
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Determine if the packet is a READ (10) or WRITE (10) command, call appropriate function */
 | 
			
		||||
	if (IsDataRead == DATA_READ)
 | 
			
		||||
	  DataflashManager_ReadBlocks(MSInterfaceInfo, BlockAddress, TotalBlocks);
 | 
			
		||||
| 
						 | 
				
			
			@ -311,6 +311,7 @@ static bool SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_Device_t* const MSInterfa
 | 
			
		|||
 | 
			
		||||
	/* Update the bytes transferred counter and succeed the command */
 | 
			
		||||
	MSInterfaceInfo->State.CommandBlock.DataTransferLength -= ((uint32_t)TotalBlocks * VIRTUAL_MEMORY_BLOCK_SIZE);
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -32,7 +32,7 @@
 | 
			
		|||
 *
 | 
			
		||||
 *  Header file for SCSI.c.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
#ifndef _SCSI_H_
 | 
			
		||||
#define _SCSI_H_
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -46,7 +46,7 @@
 | 
			
		|||
		#include "MassStorage.h"
 | 
			
		||||
		#include "Descriptors.h"
 | 
			
		||||
		#include "DataflashManager.h"
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Macros: */
 | 
			
		||||
		/** Macro to set the current SCSI sense data to the given key, additional sense code and additional sense qualifier. This
 | 
			
		||||
		 *  is for convenience, as it allows for all three sense values (returned upon request to the host to give information about
 | 
			
		||||
| 
						 | 
				
			
			@ -68,13 +68,13 @@
 | 
			
		|||
 | 
			
		||||
		/** Value for the DeviceType entry in the SCSI_Inquiry_Response_t enum, indicating a Block Media device. */
 | 
			
		||||
		#define DEVICE_TYPE_BLOCK   0x00
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/** Value for the DeviceType entry in the SCSI_Inquiry_Response_t enum, indicating a CD-ROM device. */
 | 
			
		||||
		#define DEVICE_TYPE_CDROM   0x05
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	/* Function Prototypes: */
 | 
			
		||||
		bool SCSI_DecodeSCSICommand(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo);
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		#if defined(INCLUDE_FROM_SCSI_C)
 | 
			
		||||
			static bool SCSI_Command_Inquiry(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo);
 | 
			
		||||
			static bool SCSI_Command_Request_Sense(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo);
 | 
			
		||||
| 
						 | 
				
			
			@ -83,5 +83,6 @@
 | 
			
		|||
			static bool SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo,
 | 
			
		||||
			                                      const bool IsDataRead);
 | 
			
		||||
		#endif
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -130,10 +130,11 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
 | 
			
		|||
bool CALLBACK_MS_Device_SCSICommandReceived(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)
 | 
			
		||||
{
 | 
			
		||||
	bool CommandSuccess;
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	LEDs_SetAllLEDs(LEDMASK_USB_BUSY);
 | 
			
		||||
	CommandSuccess = SCSI_DecodeSCSICommand(MSInterfaceInfo);
 | 
			
		||||
	LEDs_SetAllLEDs(LEDMASK_USB_READY);
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	return CommandSuccess;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -68,13 +68,13 @@
 | 
			
		|||
 | 
			
		||||
		/** LED mask for the library LED driver, to indicate that the USB interface is busy. */
 | 
			
		||||
		#define LEDMASK_USB_BUSY          LEDS_LED2
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/** Total number of logical drives within the device - must be non-zero. */
 | 
			
		||||
		#define TOTAL_LUNS                1
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/** Blocks in each LUN, calculated from the total capacity divided by the total number of Logical Units in the device. */
 | 
			
		||||
		#define LUN_MEDIA_BLOCKS         (VIRTUAL_MEMORY_BLOCKS / TOTAL_LUNS)
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	/* Function Prototypes: */
 | 
			
		||||
		void SetupHardware(void);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -86,3 +86,4 @@
 | 
			
		|||
		bool CALLBACK_MS_Device_SCSICommandReceived(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,7 +3,7 @@
 | 
			
		|||
 *  This file contains special DoxyGen information for the generation of the main page and other special
 | 
			
		||||
 *  documentation pages. It is not a project source file.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
/** \mainpage Mass Storage Device Demo
 | 
			
		||||
 *
 | 
			
		||||
 *  \section SSec_Compat Demo Compatibility:
 | 
			
		||||
| 
						 | 
				
			
			@ -28,7 +28,7 @@
 | 
			
		|||
 *    <td><b>USB Class:</b></td>
 | 
			
		||||
 *    <td>Mass Storage Device</td>
 | 
			
		||||
 *   </tr>
 | 
			
		||||
 *   <tr> 
 | 
			
		||||
 *   <tr>
 | 
			
		||||
 *    <td><b>USB Subclass:</b></td>
 | 
			
		||||
 *    <td>Bulk-Only Transport</td>
 | 
			
		||||
 *   </tr>
 | 
			
		||||
| 
						 | 
				
			
			@ -45,23 +45,23 @@
 | 
			
		|||
 *   </tr>
 | 
			
		||||
 *  </table>
 | 
			
		||||
 *
 | 
			
		||||
 *  \section SSec_Description Project Description: 
 | 
			
		||||
 *  \section SSec_Description Project Description:
 | 
			
		||||
 *
 | 
			
		||||
 *  Dual LUN Mass Storage demonstration application. This gives a simple
 | 
			
		||||
 *  reference application for implementing a multiple LUN USB Mass Storage
 | 
			
		||||
 *  device using the basic USB UFI drivers in all modern OSes (i.e. no
 | 
			
		||||
 *  special drivers required).
 | 
			
		||||
 *  
 | 
			
		||||
 *
 | 
			
		||||
 *  On start-up the system will automatically enumerate and function as an
 | 
			
		||||
 *  external mass storage device with two LUNs (separate disks) which may
 | 
			
		||||
 *  be formatted and used in the same manner as commercial USB Mass Storage
 | 
			
		||||
 *  devices.
 | 
			
		||||
 *  	
 | 
			
		||||
 *
 | 
			
		||||
 *  You will need to format the mass storage drives upon first run of this
 | 
			
		||||
 *  demonstration - as the device acts only as a data block transport between
 | 
			
		||||
 *  the host and the storage media, it does not matter what file system is used,
 | 
			
		||||
 *  as the data interpretation is performed by the host and not the USB device.
 | 
			
		||||
 *  
 | 
			
		||||
 *
 | 
			
		||||
 *  This demo is not restricted to only two LUNs; by changing the TOTAL_LUNS
 | 
			
		||||
 *  value in MassStorageDualLUN.h, any number of LUNs can be used (from 1 to
 | 
			
		||||
 *  255), with each LUN being allocated an equal portion of the available
 | 
			
		||||
| 
						 | 
				
			
			@ -90,3 +90,4 @@
 | 
			
		|||
 *   </tr>
 | 
			
		||||
 *  </table>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,7 +47,7 @@
 | 
			
		|||
# make doxygen = Generate DoxyGen documentation for the project (must have
 | 
			
		||||
#                DoxyGen installed)
 | 
			
		||||
#
 | 
			
		||||
# make debug = Start either simulavr or avarice as specified for debugging, 
 | 
			
		||||
# make debug = Start either simulavr or avarice as specified for debugging,
 | 
			
		||||
#              with avr-gdb or avr-insight as the front end for debugging.
 | 
			
		||||
#
 | 
			
		||||
# make filename.s = Just compile filename.c into the assembler code only.
 | 
			
		||||
| 
						 | 
				
			
			@ -64,14 +64,14 @@ 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 
 | 
			
		||||
# LUFA board drivers). If USER is selected, put custom board drivers in a directory called
 | 
			
		||||
# "Board" inside the application directory.
 | 
			
		||||
BOARD = USBKEY
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Processor frequency.
 | 
			
		||||
#     This will define a symbol, F_CPU, in all source code files equal to the 
 | 
			
		||||
#     processor frequency in Hz. You can then use this symbol in your source code to 
 | 
			
		||||
#     This will define a symbol, F_CPU, in all source code files equal to the
 | 
			
		||||
#     processor frequency in Hz. You can then use this symbol in your source code to
 | 
			
		||||
#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
 | 
			
		||||
#     automatically to create a 32-bit value in your source code.
 | 
			
		||||
#
 | 
			
		||||
| 
						 | 
				
			
			@ -84,7 +84,7 @@ F_CPU = 8000000
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Input clock frequency.
 | 
			
		||||
#     This will define a symbol, F_CLOCK, in all source code files equal to the 
 | 
			
		||||
#     This will define a symbol, F_CLOCK, in all source code files equal to the
 | 
			
		||||
#     input clock frequency (before any prescaling is performed) in Hz. This value may
 | 
			
		||||
#     differ from F_CPU if prescaling is used on the latter, and is required as the
 | 
			
		||||
#     raw input clock is fed directly to the PLL sections of the AVR for high speed
 | 
			
		||||
| 
						 | 
				
			
			@ -138,7 +138,7 @@ SRC = $(TARGET).c                                                 \
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# List C++ source files here. (C dependencies are automatically generated.)
 | 
			
		||||
CPPSRC = 
 | 
			
		||||
CPPSRC =
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# List Assembler source files here.
 | 
			
		||||
| 
						 | 
				
			
			@ -151,7 +151,7 @@ CPPSRC =
 | 
			
		|||
ASRC =
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Optimization level, can be [0, 1, 2, 3, s]. 
 | 
			
		||||
# Optimization level, can be [0, 1, 2, 3, s].
 | 
			
		||||
#     0 = turn off optimization. s = optimize for size.
 | 
			
		||||
#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
 | 
			
		||||
OPT = s
 | 
			
		||||
| 
						 | 
				
			
			@ -265,7 +265,7 @@ CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
 | 
			
		|||
#             for use in COFF files, additional information about filenames
 | 
			
		||||
#             and function names needs to be present in the assembler source
 | 
			
		||||
#             files -- see avr-libc docs [FIXME: not yet described there]
 | 
			
		||||
#  -listing-cont-lines: Sets the maximum number of continuation lines of hex 
 | 
			
		||||
#  -listing-cont-lines: Sets the maximum number of continuation lines of hex
 | 
			
		||||
#       dump that will be displayed for a given single line of source input.
 | 
			
		||||
ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -278,7 +278,7 @@ PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
 | 
			
		|||
PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
 | 
			
		||||
 | 
			
		||||
# If this is left blank, then it will use the Standard printf version.
 | 
			
		||||
PRINTF_LIB = 
 | 
			
		||||
PRINTF_LIB =
 | 
			
		||||
#PRINTF_LIB = $(PRINTF_LIB_MIN)
 | 
			
		||||
#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -290,7 +290,7 @@ SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
 | 
			
		|||
SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
 | 
			
		||||
 | 
			
		||||
# If this is left blank, then it will use the Standard scanf version.
 | 
			
		||||
SCANF_LIB = 
 | 
			
		||||
SCANF_LIB =
 | 
			
		||||
#SCANF_LIB = $(SCANF_LIB_MIN)
 | 
			
		||||
#SCANF_LIB = $(SCANF_LIB_FLOAT)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -302,7 +302,7 @@ MATH_LIB = -lm
 | 
			
		|||
#     Each directory must be seperated by a space.
 | 
			
		||||
#     Use forward slashes for directory separators.
 | 
			
		||||
#     For a directory that has spaces, enclose it in quotes.
 | 
			
		||||
EXTRALIBDIRS = 
 | 
			
		||||
EXTRALIBDIRS =
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -325,7 +325,7 @@ EXTMEMOPTS =
 | 
			
		|||
#    -Map:      create map file
 | 
			
		||||
#    --cref:    add cross reference to  map file
 | 
			
		||||
LDFLAGS  = -Wl,-Map=$(TARGET).map,--cref
 | 
			
		||||
LDFLAGS += -Wl,--relax 
 | 
			
		||||
LDFLAGS += -Wl,--relax
 | 
			
		||||
LDFLAGS += -Wl,--gc-sections
 | 
			
		||||
LDFLAGS += $(EXTMEMOPTS)
 | 
			
		||||
LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))
 | 
			
		||||
| 
						 | 
				
			
			@ -359,7 +359,7 @@ AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
 | 
			
		|||
#AVRDUDE_NO_VERIFY = -V
 | 
			
		||||
 | 
			
		||||
# Increase verbosity level.  Please use this when submitting bug
 | 
			
		||||
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
 | 
			
		||||
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
 | 
			
		||||
# to submit bug reports.
 | 
			
		||||
#AVRDUDE_VERBOSE = -v -v
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -393,7 +393,7 @@ JTAG_DEV = /dev/com1
 | 
			
		|||
DEBUG_PORT = 4242
 | 
			
		||||
 | 
			
		||||
# Debugging host used to communicate between GDB / avarice / simulavr, normally
 | 
			
		||||
#     just set to localhost unless doing some sort of crazy debugging when 
 | 
			
		||||
#     just set to localhost unless doing some sort of crazy debugging when
 | 
			
		||||
#     avarice is running on a different computer.
 | 
			
		||||
DEBUG_HOST = localhost
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -422,7 +422,7 @@ WINSHELL = cmd
 | 
			
		|||
MSG_ERRORS_NONE = Errors: none
 | 
			
		||||
MSG_BEGIN = -------- begin --------
 | 
			
		||||
MSG_END = --------  end  --------
 | 
			
		||||
MSG_SIZE_BEFORE = Size before: 
 | 
			
		||||
MSG_SIZE_BEFORE = Size before:
 | 
			
		||||
MSG_SIZE_AFTER = Size after:
 | 
			
		||||
MSG_COFF = Converting to AVR COFF:
 | 
			
		||||
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
 | 
			
		||||
| 
						 | 
				
			
			@ -441,10 +441,10 @@ MSG_CREATING_LIBRARY = Creating library:
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Define all object files.
 | 
			
		||||
OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) 
 | 
			
		||||
OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o)
 | 
			
		||||
 | 
			
		||||
# Define all listing files.
 | 
			
		||||
LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) 
 | 
			
		||||
LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Compiler flags to generate dependency files.
 | 
			
		||||
| 
						 | 
				
			
			@ -509,11 +509,11 @@ sizeafter:
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Display compiler version information.
 | 
			
		||||
gccversion : 
 | 
			
		||||
gccversion :
 | 
			
		||||
	@$(CC) --version
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Program the device.  
 | 
			
		||||
# Program the device.
 | 
			
		||||
program: $(TARGET).hex $(TARGET).eep
 | 
			
		||||
	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -540,9 +540,9 @@ dfu-ee: $(TARGET).hex $(TARGET).eep
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Generate avr-gdb config/init file which does the following:
 | 
			
		||||
#     define the reset signal, load the target file, connect to target, and set 
 | 
			
		||||
#     define the reset signal, load the target file, connect to target, and set
 | 
			
		||||
#     a breakpoint at main().
 | 
			
		||||
gdb-config: 
 | 
			
		||||
gdb-config:
 | 
			
		||||
	@$(REMOVE) $(GDBINIT_FILE)
 | 
			
		||||
	@echo define reset >> $(GDBINIT_FILE)
 | 
			
		||||
	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
 | 
			
		||||
| 
						 | 
				
			
			@ -640,14 +640,14 @@ extcoff: $(TARGET).elf
 | 
			
		|||
$(OBJDIR)/%.o : %.c
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo $(MSG_COMPILING) $<
 | 
			
		||||
	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
 | 
			
		||||
	$(CC) -c $(ALL_CFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Compile: create object files from C++ source files.
 | 
			
		||||
$(OBJDIR)/%.o : %.cpp
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo $(MSG_COMPILING_CPP) $<
 | 
			
		||||
	$(CC) -c $(ALL_CPPFLAGS) $< -o $@ 
 | 
			
		||||
	$(CC) -c $(ALL_CPPFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Compile: create assembler files from C source files.
 | 
			
		||||
| 
						 | 
				
			
			@ -669,7 +669,7 @@ $(OBJDIR)/%.o : %.S
 | 
			
		|||
 | 
			
		||||
# Create preprocessed source for use in sending a bug report.
 | 
			
		||||
%.i : %.c
 | 
			
		||||
	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
 | 
			
		||||
	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Target: clean project.
 | 
			
		||||
| 
						 | 
				
			
			@ -713,3 +713,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null)
 | 
			
		|||
build elf hex eep lss sym coff extcoff doxygen clean          \
 | 
			
		||||
clean_list clean_doxygen program dfu flip flip-ee dfu-ee      \
 | 
			
		||||
debug gdb-config
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -10,13 +10,13 @@
 | 
			
		|||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
  Copyright 2010  Matthias Hullin (lufa [at] matthias [dot] hullin [dot] net)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -31,9 +31,9 @@
 | 
			
		|||
 | 
			
		||||
/** \file
 | 
			
		||||
 *
 | 
			
		||||
 *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special 
 | 
			
		||||
 *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special
 | 
			
		||||
 *  computer-readable structures which the host requests upon device enumeration, to determine
 | 
			
		||||
 *  the device's capabilities and functions.  
 | 
			
		||||
 *  the device's capabilities and functions.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "Descriptors.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -100,22 +100,22 @@ USB_Descriptor_HIDReport_Datatype_t PROGMEM KeyboardReport[] =
 | 
			
		|||
USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
 | 
			
		||||
{
 | 
			
		||||
	.Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.USBSpecification       = VERSION_BCD(01.10),
 | 
			
		||||
	.Class                  = 0x00,
 | 
			
		||||
	.SubClass               = 0x00,
 | 
			
		||||
	.Protocol               = 0x00,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
	.Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.VendorID               = 0x03EB,
 | 
			
		||||
	.ProductID              = 0x2061,
 | 
			
		||||
	.ReleaseNumber          = VERSION_BCD(00.01),
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.ManufacturerStrIndex   = 0x01,
 | 
			
		||||
	.ProductStrIndex        = 0x02,
 | 
			
		||||
	.SerialNumStrIndex      = USE_INTERNAL_SERIAL,
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -126,38 +126,38 @@ USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
 | 
			
		|||
 */
 | 
			
		||||
USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		||||
{
 | 
			
		||||
	.Config = 
 | 
			
		||||
	.Config =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},
 | 
			
		||||
 | 
			
		||||
			.TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),
 | 
			
		||||
			.TotalInterfaces        = 2,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.ConfigurationNumber    = 1,
 | 
			
		||||
			.ConfigurationStrIndex  = NO_DESCRIPTOR,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.ConfigAttributes       = USB_CONFIG_ATTR_BUSPOWERED,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)
 | 
			
		||||
		},
 | 
			
		||||
		
 | 
			
		||||
	.MS_Interface = 
 | 
			
		||||
 | 
			
		||||
	.MS_Interface =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 | 
			
		||||
 | 
			
		||||
			.InterfaceNumber        = 0,
 | 
			
		||||
			.AlternateSetting       = 0,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.TotalEndpoints         = 2,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.Class                  = 0x08,
 | 
			
		||||
			.SubClass               = 0x06,
 | 
			
		||||
			.Protocol               = 0x50,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.InterfaceStrIndex      = NO_DESCRIPTOR
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.MS_DataInEndpoint = 
 | 
			
		||||
	.MS_DataInEndpoint =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -167,7 +167,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		|||
			.PollingIntervalMS      = 0x00
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.MS_DataOutEndpoint = 
 | 
			
		||||
	.MS_DataOutEndpoint =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -177,34 +177,34 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		|||
			.PollingIntervalMS      = 0x00
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.HID_KeyboardInterface = 
 | 
			
		||||
	.HID_KeyboardInterface =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 | 
			
		||||
 | 
			
		||||
			.InterfaceNumber        = 1,
 | 
			
		||||
			.AlternateSetting       = 0,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.TotalEndpoints         = 1,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.Class                  = 0x03,
 | 
			
		||||
			.SubClass               = 0x01,
 | 
			
		||||
			.Protocol               = HID_BOOTP_KeyboardBootProtocol,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.InterfaceStrIndex      = NO_DESCRIPTOR
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.HID_KeyboardHID = 
 | 
			
		||||
		{  
 | 
			
		||||
	.HID_KeyboardHID =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID},
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.HIDSpec                = VERSION_BCD(01.11),
 | 
			
		||||
			.CountryCode            = 0x00,
 | 
			
		||||
			.TotalReportDescriptors = 1,
 | 
			
		||||
			.HIDReportType          = HID_DTYPE_Report,
 | 
			
		||||
			.HIDReportLength        = sizeof(KeyboardReport)
 | 
			
		||||
		},
 | 
			
		||||
		
 | 
			
		||||
	.HID_ReportINEndpoint = 
 | 
			
		||||
 | 
			
		||||
	.HID_ReportINEndpoint =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -222,7 +222,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		|||
USB_Descriptor_String_t PROGMEM LanguageString =
 | 
			
		||||
{
 | 
			
		||||
	.Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.UnicodeString          = {LANGUAGE_ID_ENG}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -233,7 +233,7 @@ USB_Descriptor_String_t PROGMEM LanguageString =
 | 
			
		|||
USB_Descriptor_String_t PROGMEM ManufacturerString =
 | 
			
		||||
{
 | 
			
		||||
	.Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.UnicodeString          = L"Dean Camera"
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -244,7 +244,7 @@ USB_Descriptor_String_t PROGMEM ManufacturerString =
 | 
			
		|||
USB_Descriptor_String_t PROGMEM ProductString =
 | 
			
		||||
{
 | 
			
		||||
	.Header                 = {.Size = USB_STRING_LEN(35), .Type = DTYPE_String},
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.UnicodeString          = L"LUFA Mass Storage and Keyboard Demo"
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -266,31 +266,31 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		|||
 | 
			
		||||
	switch (DescriptorType)
 | 
			
		||||
	{
 | 
			
		||||
		case DTYPE_Device: 
 | 
			
		||||
		case DTYPE_Device:
 | 
			
		||||
			Address = &DeviceDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Configuration: 
 | 
			
		||||
		case DTYPE_Configuration:
 | 
			
		||||
			Address = &ConfigurationDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_String: 
 | 
			
		||||
		case DTYPE_String:
 | 
			
		||||
			switch (DescriptorNumber)
 | 
			
		||||
			{
 | 
			
		||||
				case 0x00: 
 | 
			
		||||
				case 0x00:
 | 
			
		||||
					Address = &LanguageString;
 | 
			
		||||
					Size    = pgm_read_byte(&LanguageString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x01: 
 | 
			
		||||
				case 0x01:
 | 
			
		||||
					Address = &ManufacturerString;
 | 
			
		||||
					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x02: 
 | 
			
		||||
				case 0x02:
 | 
			
		||||
					Address = &ProductString;
 | 
			
		||||
					Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			break;
 | 
			
		||||
		case HID_DTYPE_HID:
 | 
			
		||||
			Address = &ConfigurationDescriptor.HID_KeyboardHID;
 | 
			
		||||
| 
						 | 
				
			
			@ -301,7 +301,8 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		|||
			Size    = sizeof(KeyboardReport);
 | 
			
		||||
			break;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	*DescriptorAddress = Address;
 | 
			
		||||
	return Size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -10,13 +10,13 @@
 | 
			
		|||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
  Copyright 2010  Matthias Hullin (lufa [at] matthias [dot] hullin [dot] net)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -33,7 +33,7 @@
 | 
			
		|||
 *
 | 
			
		||||
 *  Header file for Descriptors.c.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
#ifndef _DESCRIPTORS_H_
 | 
			
		||||
#define _DESCRIPTORS_H_
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -47,20 +47,20 @@
 | 
			
		|||
	/* Macros: */
 | 
			
		||||
		/** Endpoint number of the Keyboard HID reporting IN endpoint. */
 | 
			
		||||
		#define KEYBOARD_EPNUM               1
 | 
			
		||||
		
 | 
			
		||||
		/** Size in bytes of the Keyboard HID reporting IN and OUT endpoints. */		
 | 
			
		||||
 | 
			
		||||
		/** Size in bytes of the Keyboard HID reporting IN and OUT endpoints. */
 | 
			
		||||
		#define KEYBOARD_EPSIZE              8
 | 
			
		||||
 | 
			
		||||
		/** Endpoint number of the Mass Storage device-to-host data IN endpoint. */
 | 
			
		||||
		#define MASS_STORAGE_IN_EPNUM        3	
 | 
			
		||||
		#define MASS_STORAGE_IN_EPNUM        3
 | 
			
		||||
 | 
			
		||||
		/** Endpoint number of the Mass Storage host-to-device data OUT endpoint. */
 | 
			
		||||
		#define MASS_STORAGE_OUT_EPNUM       4	
 | 
			
		||||
		#define MASS_STORAGE_OUT_EPNUM       4
 | 
			
		||||
 | 
			
		||||
		/** Size in bytes of the Mass Storage data endpoints. */
 | 
			
		||||
		#define MASS_STORAGE_IO_EPSIZE       64
 | 
			
		||||
		
 | 
			
		||||
	/* Type Defines: */		
 | 
			
		||||
 | 
			
		||||
	/* Type Defines: */
 | 
			
		||||
		/** Type define for the device configuration descriptor structure. This must be defined in the
 | 
			
		||||
		 *  application code, as the configuration descriptor contains several sub-descriptors which
 | 
			
		||||
		 *  vary between devices, and which describe the device's usage to the host.
 | 
			
		||||
| 
						 | 
				
			
			@ -75,7 +75,7 @@
 | 
			
		|||
			USB_HID_Descriptor_HID_t              HID_KeyboardHID;
 | 
			
		||||
	        USB_Descriptor_Endpoint_t             HID_ReportINEndpoint;
 | 
			
		||||
		} USB_Descriptor_Configuration_t;
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	/* Function Prototypes: */
 | 
			
		||||
		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		||||
		                                    const uint8_t wIndex,
 | 
			
		||||
| 
						 | 
				
			
			@ -83,3 +83,4 @@
 | 
			
		|||
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -77,7 +77,7 @@ void DataflashManager_WriteBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceIn
 | 
			
		|||
	while (TotalBlocks)
 | 
			
		||||
	{
 | 
			
		||||
		uint8_t BytesInBlockDiv16 = 0;
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/* Write an endpoint packet sized data block to the Dataflash */
 | 
			
		||||
		while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4))
 | 
			
		||||
		{
 | 
			
		||||
| 
						 | 
				
			
			@ -86,7 +86,7 @@ void DataflashManager_WriteBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceIn
 | 
			
		|||
			{
 | 
			
		||||
				/* Clear the current endpoint bank */
 | 
			
		||||
				Endpoint_ClearOUT();
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
				/* Wait until the host has sent another packet */
 | 
			
		||||
				if (Endpoint_WaitUntilReady())
 | 
			
		||||
				  return;
 | 
			
		||||
| 
						 | 
				
			
			@ -125,7 +125,7 @@ void DataflashManager_WriteBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceIn
 | 
			
		|||
 | 
			
		||||
				/* Send the Dataflash buffer write command */
 | 
			
		||||
				Dataflash_SendByte(UsingSecondBuffer ? DF_CMD_BUFF2WRITE : DF_CMD_BUFF1WRITE);
 | 
			
		||||
				Dataflash_SendAddressBytes(0, 0);				
 | 
			
		||||
				Dataflash_SendAddressBytes(0, 0);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			/* Write one 16-byte chunk of data to the Dataflash */
 | 
			
		||||
| 
						 | 
				
			
			@ -145,7 +145,7 @@ void DataflashManager_WriteBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceIn
 | 
			
		|||
			Dataflash_SendByte(Endpoint_Read_Byte());
 | 
			
		||||
			Dataflash_SendByte(Endpoint_Read_Byte());
 | 
			
		||||
			Dataflash_SendByte(Endpoint_Read_Byte());
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			/* Increment the Dataflash page 16 byte block counter */
 | 
			
		||||
			CurrDFPageByteDiv16++;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -154,9 +154,9 @@ void DataflashManager_WriteBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceIn
 | 
			
		|||
 | 
			
		||||
			/* Check if the current command is being aborted by the host */
 | 
			
		||||
			if (MSInterfaceInfo->State.IsMassStoreReset)
 | 
			
		||||
			  return;			
 | 
			
		||||
			  return;
 | 
			
		||||
		}
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
		/* Decrement the blocks remaining counter and reset the sub block counter */
 | 
			
		||||
		TotalBlocks--;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -201,15 +201,15 @@ void DataflashManager_ReadBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceInf
 | 
			
		|||
	Dataflash_SendByte(0x00);
 | 
			
		||||
	Dataflash_SendByte(0x00);
 | 
			
		||||
	Dataflash_SendByte(0x00);
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Wait until endpoint is ready before continuing */
 | 
			
		||||
	if (Endpoint_WaitUntilReady())
 | 
			
		||||
	  return;
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	while (TotalBlocks)
 | 
			
		||||
	{
 | 
			
		||||
		uint8_t BytesInBlockDiv16 = 0;
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/* Write an endpoint packet sized data block to the Dataflash */
 | 
			
		||||
		while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4))
 | 
			
		||||
		{
 | 
			
		||||
| 
						 | 
				
			
			@ -218,12 +218,12 @@ void DataflashManager_ReadBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceInf
 | 
			
		|||
			{
 | 
			
		||||
				/* Clear the endpoint bank to send its contents to the host */
 | 
			
		||||
				Endpoint_ClearIN();
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
				/* Wait until the endpoint is ready for more data */
 | 
			
		||||
				if (Endpoint_WaitUntilReady())
 | 
			
		||||
				  return;
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			/* Check if end of Dataflash page reached */
 | 
			
		||||
			if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4))
 | 
			
		||||
			{
 | 
			
		||||
| 
						 | 
				
			
			@ -233,7 +233,7 @@ void DataflashManager_ReadBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceInf
 | 
			
		|||
 | 
			
		||||
				/* Select the next Dataflash chip based on the new Dataflash page index */
 | 
			
		||||
				Dataflash_SelectChipFromPage(CurrDFPage);
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
				/* Send the Dataflash main memory page read command */
 | 
			
		||||
				Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD);
 | 
			
		||||
				Dataflash_SendAddressBytes(CurrDFPage, 0);
 | 
			
		||||
| 
						 | 
				
			
			@ -241,7 +241,7 @@ void DataflashManager_ReadBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceInf
 | 
			
		|||
				Dataflash_SendByte(0x00);
 | 
			
		||||
				Dataflash_SendByte(0x00);
 | 
			
		||||
				Dataflash_SendByte(0x00);
 | 
			
		||||
			}	
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			/* Read one 16-byte chunk of data from the Dataflash */
 | 
			
		||||
			Endpoint_Write_Byte(Dataflash_ReceiveByte());
 | 
			
		||||
| 
						 | 
				
			
			@ -260,10 +260,10 @@ void DataflashManager_ReadBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceInf
 | 
			
		|||
			Endpoint_Write_Byte(Dataflash_ReceiveByte());
 | 
			
		||||
			Endpoint_Write_Byte(Dataflash_ReceiveByte());
 | 
			
		||||
			Endpoint_Write_Byte(Dataflash_ReceiveByte());
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			/* Increment the Dataflash page 16 byte block counter */
 | 
			
		||||
			CurrDFPageByteDiv16++;
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			/* Increment the block 16 byte block counter */
 | 
			
		||||
			BytesInBlockDiv16++;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -271,11 +271,11 @@ void DataflashManager_ReadBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceInf
 | 
			
		|||
			if (MSInterfaceInfo->State.IsMassStoreReset)
 | 
			
		||||
			  return;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/* Decrement the blocks remaining counter */
 | 
			
		||||
		TotalBlocks--;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* If the endpoint is full, send its contents to the host */
 | 
			
		||||
	if (!(Endpoint_IsReadWriteAllowed()))
 | 
			
		||||
	  Endpoint_ClearIN();
 | 
			
		||||
| 
						 | 
				
			
			@ -315,11 +315,11 @@ void DataflashManager_WriteBlocks_RAM(const uint32_t BlockAddress,
 | 
			
		|||
	/* Send the Dataflash buffer write command */
 | 
			
		||||
	Dataflash_SendByte(DF_CMD_BUFF1WRITE);
 | 
			
		||||
	Dataflash_SendAddressBytes(0, CurrDFPageByte);
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	while (TotalBlocks)
 | 
			
		||||
	{
 | 
			
		||||
		uint8_t BytesInBlockDiv16 = 0;
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/* Write an endpoint packet sized data block to the Dataflash */
 | 
			
		||||
		while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4))
 | 
			
		||||
		{
 | 
			
		||||
| 
						 | 
				
			
			@ -359,18 +359,18 @@ void DataflashManager_WriteBlocks_RAM(const uint32_t BlockAddress,
 | 
			
		|||
				Dataflash_SendByte(DF_CMD_BUFF1WRITE);
 | 
			
		||||
				Dataflash_SendAddressBytes(0, 0);
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			/* Write one 16-byte chunk of data to the Dataflash */
 | 
			
		||||
			for (uint8_t ByteNum = 0; ByteNum < 16; ByteNum++)
 | 
			
		||||
			  Dataflash_SendByte(*(BufferPtr++));
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			/* Increment the Dataflash page 16 byte block counter */
 | 
			
		||||
			CurrDFPageByteDiv16++;
 | 
			
		||||
 | 
			
		||||
			/* Increment the block 16 byte block counter */
 | 
			
		||||
			BytesInBlockDiv16++;		
 | 
			
		||||
			BytesInBlockDiv16++;
 | 
			
		||||
		}
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
		/* Decrement the blocks remaining counter and reset the sub block counter */
 | 
			
		||||
		TotalBlocks--;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -416,7 +416,7 @@ void DataflashManager_ReadBlocks_RAM(const uint32_t BlockAddress,
 | 
			
		|||
	while (TotalBlocks)
 | 
			
		||||
	{
 | 
			
		||||
		uint8_t BytesInBlockDiv16 = 0;
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/* Write an endpoint packet sized data block to the Dataflash */
 | 
			
		||||
		while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4))
 | 
			
		||||
		{
 | 
			
		||||
| 
						 | 
				
			
			@ -429,7 +429,7 @@ void DataflashManager_ReadBlocks_RAM(const uint32_t BlockAddress,
 | 
			
		|||
 | 
			
		||||
				/* Select the next Dataflash chip based on the new Dataflash page index */
 | 
			
		||||
				Dataflash_SelectChipFromPage(CurrDFPage);
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
				/* Send the Dataflash main memory page read command */
 | 
			
		||||
				Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD);
 | 
			
		||||
				Dataflash_SendAddressBytes(CurrDFPage, 0);
 | 
			
		||||
| 
						 | 
				
			
			@ -437,19 +437,19 @@ void DataflashManager_ReadBlocks_RAM(const uint32_t BlockAddress,
 | 
			
		|||
				Dataflash_SendByte(0x00);
 | 
			
		||||
				Dataflash_SendByte(0x00);
 | 
			
		||||
				Dataflash_SendByte(0x00);
 | 
			
		||||
			}	
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			/* Read one 16-byte chunk of data from the Dataflash */
 | 
			
		||||
			for (uint8_t ByteNum = 0; ByteNum < 16; ByteNum++)
 | 
			
		||||
			  *(BufferPtr++) = Dataflash_ReceiveByte();
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			/* Increment the Dataflash page 16 byte block counter */
 | 
			
		||||
			CurrDFPageByteDiv16++;
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			/* Increment the block 16 byte block counter */
 | 
			
		||||
			BytesInBlockDiv16++;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/* Decrement the blocks remaining counter */
 | 
			
		||||
		TotalBlocks--;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -464,7 +464,7 @@ void DataflashManager_ResetDataflashProtections(void)
 | 
			
		|||
	/* Select first Dataflash chip, send the read status register command */
 | 
			
		||||
	Dataflash_SelectChip(DATAFLASH_CHIP1);
 | 
			
		||||
	Dataflash_SendByte(DF_CMD_GETSTATUS);
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Check if sector protection is enabled */
 | 
			
		||||
	if (Dataflash_ReceiveByte() & DF_STATUS_SECTORPROTECTION_ON)
 | 
			
		||||
	{
 | 
			
		||||
| 
						 | 
				
			
			@ -476,12 +476,12 @@ void DataflashManager_ResetDataflashProtections(void)
 | 
			
		|||
		Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[2]);
 | 
			
		||||
		Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[3]);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Select second Dataflash chip (if present on selected board), send read status register command */
 | 
			
		||||
	#if (DATAFLASH_TOTALCHIPS == 2)
 | 
			
		||||
	Dataflash_SelectChip(DATAFLASH_CHIP2);
 | 
			
		||||
	Dataflash_SendByte(DF_CMD_GETSTATUS);
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Check if sector protection is enabled */
 | 
			
		||||
	if (Dataflash_ReceiveByte() & DF_STATUS_SECTORPROTECTION_ON)
 | 
			
		||||
	{
 | 
			
		||||
| 
						 | 
				
			
			@ -494,7 +494,7 @@ void DataflashManager_ResetDataflashProtections(void)
 | 
			
		|||
		Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[3]);
 | 
			
		||||
	}
 | 
			
		||||
	#endif
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Deselect current Dataflash chip */
 | 
			
		||||
	Dataflash_DeselectChip();
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -528,6 +528,7 @@ bool DataflashManager_CheckDataflashOperation(void)
 | 
			
		|||
	if (ReturnByte != DF_MANUFACTURER_ATMEL)
 | 
			
		||||
	  return false;
 | 
			
		||||
	#endif
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -32,13 +32,13 @@
 | 
			
		|||
 *
 | 
			
		||||
 *  Header file for DataflashManager.c.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
#ifndef _DATAFLASH_MANAGER_H_
 | 
			
		||||
#define _DATAFLASH_MANAGER_H_
 | 
			
		||||
 | 
			
		||||
	/* Includes: */
 | 
			
		||||
		#include <avr/io.h>
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		#include "MassStorageKeyboard.h"
 | 
			
		||||
		#include "Descriptors.h"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -59,16 +59,16 @@
 | 
			
		|||
		 *  storage media (Dataflash) using a different native block size.
 | 
			
		||||
		 */
 | 
			
		||||
		#define VIRTUAL_MEMORY_BLOCK_SIZE           512
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/** Total number of blocks of the virtual memory for reporting to the host as the device's total capacity. */
 | 
			
		||||
		#define VIRTUAL_MEMORY_BLOCKS              (VIRTUAL_MEMORY_BYTES / VIRTUAL_MEMORY_BLOCK_SIZE)
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/** Total number of logical drives within the device - must be non-zero. */
 | 
			
		||||
		#define TOTAL_LUNS                          1
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/** Blocks in each LUN, calculated from the total capacity divided by the total number of Logical Units in the device. */
 | 
			
		||||
		#define LUN_MEDIA_BLOCKS                   (VIRTUAL_MEMORY_BLOCKS / TOTAL_LUNS)
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	/* Function Prototypes: */
 | 
			
		||||
		void DataflashManager_WriteBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo,
 | 
			
		||||
		                                  const uint32_t BlockAddress,
 | 
			
		||||
| 
						 | 
				
			
			@ -84,5 +84,6 @@
 | 
			
		|||
		                                     uint8_t* BufferPtr) ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
		void DataflashManager_ResetDataflashProtections(void);
 | 
			
		||||
		bool DataflashManager_CheckDataflashOperation(void);
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -34,29 +34,29 @@
 | 
			
		|||
 *  devices use a thin "Bulk-Only Transport" protocol for issuing commands and status information,
 | 
			
		||||
 *  which wrap around standard SCSI device commands for controlling the actual storage medium.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
#define  INCLUDE_FROM_SCSI_C
 | 
			
		||||
#include "SCSI.h"
 | 
			
		||||
 | 
			
		||||
/** Structure to hold the SCSI response data to a SCSI INQUIRY command. This gives information about the device's
 | 
			
		||||
 *  features and capabilities.
 | 
			
		||||
 */
 | 
			
		||||
SCSI_Inquiry_Response_t InquiryData = 
 | 
			
		||||
SCSI_Inquiry_Response_t InquiryData =
 | 
			
		||||
	{
 | 
			
		||||
		.DeviceType          = DEVICE_TYPE_BLOCK,
 | 
			
		||||
		.PeripheralQualifier = 0,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
		.Removable           = true,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
		.Version             = 0,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
		.ResponseDataFormat  = 2,
 | 
			
		||||
		.NormACA             = false,
 | 
			
		||||
		.TrmTsk              = false,
 | 
			
		||||
		.AERC                = false,
 | 
			
		||||
 | 
			
		||||
		.AdditionalLength    = 0x1F,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
		.SoftReset           = false,
 | 
			
		||||
		.CmdQue              = false,
 | 
			
		||||
		.Linked              = false,
 | 
			
		||||
| 
						 | 
				
			
			@ -64,7 +64,7 @@ SCSI_Inquiry_Response_t InquiryData =
 | 
			
		|||
		.WideBus16Bit        = false,
 | 
			
		||||
		.WideBus32Bit        = false,
 | 
			
		||||
		.RelAddr             = false,
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		.VendorID            = "LUFA",
 | 
			
		||||
		.ProductID           = "Dataflash Disk",
 | 
			
		||||
		.RevisionID          = {'0','.','0','0'},
 | 
			
		||||
| 
						 | 
				
			
			@ -96,13 +96,13 @@ bool SCSI_DecodeSCSICommand(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)
 | 
			
		|||
	switch (MSInterfaceInfo->State.CommandBlock.SCSICommandData[0])
 | 
			
		||||
	{
 | 
			
		||||
		case SCSI_CMD_INQUIRY:
 | 
			
		||||
			CommandSuccess = SCSI_Command_Inquiry(MSInterfaceInfo);			
 | 
			
		||||
			CommandSuccess = SCSI_Command_Inquiry(MSInterfaceInfo);
 | 
			
		||||
			break;
 | 
			
		||||
		case SCSI_CMD_REQUEST_SENSE:
 | 
			
		||||
			CommandSuccess = SCSI_Command_Request_Sense(MSInterfaceInfo);
 | 
			
		||||
			break;
 | 
			
		||||
		case SCSI_CMD_READ_CAPACITY_10:
 | 
			
		||||
			CommandSuccess = SCSI_Command_Read_Capacity_10(MSInterfaceInfo);			
 | 
			
		||||
			CommandSuccess = SCSI_Command_Read_Capacity_10(MSInterfaceInfo);
 | 
			
		||||
			break;
 | 
			
		||||
		case SCSI_CMD_SEND_DIAGNOSTIC:
 | 
			
		||||
			CommandSuccess = SCSI_Command_Send_Diagnostic(MSInterfaceInfo);
 | 
			
		||||
| 
						 | 
				
			
			@ -134,7 +134,7 @@ bool SCSI_DecodeSCSICommand(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)
 | 
			
		|||
		SCSI_SET_SENSE(SCSI_SENSE_KEY_GOOD,
 | 
			
		||||
		               SCSI_ASENSE_NO_ADDITIONAL_INFORMATION,
 | 
			
		||||
		               SCSI_ASENSEQ_NO_QUALIFIER);
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -165,11 +165,11 @@ static bool SCSI_Command_Inquiry(USB_ClassInfo_MS_Device_t* const MSInterfaceInf
 | 
			
		|||
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	Endpoint_Write_Stream_LE(&InquiryData, BytesTransferred, NO_STREAM_CALLBACK);
 | 
			
		||||
 | 
			
		||||
	uint8_t PadBytes[AllocationLength - BytesTransferred];
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Pad out remaining bytes with 0x00 */
 | 
			
		||||
	Endpoint_Write_Stream_LE(&PadBytes, sizeof(PadBytes), NO_STREAM_CALLBACK);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -178,7 +178,7 @@ static bool SCSI_Command_Inquiry(USB_ClassInfo_MS_Device_t* const MSInterfaceInf
 | 
			
		|||
 | 
			
		||||
	/* Succeed the command and update the bytes transferred counter */
 | 
			
		||||
	MSInterfaceInfo->State.CommandBlock.DataTransferLength -= BytesTransferred;
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -193,7 +193,7 @@ static bool SCSI_Command_Request_Sense(USB_ClassInfo_MS_Device_t* const MSInterf
 | 
			
		|||
{
 | 
			
		||||
	uint8_t  AllocationLength = MSInterfaceInfo->State.CommandBlock.SCSICommandData[4];
 | 
			
		||||
	uint8_t  BytesTransferred = (AllocationLength < sizeof(SenseData))? AllocationLength : sizeof(SenseData);
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	uint8_t PadBytes[AllocationLength - BytesTransferred];
 | 
			
		||||
 | 
			
		||||
	Endpoint_Write_Stream_LE(&SenseData, BytesTransferred, NO_STREAM_CALLBACK);
 | 
			
		||||
| 
						 | 
				
			
			@ -221,10 +221,10 @@ static bool SCSI_Command_Read_Capacity_10(USB_ClassInfo_MS_Device_t* const MSInt
 | 
			
		|||
	Endpoint_Write_Stream_BE(&LastBlockAddressInLUN, sizeof(LastBlockAddressInLUN), NO_STREAM_CALLBACK);
 | 
			
		||||
	Endpoint_Write_Stream_BE(&MediaBlockSize, sizeof(MediaBlockSize), NO_STREAM_CALLBACK);
 | 
			
		||||
	Endpoint_ClearIN();
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Succeed the command and update the bytes transferred counter */
 | 
			
		||||
	MSInterfaceInfo->State.CommandBlock.DataTransferLength -= 8;
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -248,21 +248,21 @@ static bool SCSI_Command_Send_Diagnostic(USB_ClassInfo_MS_Device_t* const MSInte
 | 
			
		|||
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Check to see if all attached Dataflash ICs are functional */
 | 
			
		||||
	if (!(DataflashManager_CheckDataflashOperation()))
 | 
			
		||||
	{
 | 
			
		||||
		/* Update SENSE key with a hardware error condition and return command fail */
 | 
			
		||||
		SCSI_SET_SENSE(SCSI_SENSE_KEY_HARDWARE_ERROR,
 | 
			
		||||
		               SCSI_ASENSE_NO_ADDITIONAL_INFORMATION,
 | 
			
		||||
		               SCSI_ASENSEQ_NO_QUALIFIER);	
 | 
			
		||||
	
 | 
			
		||||
		               SCSI_ASENSEQ_NO_QUALIFIER);
 | 
			
		||||
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Succeed the command and update the bytes transferred counter */
 | 
			
		||||
	MSInterfaceInfo->State.CommandBlock.DataTransferLength = 0;
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -280,13 +280,13 @@ static bool SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_Device_t* const MSInterfa
 | 
			
		|||
{
 | 
			
		||||
	uint32_t BlockAddress;
 | 
			
		||||
	uint16_t TotalBlocks;
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Load in the 32-bit block address (SCSI uses big-endian, so have to reverse the byte order) */
 | 
			
		||||
	BlockAddress = SwapEndian_32(*(uint32_t*)&MSInterfaceInfo->State.CommandBlock.SCSICommandData[2]);
 | 
			
		||||
 | 
			
		||||
	/* Load in the 16-bit total blocks (SCSI uses big-endian, so have to reverse the byte order) */
 | 
			
		||||
	TotalBlocks  = SwapEndian_16(*(uint16_t*)&MSInterfaceInfo->State.CommandBlock.SCSICommandData[7]);
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Check if the block address is outside the maximum allowable value for the LUN */
 | 
			
		||||
	if (BlockAddress >= LUN_MEDIA_BLOCKS)
 | 
			
		||||
	{
 | 
			
		||||
| 
						 | 
				
			
			@ -302,7 +302,7 @@ static bool SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_Device_t* const MSInterfa
 | 
			
		|||
	/* Adjust the given block address to the real media address based on the selected LUN */
 | 
			
		||||
	BlockAddress += ((uint32_t)MSInterfaceInfo->State.CommandBlock.LUN * LUN_MEDIA_BLOCKS);
 | 
			
		||||
	#endif
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Determine if the packet is a READ (10) or WRITE (10) command, call appropriate function */
 | 
			
		||||
	if (IsDataRead == DATA_READ)
 | 
			
		||||
	  DataflashManager_ReadBlocks(MSInterfaceInfo, BlockAddress, TotalBlocks);
 | 
			
		||||
| 
						 | 
				
			
			@ -311,6 +311,7 @@ static bool SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_Device_t* const MSInterfa
 | 
			
		|||
 | 
			
		||||
	/* Update the bytes transferred counter and succeed the command */
 | 
			
		||||
	MSInterfaceInfo->State.CommandBlock.DataTransferLength -= ((uint32_t)TotalBlocks * VIRTUAL_MEMORY_BLOCK_SIZE);
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -32,7 +32,7 @@
 | 
			
		|||
 *
 | 
			
		||||
 *  Header file for SCSI.c.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
#ifndef _SCSI_H_
 | 
			
		||||
#define _SCSI_H_
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -46,7 +46,7 @@
 | 
			
		|||
		#include "MassStorageKeyboard.h"
 | 
			
		||||
		#include "Descriptors.h"
 | 
			
		||||
		#include "DataflashManager.h"
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Macros: */
 | 
			
		||||
		/** Macro to set the current SCSI sense data to the given key, additional sense code and additional sense qualifier. This
 | 
			
		||||
		 *  is for convenience, as it allows for all three sense values (returned upon request to the host to give information about
 | 
			
		||||
| 
						 | 
				
			
			@ -68,13 +68,13 @@
 | 
			
		|||
 | 
			
		||||
		/** Value for the DeviceType entry in the SCSI_Inquiry_Response_t enum, indicating a Block Media device. */
 | 
			
		||||
		#define DEVICE_TYPE_BLOCK   0x00
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/** Value for the DeviceType entry in the SCSI_Inquiry_Response_t enum, indicating a CD-ROM device. */
 | 
			
		||||
		#define DEVICE_TYPE_CDROM   0x05
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	/* Function Prototypes: */
 | 
			
		||||
		bool SCSI_DecodeSCSICommand(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo);
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		#if defined(INCLUDE_FROM_SCSI_C)
 | 
			
		||||
			static bool SCSI_Command_Inquiry(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo);
 | 
			
		||||
			static bool SCSI_Command_Request_Sense(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo);
 | 
			
		||||
| 
						 | 
				
			
			@ -83,5 +83,6 @@
 | 
			
		|||
			static bool SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo,
 | 
			
		||||
			                                      const bool IsDataRead);
 | 
			
		||||
		#endif
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -10,13 +10,13 @@
 | 
			
		|||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
  Copyright 2010  Matthias Hullin (lufa [at] matthias [dot] hullin [dot] net)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -36,7 +36,7 @@
 | 
			
		|||
 */
 | 
			
		||||
 | 
			
		||||
#include "MassStorageKeyboard.h"
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
/** LUFA Mass Storage Class driver interface configuration and state information. This structure is
 | 
			
		||||
 *  passed to all Mass Storage Class driver functions, so that multiple instances of the same class
 | 
			
		||||
 *  within a device can be differentiated from one another.
 | 
			
		||||
| 
						 | 
				
			
			@ -160,11 +160,11 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
 | 
			
		|||
bool CALLBACK_MS_Device_SCSICommandReceived(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)
 | 
			
		||||
{
 | 
			
		||||
	bool CommandSuccess;
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	LEDs_SetAllLEDs(LEDMASK_USB_BUSY);
 | 
			
		||||
	CommandSuccess = SCSI_DecodeSCSICommand(MSInterfaceInfo);
 | 
			
		||||
	LEDs_SetAllLEDs(LEDMASK_USB_READY);
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	return CommandSuccess;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -191,7 +191,7 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
 | 
			
		|||
                                         uint16_t* const ReportSize)
 | 
			
		||||
{
 | 
			
		||||
	USB_KeyboardReport_Data_t* KeyboardReport = (USB_KeyboardReport_Data_t*)ReportData;
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	uint8_t JoyStatus_LCL    = Joystick_GetStatus();
 | 
			
		||||
	uint8_t ButtonStatus_LCL = Buttons_GetStatus();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -209,10 +209,10 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
 | 
			
		|||
 | 
			
		||||
	if (JoyStatus_LCL & JOY_PRESS)
 | 
			
		||||
	  KeyboardReport->KeyCode[0] = 0x08; // E
 | 
			
		||||
	  
 | 
			
		||||
 | 
			
		||||
	if (ButtonStatus_LCL & BUTTONS_BUTTON1)
 | 
			
		||||
	  KeyboardReport->KeyCode[0] = 0x09; // F
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	*ReportSize = sizeof(USB_KeyboardReport_Data_t);
 | 
			
		||||
	return false;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -236,13 +236,13 @@ void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDI
 | 
			
		|||
 | 
			
		||||
	if (*LEDReport & HID_KEYBOARD_LED_NUMLOCK)
 | 
			
		||||
	  LEDMask |= LEDS_LED1;
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	if (*LEDReport & HID_KEYBOARD_LED_CAPSLOCK)
 | 
			
		||||
	  LEDMask |= LEDS_LED3;
 | 
			
		||||
 | 
			
		||||
	if (*LEDReport & HID_KEYBOARD_LED_SCROLLLOCK)
 | 
			
		||||
	  LEDMask |= LEDS_LED4;
 | 
			
		||||
	  
 | 
			
		||||
 | 
			
		||||
	LEDs_SetAllLEDs(LEDMask);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -10,13 +10,13 @@
 | 
			
		|||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
  Copyright 2010  Matthias Hullin (lufa [at] matthias [dot] hullin [dot] net)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -58,7 +58,7 @@
 | 
			
		|||
		#include <LUFA/Drivers/USB/USB.h>
 | 
			
		||||
		#include <LUFA/Drivers/USB/Class/MassStorage.h>
 | 
			
		||||
		#include <LUFA/Drivers/USB/Class/Device/HID.h>
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
	/* Macros: */
 | 
			
		||||
		/** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
 | 
			
		||||
		#define LEDMASK_USB_NOTREADY      LEDS_LED1
 | 
			
		||||
| 
						 | 
				
			
			@ -74,7 +74,7 @@
 | 
			
		|||
 | 
			
		||||
		/** LED mask for the library LED driver, to indicate that the USB interface is busy. */
 | 
			
		||||
		#define LEDMASK_USB_BUSY         LEDS_LED2
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	/* Function Prototypes: */
 | 
			
		||||
		void SetupHardware(void);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -92,9 +92,10 @@
 | 
			
		|||
		                                         void* ReportData,
 | 
			
		||||
		                                         uint16_t* const ReportSize);
 | 
			
		||||
		void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo,
 | 
			
		||||
		                                          const uint8_t ReportID, 
 | 
			
		||||
		                                          const uint8_t ReportID,
 | 
			
		||||
		                                          const uint8_t ReportType,
 | 
			
		||||
		                                          const void* ReportData,
 | 
			
		||||
		                                          const uint16_t ReportSize);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,7 +3,7 @@
 | 
			
		|||
 *  This file contains special DoxyGen information for the generation of the main page and other special
 | 
			
		||||
 *  documentation pages. It is not a project source file.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
/** \mainpage Combined Mass Storage and Keyboard Device Demo
 | 
			
		||||
 *
 | 
			
		||||
 *  \section SSec_Compat Demo Compatibility:
 | 
			
		||||
| 
						 | 
				
			
			@ -29,7 +29,7 @@
 | 
			
		|||
 *    <td>Mass Storage Device \n
 | 
			
		||||
 *        Human Interface Device</td>
 | 
			
		||||
 *   </tr>
 | 
			
		||||
 *   <tr> 
 | 
			
		||||
 *   <tr>
 | 
			
		||||
 *    <td><b>USB Subclasses:</b></td>
 | 
			
		||||
 *    <td>Bulk-Only Transport \n
 | 
			
		||||
 *        Keyboard Subclass</td>
 | 
			
		||||
| 
						 | 
				
			
			@ -49,24 +49,24 @@
 | 
			
		|||
 *   </tr>
 | 
			
		||||
 *  </table>
 | 
			
		||||
 *
 | 
			
		||||
 *  \section SSec_Description Project Description: 
 | 
			
		||||
 *  \section SSec_Description Project Description:
 | 
			
		||||
 *
 | 
			
		||||
 *  Combined Mass Storage and Keyboard demonstration application. This gives a
 | 
			
		||||
 *  simple reference application for implementing a dual class USB Mass Storage
 | 
			
		||||
 *  and USB HID Keyboard device using the basic USB UFI and HID drivers in all
 | 
			
		||||
 *  modern OSes (i.e. no special drivers required).
 | 
			
		||||
 *  
 | 
			
		||||
 *
 | 
			
		||||
 *  On start-up the system will automatically enumerate and function as an
 | 
			
		||||
 *  external mass storage device (which may be formatted and used in the same
 | 
			
		||||
 *  manner as commercial USB Mass Storage devices) and a USB keyboard.
 | 
			
		||||
 *  	
 | 
			
		||||
 *
 | 
			
		||||
 *  You will need to format the mass storage drive upon first run of this
 | 
			
		||||
 *  demonstration - as the device acts only as a data block transport between
 | 
			
		||||
 *  the host and the storage media, it does not matter what file system is used,
 | 
			
		||||
 *  as the data interpretation is performed by the host and not the USB device.
 | 
			
		||||
 *
 | 
			
		||||
 *  Keys on the USB keyboard can be pressed by moving the board's Joystick.
 | 
			
		||||
 *  
 | 
			
		||||
 *
 | 
			
		||||
 *  The USB control endpoint is managed entirely by the library using endpoint
 | 
			
		||||
 *  interrupts, as the INTERRUPT_CONTROL_ENDPOINT option is enabled. This allows for
 | 
			
		||||
 *  the host to reset the Mass Storage device state during long transfers without
 | 
			
		||||
| 
						 | 
				
			
			@ -90,3 +90,4 @@
 | 
			
		|||
 *   </tr>
 | 
			
		||||
 *  </table>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,7 +47,7 @@
 | 
			
		|||
# make doxygen = Generate DoxyGen documentation for the project (must have
 | 
			
		||||
#                DoxyGen installed)
 | 
			
		||||
#
 | 
			
		||||
# make debug = Start either simulavr or avarice as specified for debugging, 
 | 
			
		||||
# make debug = Start either simulavr or avarice as specified for debugging,
 | 
			
		||||
#              with avr-gdb or avr-insight as the front end for debugging.
 | 
			
		||||
#
 | 
			
		||||
# make filename.s = Just compile filename.c into the assembler code only.
 | 
			
		||||
| 
						 | 
				
			
			@ -64,14 +64,14 @@ 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 
 | 
			
		||||
# LUFA board drivers). If USER is selected, put custom board drivers in a directory called
 | 
			
		||||
# "Board" inside the application directory.
 | 
			
		||||
BOARD = USBKEY
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Processor frequency.
 | 
			
		||||
#     This will define a symbol, F_CPU, in all source code files equal to the 
 | 
			
		||||
#     processor frequency in Hz. You can then use this symbol in your source code to 
 | 
			
		||||
#     This will define a symbol, F_CPU, in all source code files equal to the
 | 
			
		||||
#     processor frequency in Hz. You can then use this symbol in your source code to
 | 
			
		||||
#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
 | 
			
		||||
#     automatically to create a 32-bit value in your source code.
 | 
			
		||||
#
 | 
			
		||||
| 
						 | 
				
			
			@ -84,7 +84,7 @@ F_CPU = 8000000
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Input clock frequency.
 | 
			
		||||
#     This will define a symbol, F_CLOCK, in all source code files equal to the 
 | 
			
		||||
#     This will define a symbol, F_CLOCK, in all source code files equal to the
 | 
			
		||||
#     input clock frequency (before any prescaling is performed) in Hz. This value may
 | 
			
		||||
#     differ from F_CPU if prescaling is used on the latter, and is required as the
 | 
			
		||||
#     raw input clock is fed directly to the PLL sections of the AVR for high speed
 | 
			
		||||
| 
						 | 
				
			
			@ -138,7 +138,7 @@ SRC = $(TARGET).c                                                 \
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# List C++ source files here. (C dependencies are automatically generated.)
 | 
			
		||||
CPPSRC = 
 | 
			
		||||
CPPSRC =
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# List Assembler source files here.
 | 
			
		||||
| 
						 | 
				
			
			@ -151,7 +151,7 @@ CPPSRC =
 | 
			
		|||
ASRC =
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Optimization level, can be [0, 1, 2, 3, s]. 
 | 
			
		||||
# Optimization level, can be [0, 1, 2, 3, s].
 | 
			
		||||
#     0 = turn off optimization. s = optimize for size.
 | 
			
		||||
#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
 | 
			
		||||
OPT = s
 | 
			
		||||
| 
						 | 
				
			
			@ -265,7 +265,7 @@ CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
 | 
			
		|||
#             for use in COFF files, additional information about filenames
 | 
			
		||||
#             and function names needs to be present in the assembler source
 | 
			
		||||
#             files -- see avr-libc docs [FIXME: not yet described there]
 | 
			
		||||
#  -listing-cont-lines: Sets the maximum number of continuation lines of hex 
 | 
			
		||||
#  -listing-cont-lines: Sets the maximum number of continuation lines of hex
 | 
			
		||||
#       dump that will be displayed for a given single line of source input.
 | 
			
		||||
ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -278,7 +278,7 @@ PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
 | 
			
		|||
PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
 | 
			
		||||
 | 
			
		||||
# If this is left blank, then it will use the Standard printf version.
 | 
			
		||||
PRINTF_LIB = 
 | 
			
		||||
PRINTF_LIB =
 | 
			
		||||
#PRINTF_LIB = $(PRINTF_LIB_MIN)
 | 
			
		||||
#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -290,7 +290,7 @@ SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
 | 
			
		|||
SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
 | 
			
		||||
 | 
			
		||||
# If this is left blank, then it will use the Standard scanf version.
 | 
			
		||||
SCANF_LIB = 
 | 
			
		||||
SCANF_LIB =
 | 
			
		||||
#SCANF_LIB = $(SCANF_LIB_MIN)
 | 
			
		||||
#SCANF_LIB = $(SCANF_LIB_FLOAT)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -302,7 +302,7 @@ MATH_LIB = -lm
 | 
			
		|||
#     Each directory must be seperated by a space.
 | 
			
		||||
#     Use forward slashes for directory separators.
 | 
			
		||||
#     For a directory that has spaces, enclose it in quotes.
 | 
			
		||||
EXTRALIBDIRS = 
 | 
			
		||||
EXTRALIBDIRS =
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -325,7 +325,7 @@ EXTMEMOPTS =
 | 
			
		|||
#    -Map:      create map file
 | 
			
		||||
#    --cref:    add cross reference to  map file
 | 
			
		||||
LDFLAGS  = -Wl,-Map=$(TARGET).map,--cref
 | 
			
		||||
LDFLAGS += -Wl,--relax 
 | 
			
		||||
LDFLAGS += -Wl,--relax
 | 
			
		||||
LDFLAGS += -Wl,--gc-sections
 | 
			
		||||
LDFLAGS += $(EXTMEMOPTS)
 | 
			
		||||
LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))
 | 
			
		||||
| 
						 | 
				
			
			@ -359,7 +359,7 @@ AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
 | 
			
		|||
#AVRDUDE_NO_VERIFY = -V
 | 
			
		||||
 | 
			
		||||
# Increase verbosity level.  Please use this when submitting bug
 | 
			
		||||
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
 | 
			
		||||
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
 | 
			
		||||
# to submit bug reports.
 | 
			
		||||
#AVRDUDE_VERBOSE = -v -v
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -393,7 +393,7 @@ JTAG_DEV = /dev/com1
 | 
			
		|||
DEBUG_PORT = 4242
 | 
			
		||||
 | 
			
		||||
# Debugging host used to communicate between GDB / avarice / simulavr, normally
 | 
			
		||||
#     just set to localhost unless doing some sort of crazy debugging when 
 | 
			
		||||
#     just set to localhost unless doing some sort of crazy debugging when
 | 
			
		||||
#     avarice is running on a different computer.
 | 
			
		||||
DEBUG_HOST = localhost
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -422,7 +422,7 @@ WINSHELL = cmd
 | 
			
		|||
MSG_ERRORS_NONE = Errors: none
 | 
			
		||||
MSG_BEGIN = -------- begin --------
 | 
			
		||||
MSG_END = --------  end  --------
 | 
			
		||||
MSG_SIZE_BEFORE = Size before: 
 | 
			
		||||
MSG_SIZE_BEFORE = Size before:
 | 
			
		||||
MSG_SIZE_AFTER = Size after:
 | 
			
		||||
MSG_COFF = Converting to AVR COFF:
 | 
			
		||||
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
 | 
			
		||||
| 
						 | 
				
			
			@ -441,10 +441,10 @@ MSG_CREATING_LIBRARY = Creating library:
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Define all object files.
 | 
			
		||||
OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) 
 | 
			
		||||
OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o)
 | 
			
		||||
 | 
			
		||||
# Define all listing files.
 | 
			
		||||
LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) 
 | 
			
		||||
LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Compiler flags to generate dependency files.
 | 
			
		||||
| 
						 | 
				
			
			@ -509,11 +509,11 @@ sizeafter:
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Display compiler version information.
 | 
			
		||||
gccversion : 
 | 
			
		||||
gccversion :
 | 
			
		||||
	@$(CC) --version
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Program the device.  
 | 
			
		||||
# Program the device.
 | 
			
		||||
program: $(TARGET).hex $(TARGET).eep
 | 
			
		||||
	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -540,9 +540,9 @@ dfu-ee: $(TARGET).hex $(TARGET).eep
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Generate avr-gdb config/init file which does the following:
 | 
			
		||||
#     define the reset signal, load the target file, connect to target, and set 
 | 
			
		||||
#     define the reset signal, load the target file, connect to target, and set
 | 
			
		||||
#     a breakpoint at main().
 | 
			
		||||
gdb-config: 
 | 
			
		||||
gdb-config:
 | 
			
		||||
	@$(REMOVE) $(GDBINIT_FILE)
 | 
			
		||||
	@echo define reset >> $(GDBINIT_FILE)
 | 
			
		||||
	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
 | 
			
		||||
| 
						 | 
				
			
			@ -640,14 +640,14 @@ extcoff: $(TARGET).elf
 | 
			
		|||
$(OBJDIR)/%.o : %.c
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo $(MSG_COMPILING) $<
 | 
			
		||||
	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
 | 
			
		||||
	$(CC) -c $(ALL_CFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Compile: create object files from C++ source files.
 | 
			
		||||
$(OBJDIR)/%.o : %.cpp
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo $(MSG_COMPILING_CPP) $<
 | 
			
		||||
	$(CC) -c $(ALL_CPPFLAGS) $< -o $@ 
 | 
			
		||||
	$(CC) -c $(ALL_CPPFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Compile: create assembler files from C source files.
 | 
			
		||||
| 
						 | 
				
			
			@ -669,7 +669,7 @@ $(OBJDIR)/%.o : %.S
 | 
			
		|||
 | 
			
		||||
# Create preprocessed source for use in sending a bug report.
 | 
			
		||||
%.i : %.c
 | 
			
		||||
	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
 | 
			
		||||
	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Target: clean project.
 | 
			
		||||
| 
						 | 
				
			
			@ -713,3 +713,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null)
 | 
			
		|||
build elf hex eep lss sym coff extcoff doxygen clean          \
 | 
			
		||||
clean_list clean_doxygen program dfu flip flip-ee dfu-ee      \
 | 
			
		||||
debug gdb-config
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -30,9 +30,9 @@
 | 
			
		|||
 | 
			
		||||
/** \file
 | 
			
		||||
 *
 | 
			
		||||
 *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special 
 | 
			
		||||
 *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special
 | 
			
		||||
 *  computer-readable structures which the host requests upon device enumeration, to determine
 | 
			
		||||
 *  the device's capabilities and functions.  
 | 
			
		||||
 *  the device's capabilities and functions.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "Descriptors.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -81,22 +81,22 @@ USB_Descriptor_HIDReport_Datatype_t PROGMEM MouseReport[] =
 | 
			
		|||
USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
 | 
			
		||||
{
 | 
			
		||||
	.Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.USBSpecification       = VERSION_BCD(01.10),
 | 
			
		||||
	.Class                  = 0x00,
 | 
			
		||||
	.SubClass               = 0x00,
 | 
			
		||||
	.Protocol               = 0x00,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
	.Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.VendorID               = 0x03EB,
 | 
			
		||||
	.ProductID              = 0x2041,
 | 
			
		||||
	.ReleaseNumber          = VERSION_BCD(00.01),
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.ManufacturerStrIndex   = 0x01,
 | 
			
		||||
	.ProductStrIndex        = 0x02,
 | 
			
		||||
	.SerialNumStrIndex      = NO_DESCRIPTOR,
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -107,38 +107,38 @@ USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
 | 
			
		|||
 */
 | 
			
		||||
USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		||||
{
 | 
			
		||||
	.Config = 
 | 
			
		||||
	.Config =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},
 | 
			
		||||
 | 
			
		||||
			.TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),
 | 
			
		||||
			.TotalInterfaces        = 1,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.ConfigurationNumber    = 1,
 | 
			
		||||
			.ConfigurationStrIndex  = NO_DESCRIPTOR,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.ConfigAttributes       = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)
 | 
			
		||||
		},
 | 
			
		||||
		
 | 
			
		||||
	.HID_Interface = 
 | 
			
		||||
 | 
			
		||||
	.HID_Interface =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 | 
			
		||||
 | 
			
		||||
			.InterfaceNumber        = 0x00,
 | 
			
		||||
			.AlternateSetting       = 0x00,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.TotalEndpoints         = 1,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.Class                  = 0x03,
 | 
			
		||||
			.SubClass               = 0x01,
 | 
			
		||||
			.Protocol               = HID_BOOTP_MouseBootProtocol,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.InterfaceStrIndex      = NO_DESCRIPTOR
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.HID_MouseHID = 
 | 
			
		||||
	.HID_MouseHID =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID},
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -149,7 +149,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		|||
			.HIDReportLength        = sizeof(MouseReport)
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.HID_ReportINEndpoint = 
 | 
			
		||||
	.HID_ReportINEndpoint =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -167,7 +167,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		|||
USB_Descriptor_String_t PROGMEM LanguageString =
 | 
			
		||||
{
 | 
			
		||||
	.Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.UnicodeString          = {LANGUAGE_ID_ENG}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -178,7 +178,7 @@ USB_Descriptor_String_t PROGMEM LanguageString =
 | 
			
		|||
USB_Descriptor_String_t PROGMEM ManufacturerString =
 | 
			
		||||
{
 | 
			
		||||
	.Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.UnicodeString          = L"Dean Camera"
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -189,7 +189,7 @@ USB_Descriptor_String_t PROGMEM ManufacturerString =
 | 
			
		|||
USB_Descriptor_String_t PROGMEM ProductString =
 | 
			
		||||
{
 | 
			
		||||
	.Header                 = {.Size = USB_STRING_LEN(15), .Type = DTYPE_String},
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.UnicodeString          = L"LUFA Mouse Demo"
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -235,19 +235,19 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		|||
					Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			break;
 | 
			
		||||
		case HID_DTYPE_HID: 
 | 
			
		||||
		case HID_DTYPE_HID:
 | 
			
		||||
			Address = &ConfigurationDescriptor.HID_MouseHID;
 | 
			
		||||
			Size    = sizeof(USB_HID_Descriptor_HID_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case HID_DTYPE_Report: 
 | 
			
		||||
		case HID_DTYPE_Report:
 | 
			
		||||
			Address = &MouseReport;
 | 
			
		||||
			Size    = sizeof(MouseReport);
 | 
			
		||||
			break;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	*DescriptorAddress = Address;		
 | 
			
		||||
 | 
			
		||||
	*DescriptorAddress = Address;
 | 
			
		||||
	return Size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -32,7 +32,7 @@
 | 
			
		|||
 *
 | 
			
		||||
 *  Header file for Descriptors.c.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
#ifndef _DESCRIPTORS_H_
 | 
			
		||||
#define _DESCRIPTORS_H_
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -54,11 +54,11 @@
 | 
			
		|||
			USB_HID_Descriptor_HID_t              HID_MouseHID;
 | 
			
		||||
	        USB_Descriptor_Endpoint_t             HID_ReportINEndpoint;
 | 
			
		||||
		} USB_Descriptor_Configuration_t;
 | 
			
		||||
					
 | 
			
		||||
 | 
			
		||||
	/* Macros: */
 | 
			
		||||
		/** Endpoint number of the Mouse HID reporting IN endpoint. */
 | 
			
		||||
		#define MOUSE_EPNUM               1
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/** Size in bytes of the Mouse HID reporting IN endpoint. */
 | 
			
		||||
		#define MOUSE_EPSIZE              8
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -69,3 +69,4 @@
 | 
			
		|||
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -62,9 +62,9 @@ USB_ClassInfo_HID_Device_t Mouse_HID_Interface =
 | 
			
		|||
 *  setup of all components and the main program loop.
 | 
			
		||||
 */
 | 
			
		||||
int main(void)
 | 
			
		||||
{	
 | 
			
		||||
{
 | 
			
		||||
	SetupHardware();
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
 | 
			
		||||
	sei();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -145,7 +145,7 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
 | 
			
		|||
                                         uint16_t* const ReportSize)
 | 
			
		||||
{
 | 
			
		||||
	USB_MouseReport_Data_t* MouseReport = (USB_MouseReport_Data_t*)ReportData;
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	uint8_t JoyStatus_LCL    = Joystick_GetStatus();
 | 
			
		||||
	uint8_t ButtonStatus_LCL = Buttons_GetStatus();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -161,10 +161,10 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
 | 
			
		|||
 | 
			
		||||
	if (JoyStatus_LCL & JOY_PRESS)
 | 
			
		||||
	  MouseReport->Button |= (1 << 0);
 | 
			
		||||
	  
 | 
			
		||||
 | 
			
		||||
	if (ButtonStatus_LCL & BUTTONS_BUTTON1)
 | 
			
		||||
	  MouseReport->Button |= (1 << 1);
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	*ReportSize = sizeof(USB_MouseReport_Data_t);
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -185,3 +185,4 @@ void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDI
 | 
			
		|||
{
 | 
			
		||||
	// Unused (but mandatory for the HID class driver) in this demo, since there are no Host->Device reports
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -44,7 +44,7 @@
 | 
			
		|||
		#include <avr/interrupt.h>
 | 
			
		||||
		#include <stdbool.h>
 | 
			
		||||
		#include <string.h>
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		#include "Descriptors.h"
 | 
			
		||||
 | 
			
		||||
		#include <LUFA/Version.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -53,7 +53,7 @@
 | 
			
		|||
		#include <LUFA/Drivers/Board/Buttons.h>
 | 
			
		||||
		#include <LUFA/Drivers/USB/USB.h>
 | 
			
		||||
		#include <LUFA/Drivers/USB/Class/HID.h>
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	/* Macros: */
 | 
			
		||||
		/** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
 | 
			
		||||
		#define LEDMASK_USB_NOTREADY      LEDS_LED1
 | 
			
		||||
| 
						 | 
				
			
			@ -66,7 +66,7 @@
 | 
			
		|||
 | 
			
		||||
		/** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */
 | 
			
		||||
		#define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
	/* Function Prototypes: */
 | 
			
		||||
		void SetupHardware(void);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -82,9 +82,10 @@
 | 
			
		|||
		                                         void* ReportData,
 | 
			
		||||
		                                         uint16_t* const ReportSize);
 | 
			
		||||
		void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo,
 | 
			
		||||
		                                          const uint8_t ReportID, 
 | 
			
		||||
		                                          const uint8_t ReportID,
 | 
			
		||||
		                                          const uint8_t ReportType,
 | 
			
		||||
		                                          const void* ReportData,
 | 
			
		||||
		                                          const uint16_t ReportSize);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,7 +3,7 @@
 | 
			
		|||
 *  This file contains special DoxyGen information for the generation of the main page and other special
 | 
			
		||||
 *  documentation pages. It is not a project source file.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
/** \mainpage Mouse Device Demo
 | 
			
		||||
 *
 | 
			
		||||
 *  \section SSec_Compat Demo Compatibility:
 | 
			
		||||
| 
						 | 
				
			
			@ -28,7 +28,7 @@
 | 
			
		|||
 *    <td><b>USB Class:</b></td>
 | 
			
		||||
 *    <td>Human Interface Device (HID)</td>
 | 
			
		||||
 *   </tr>
 | 
			
		||||
 *   <tr> 
 | 
			
		||||
 *   <tr>
 | 
			
		||||
 *    <td><b>USB Subclass:</b></td>
 | 
			
		||||
 *    <td>Mouse Subclass</td>
 | 
			
		||||
 *   </tr>
 | 
			
		||||
| 
						 | 
				
			
			@ -44,14 +44,14 @@
 | 
			
		|||
 *   </tr>
 | 
			
		||||
 *  </table>
 | 
			
		||||
 *
 | 
			
		||||
 *  \section SSec_Description Project Description: 
 | 
			
		||||
 *  \section SSec_Description Project Description:
 | 
			
		||||
 *
 | 
			
		||||
 *  Mouse demonstration application. This gives a simple reference
 | 
			
		||||
 *  application for implementing a USB Mouse using the basic USB HID
 | 
			
		||||
 *  drivers in all modern OSes (i.e. no special drivers required). It is
 | 
			
		||||
 *  boot protocol compatible, and thus works under compatible BIOS as if
 | 
			
		||||
 *  it was a native mouse (e.g. PS/2).
 | 
			
		||||
 *  
 | 
			
		||||
 *
 | 
			
		||||
 *  On start-up the system will automatically enumerate and function
 | 
			
		||||
 *  as a mouse when the USB connection to a host is present. To use
 | 
			
		||||
 *  the mouse, move the joystick to move the pointer, and push the
 | 
			
		||||
| 
						 | 
				
			
			@ -70,3 +70,4 @@
 | 
			
		|||
 *   </tr>
 | 
			
		||||
 *  </table>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,7 +47,7 @@
 | 
			
		|||
# make doxygen = Generate DoxyGen documentation for the project (must have
 | 
			
		||||
#                DoxyGen installed)
 | 
			
		||||
#
 | 
			
		||||
# make debug = Start either simulavr or avarice as specified for debugging, 
 | 
			
		||||
# make debug = Start either simulavr or avarice as specified for debugging,
 | 
			
		||||
#              with avr-gdb or avr-insight as the front end for debugging.
 | 
			
		||||
#
 | 
			
		||||
# make filename.s = Just compile filename.c into the assembler code only.
 | 
			
		||||
| 
						 | 
				
			
			@ -64,14 +64,14 @@ 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 
 | 
			
		||||
# LUFA board drivers). If USER is selected, put custom board drivers in a directory called
 | 
			
		||||
# "Board" inside the application directory.
 | 
			
		||||
BOARD = USBKEY
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Processor frequency.
 | 
			
		||||
#     This will define a symbol, F_CPU, in all source code files equal to the 
 | 
			
		||||
#     processor frequency in Hz. You can then use this symbol in your source code to 
 | 
			
		||||
#     This will define a symbol, F_CPU, in all source code files equal to the
 | 
			
		||||
#     processor frequency in Hz. You can then use this symbol in your source code to
 | 
			
		||||
#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
 | 
			
		||||
#     automatically to create a 32-bit value in your source code.
 | 
			
		||||
#
 | 
			
		||||
| 
						 | 
				
			
			@ -84,7 +84,7 @@ F_CPU = 8000000
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Input clock frequency.
 | 
			
		||||
#     This will define a symbol, F_CLOCK, in all source code files equal to the 
 | 
			
		||||
#     This will define a symbol, F_CLOCK, in all source code files equal to the
 | 
			
		||||
#     input clock frequency (before any prescaling is performed) in Hz. This value may
 | 
			
		||||
#     differ from F_CPU if prescaling is used on the latter, and is required as the
 | 
			
		||||
#     raw input clock is fed directly to the PLL sections of the AVR for high speed
 | 
			
		||||
| 
						 | 
				
			
			@ -135,7 +135,7 @@ SRC = $(TARGET).c                                                 \
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# List C++ source files here. (C dependencies are automatically generated.)
 | 
			
		||||
CPPSRC = 
 | 
			
		||||
CPPSRC =
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# List Assembler source files here.
 | 
			
		||||
| 
						 | 
				
			
			@ -148,7 +148,7 @@ CPPSRC =
 | 
			
		|||
ASRC =
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Optimization level, can be [0, 1, 2, 3, s]. 
 | 
			
		||||
# Optimization level, can be [0, 1, 2, 3, s].
 | 
			
		||||
#     0 = turn off optimization. s = optimize for size.
 | 
			
		||||
#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
 | 
			
		||||
OPT = s
 | 
			
		||||
| 
						 | 
				
			
			@ -262,7 +262,7 @@ CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
 | 
			
		|||
#             for use in COFF files, additional information about filenames
 | 
			
		||||
#             and function names needs to be present in the assembler source
 | 
			
		||||
#             files -- see avr-libc docs [FIXME: not yet described there]
 | 
			
		||||
#  -listing-cont-lines: Sets the maximum number of continuation lines of hex 
 | 
			
		||||
#  -listing-cont-lines: Sets the maximum number of continuation lines of hex
 | 
			
		||||
#       dump that will be displayed for a given single line of source input.
 | 
			
		||||
ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -275,7 +275,7 @@ PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
 | 
			
		|||
PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
 | 
			
		||||
 | 
			
		||||
# If this is left blank, then it will use the Standard printf version.
 | 
			
		||||
PRINTF_LIB = 
 | 
			
		||||
PRINTF_LIB =
 | 
			
		||||
#PRINTF_LIB = $(PRINTF_LIB_MIN)
 | 
			
		||||
#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -287,7 +287,7 @@ SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
 | 
			
		|||
SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
 | 
			
		||||
 | 
			
		||||
# If this is left blank, then it will use the Standard scanf version.
 | 
			
		||||
SCANF_LIB = 
 | 
			
		||||
SCANF_LIB =
 | 
			
		||||
#SCANF_LIB = $(SCANF_LIB_MIN)
 | 
			
		||||
#SCANF_LIB = $(SCANF_LIB_FLOAT)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -299,7 +299,7 @@ MATH_LIB = -lm
 | 
			
		|||
#     Each directory must be seperated by a space.
 | 
			
		||||
#     Use forward slashes for directory separators.
 | 
			
		||||
#     For a directory that has spaces, enclose it in quotes.
 | 
			
		||||
EXTRALIBDIRS = 
 | 
			
		||||
EXTRALIBDIRS =
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -322,7 +322,7 @@ EXTMEMOPTS =
 | 
			
		|||
#    -Map:      create map file
 | 
			
		||||
#    --cref:    add cross reference to  map file
 | 
			
		||||
LDFLAGS  = -Wl,-Map=$(TARGET).map,--cref
 | 
			
		||||
LDFLAGS += -Wl,--relax 
 | 
			
		||||
LDFLAGS += -Wl,--relax
 | 
			
		||||
LDFLAGS += -Wl,--gc-sections
 | 
			
		||||
LDFLAGS += $(EXTMEMOPTS)
 | 
			
		||||
LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))
 | 
			
		||||
| 
						 | 
				
			
			@ -356,7 +356,7 @@ AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
 | 
			
		|||
#AVRDUDE_NO_VERIFY = -V
 | 
			
		||||
 | 
			
		||||
# Increase verbosity level.  Please use this when submitting bug
 | 
			
		||||
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
 | 
			
		||||
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
 | 
			
		||||
# to submit bug reports.
 | 
			
		||||
#AVRDUDE_VERBOSE = -v -v
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -390,7 +390,7 @@ JTAG_DEV = /dev/com1
 | 
			
		|||
DEBUG_PORT = 4242
 | 
			
		||||
 | 
			
		||||
# Debugging host used to communicate between GDB / avarice / simulavr, normally
 | 
			
		||||
#     just set to localhost unless doing some sort of crazy debugging when 
 | 
			
		||||
#     just set to localhost unless doing some sort of crazy debugging when
 | 
			
		||||
#     avarice is running on a different computer.
 | 
			
		||||
DEBUG_HOST = localhost
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -419,7 +419,7 @@ WINSHELL = cmd
 | 
			
		|||
MSG_ERRORS_NONE = Errors: none
 | 
			
		||||
MSG_BEGIN = -------- begin --------
 | 
			
		||||
MSG_END = --------  end  --------
 | 
			
		||||
MSG_SIZE_BEFORE = Size before: 
 | 
			
		||||
MSG_SIZE_BEFORE = Size before:
 | 
			
		||||
MSG_SIZE_AFTER = Size after:
 | 
			
		||||
MSG_COFF = Converting to AVR COFF:
 | 
			
		||||
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
 | 
			
		||||
| 
						 | 
				
			
			@ -438,10 +438,10 @@ MSG_CREATING_LIBRARY = Creating library:
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Define all object files.
 | 
			
		||||
OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) 
 | 
			
		||||
OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o)
 | 
			
		||||
 | 
			
		||||
# Define all listing files.
 | 
			
		||||
LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) 
 | 
			
		||||
LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Compiler flags to generate dependency files.
 | 
			
		||||
| 
						 | 
				
			
			@ -506,11 +506,11 @@ sizeafter:
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Display compiler version information.
 | 
			
		||||
gccversion : 
 | 
			
		||||
gccversion :
 | 
			
		||||
	@$(CC) --version
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Program the device.  
 | 
			
		||||
# Program the device.
 | 
			
		||||
program: $(TARGET).hex $(TARGET).eep
 | 
			
		||||
	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -537,9 +537,9 @@ dfu-ee: $(TARGET).hex $(TARGET).eep
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Generate avr-gdb config/init file which does the following:
 | 
			
		||||
#     define the reset signal, load the target file, connect to target, and set 
 | 
			
		||||
#     define the reset signal, load the target file, connect to target, and set
 | 
			
		||||
#     a breakpoint at main().
 | 
			
		||||
gdb-config: 
 | 
			
		||||
gdb-config:
 | 
			
		||||
	@$(REMOVE) $(GDBINIT_FILE)
 | 
			
		||||
	@echo define reset >> $(GDBINIT_FILE)
 | 
			
		||||
	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
 | 
			
		||||
| 
						 | 
				
			
			@ -637,14 +637,14 @@ extcoff: $(TARGET).elf
 | 
			
		|||
$(OBJDIR)/%.o : %.c
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo $(MSG_COMPILING) $<
 | 
			
		||||
	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
 | 
			
		||||
	$(CC) -c $(ALL_CFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Compile: create object files from C++ source files.
 | 
			
		||||
$(OBJDIR)/%.o : %.cpp
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo $(MSG_COMPILING_CPP) $<
 | 
			
		||||
	$(CC) -c $(ALL_CPPFLAGS) $< -o $@ 
 | 
			
		||||
	$(CC) -c $(ALL_CPPFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Compile: create assembler files from C source files.
 | 
			
		||||
| 
						 | 
				
			
			@ -666,7 +666,7 @@ $(OBJDIR)/%.o : %.S
 | 
			
		|||
 | 
			
		||||
# Create preprocessed source for use in sending a bug report.
 | 
			
		||||
%.i : %.c
 | 
			
		||||
	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
 | 
			
		||||
	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Target: clean project.
 | 
			
		||||
| 
						 | 
				
			
			@ -710,3 +710,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null)
 | 
			
		|||
build elf hex eep lss sym coff extcoff doxygen clean          \
 | 
			
		||||
clean_list clean_doxygen program dfu flip flip-ee dfu-ee      \
 | 
			
		||||
debug gdb-config
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -30,11 +30,11 @@
 | 
			
		|||
 | 
			
		||||
/** \file
 | 
			
		||||
 *
 | 
			
		||||
 *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special 
 | 
			
		||||
 *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special
 | 
			
		||||
 *  computer-readable structures which the host requests upon device enumeration, to determine
 | 
			
		||||
 *  the device's capabilities and functions.  
 | 
			
		||||
 *  the device's capabilities and functions.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
#include "Descriptors.h"
 | 
			
		||||
 | 
			
		||||
/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall
 | 
			
		||||
| 
						 | 
				
			
			@ -45,22 +45,22 @@
 | 
			
		|||
USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
 | 
			
		||||
{
 | 
			
		||||
	.Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.USBSpecification       = VERSION_BCD(01.10),
 | 
			
		||||
	.Class                  = 0x02,
 | 
			
		||||
	.SubClass               = 0x00,
 | 
			
		||||
	.Protocol               = 0x00,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
	.Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.VendorID               = 0x03EB,
 | 
			
		||||
	.ProductID              = 0x204C,
 | 
			
		||||
	.ReleaseNumber          = VERSION_BCD(00.01),
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.ManufacturerStrIndex   = 0x01,
 | 
			
		||||
	.ProductStrIndex        = 0x02,
 | 
			
		||||
	.SerialNumStrIndex      = NO_DESCRIPTOR,
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -71,102 +71,102 @@ USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
 | 
			
		|||
 */
 | 
			
		||||
USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		||||
{
 | 
			
		||||
	.Config = 
 | 
			
		||||
	.Config =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},
 | 
			
		||||
 | 
			
		||||
			.TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),
 | 
			
		||||
			.TotalInterfaces        = 2,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.ConfigurationNumber    = 1,
 | 
			
		||||
			.ConfigurationStrIndex  = NO_DESCRIPTOR,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.ConfigAttributes       = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)
 | 
			
		||||
		},
 | 
			
		||||
		
 | 
			
		||||
	.CDC_CCI_Interface = 
 | 
			
		||||
 | 
			
		||||
	.CDC_CCI_Interface =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 | 
			
		||||
 | 
			
		||||
			.InterfaceNumber        = 0,
 | 
			
		||||
			.AlternateSetting       = 0,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.TotalEndpoints         = 1,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.Class                  = 0x02,
 | 
			
		||||
			.SubClass               = 0x02,
 | 
			
		||||
			.Protocol               = 0xFF,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.InterfaceStrIndex      = NO_DESCRIPTOR
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.CDC_Functional_Header = 
 | 
			
		||||
	.CDC_Functional_Header =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), .Type = DTYPE_CSInterface},
 | 
			
		||||
			.Subtype                = CDC_DSUBTYPE_CSInterface_Header,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.CDCSpecification       = VERSION_BCD(01.10),
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.CDC_Functional_ACM = 
 | 
			
		||||
	.CDC_Functional_ACM =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = DTYPE_CSInterface},
 | 
			
		||||
			.Subtype                = CDC_DSUBTYPE_CSInterface_ACM,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.Capabilities           = 0x00,
 | 
			
		||||
		},
 | 
			
		||||
		
 | 
			
		||||
	.CDC_Functional_Union = 
 | 
			
		||||
 | 
			
		||||
	.CDC_Functional_Union =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = DTYPE_CSInterface},
 | 
			
		||||
			.Subtype                = CDC_DSUBTYPE_CSInterface_Union,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.MasterInterfaceNumber  = 0,
 | 
			
		||||
			.SlaveInterfaceNumber   = 1,
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.CDC_NotificationEndpoint = 
 | 
			
		||||
	.CDC_NotificationEndpoint =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_NOTIFICATION_EPNUM),
 | 
			
		||||
			.Attributes             = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
 | 
			
		||||
			.EndpointSize           = CDC_NOTIFICATION_EPSIZE,
 | 
			
		||||
			.PollingIntervalMS      = 0x02
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.CDC_DCI_Interface = 
 | 
			
		||||
	.CDC_DCI_Interface =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 | 
			
		||||
 | 
			
		||||
			.InterfaceNumber        = 1,
 | 
			
		||||
			.AlternateSetting       = 0,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.TotalEndpoints         = 2,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.Class                  = 0x0A,
 | 
			
		||||
			.SubClass               = 0x00,
 | 
			
		||||
			.Protocol               = 0x00,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.InterfaceStrIndex      = NO_DESCRIPTOR
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.RNDIS_DataOutEndpoint = 
 | 
			
		||||
	.RNDIS_DataOutEndpoint =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
 | 
			
		||||
			 
 | 
			
		||||
 | 
			
		||||
			.EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC_RX_EPNUM),
 | 
			
		||||
			.Attributes             = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
 | 
			
		||||
			.EndpointSize           = CDC_TXRX_EPSIZE,
 | 
			
		||||
			.PollingIntervalMS      = 0x00
 | 
			
		||||
		},
 | 
			
		||||
		
 | 
			
		||||
	.RNDIS_DataInEndpoint = 
 | 
			
		||||
 | 
			
		||||
	.RNDIS_DataInEndpoint =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_TX_EPNUM),
 | 
			
		||||
			.Attributes             = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
 | 
			
		||||
			.EndpointSize           = CDC_TXRX_EPSIZE,
 | 
			
		||||
| 
						 | 
				
			
			@ -181,7 +181,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		|||
USB_Descriptor_String_t PROGMEM LanguageString =
 | 
			
		||||
{
 | 
			
		||||
	.Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.UnicodeString          = {LANGUAGE_ID_ENG}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -192,7 +192,7 @@ USB_Descriptor_String_t PROGMEM LanguageString =
 | 
			
		|||
USB_Descriptor_String_t PROGMEM ManufacturerString =
 | 
			
		||||
{
 | 
			
		||||
	.Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.UnicodeString          = L"Dean Camera"
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -203,7 +203,7 @@ USB_Descriptor_String_t PROGMEM ManufacturerString =
 | 
			
		|||
USB_Descriptor_String_t PROGMEM ProductString =
 | 
			
		||||
{
 | 
			
		||||
	.Header                 = {.Size = USB_STRING_LEN(19), .Type = DTYPE_String},
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.UnicodeString          = L"LUFA RNDIS CDC Demo"
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -229,7 +229,7 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		|||
			Address = &DeviceDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Configuration: 
 | 
			
		||||
		case DTYPE_Configuration:
 | 
			
		||||
			Address = &ConfigurationDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
			
		||||
			break;
 | 
			
		||||
| 
						 | 
				
			
			@ -249,10 +249,11 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		|||
					Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			break;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	*DescriptorAddress = Address;
 | 
			
		||||
	return Size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -39,7 +39,7 @@
 | 
			
		|||
	/* Includes: */
 | 
			
		||||
		#include <LUFA/Drivers/USB/USB.h>
 | 
			
		||||
		#include <LUFA/Drivers/USB/Class/RNDIS.h>
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		#include <avr/pgmspace.h>
 | 
			
		||||
 | 
			
		||||
	/* Macros: */
 | 
			
		||||
| 
						 | 
				
			
			@ -47,10 +47,10 @@
 | 
			
		|||
		#define CDC_NOTIFICATION_EPNUM         3
 | 
			
		||||
 | 
			
		||||
		/** Endpoint number of the CDC device-to-host data IN endpoint. */
 | 
			
		||||
		#define CDC_TX_EPNUM                   1	
 | 
			
		||||
		#define CDC_TX_EPNUM                   1
 | 
			
		||||
 | 
			
		||||
		/** Endpoint number of the CDC host-to-device data OUT endpoint. */
 | 
			
		||||
		#define CDC_RX_EPNUM                   2	
 | 
			
		||||
		#define CDC_RX_EPNUM                   2
 | 
			
		||||
 | 
			
		||||
		/** Size in bytes of the CDC device-to-host notification IN endpoint. */
 | 
			
		||||
		#define CDC_NOTIFICATION_EPSIZE        8
 | 
			
		||||
| 
						 | 
				
			
			@ -83,3 +83,4 @@
 | 
			
		|||
		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -34,7 +34,7 @@
 | 
			
		|||
 *  conversion of physical MAC addresses to protocol IP addresses between the host and the
 | 
			
		||||
 *  device.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
#include "ARP.h"
 | 
			
		||||
 | 
			
		||||
/** Processes an ARP packet inside an Ethernet frame, and writes the appropriate response
 | 
			
		||||
| 
						 | 
				
			
			@ -59,7 +59,7 @@ int16_t ARP_ProcessARPPacket(void* InDataStart,
 | 
			
		|||
	    (SwapEndian_16(ARPHeaderIN->Operation) == ARP_OPERATION_REQUEST))
 | 
			
		||||
	{
 | 
			
		||||
		/* If the ARP packet is requesting the MAC or IP of the virtual webserver, return the response */
 | 
			
		||||
		if (IP_COMPARE(&ARPHeaderIN->TPA, &ServerIPAddress) || 
 | 
			
		||||
		if (IP_COMPARE(&ARPHeaderIN->TPA, &ServerIPAddress) ||
 | 
			
		||||
		    MAC_COMPARE(&ARPHeaderIN->THA, &ServerMACAddress))
 | 
			
		||||
		{
 | 
			
		||||
			/* Fill out the ARP response header */
 | 
			
		||||
| 
						 | 
				
			
			@ -81,6 +81,7 @@ int16_t ARP_ProcessARPPacket(void* InDataStart,
 | 
			
		|||
			return sizeof(ARP_Header_t);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	return NO_RESPONSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -32,18 +32,18 @@
 | 
			
		|||
 *
 | 
			
		||||
 *  Header file for ARP.c.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
#ifndef _ARP_H_
 | 
			
		||||
#define _ARP_H_
 | 
			
		||||
 | 
			
		||||
	/* Includes: */
 | 
			
		||||
		#include <avr/io.h>
 | 
			
		||||
		#include <string.h>
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		#include "EthernetProtocols.h"
 | 
			
		||||
		#include "Ethernet.h"
 | 
			
		||||
		#include "ProtocolDecoders.h"
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	/* Macros: */
 | 
			
		||||
		/** ARP header operation constant, indicating a request from a host for an address translation. */
 | 
			
		||||
		#define ARP_OPERATION_REQUEST            1
 | 
			
		||||
| 
						 | 
				
			
			@ -57,19 +57,20 @@
 | 
			
		|||
		{
 | 
			
		||||
			uint16_t      HardwareType; /**< Hardware type constant, indicating the hardware used */
 | 
			
		||||
			uint16_t      ProtocolType; /**< Protocol being resolved, usually ETHERTYPE_IPV4 */
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			uint8_t       HLEN; /**< Length in bytes of the source/destination hardware addresses */
 | 
			
		||||
			uint8_t       PLEN; /**< Length in bytes of the source/destination protocol addresses */
 | 
			
		||||
			uint16_t      Operation; /**< Type of operation, either ARP_OPERATION_REQUEST or ARP_OPERATION_REPLY */
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			MAC_Address_t SHA; /**< Sender's hardware address */
 | 
			
		||||
			IP_Address_t  SPA; /**< Sender's protocol address */
 | 
			
		||||
			MAC_Address_t THA; /**< Target's hardware address */
 | 
			
		||||
			IP_Address_t  TPA; /**< Target's protocol address */
 | 
			
		||||
		} ARP_Header_t;
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	/* Function Prototypes: */
 | 
			
		||||
		int16_t ARP_ProcessARPPacket(void* InDataStart,
 | 
			
		||||
		                             void* OutDataStart);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -34,7 +34,7 @@
 | 
			
		|||
 *  handles the automatic IP negotiation to the host, so that the host will use the provided
 | 
			
		||||
 *  IP address given to it by the device.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
#include "DHCP.h"
 | 
			
		||||
 | 
			
		||||
/** Processes a DHCP packet inside an Ethernet frame, and writes the appropriate response
 | 
			
		||||
| 
						 | 
				
			
			@ -53,7 +53,7 @@ int16_t DHCP_ProcessDHCPPacket(void* IPHeaderInStart,
 | 
			
		|||
	IP_Header_t*   IPHeaderIN    = (IP_Header_t*)IPHeaderInStart;
 | 
			
		||||
	DHCP_Header_t* DHCPHeaderIN  = (DHCP_Header_t*)DHCPHeaderInStart;
 | 
			
		||||
	DHCP_Header_t* DHCPHeaderOUT = (DHCP_Header_t*)DHCPHeaderOutStart;
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	uint8_t* DHCPOptionsINStart  = (uint8_t*)(DHCPHeaderInStart  + sizeof(DHCP_Header_t));
 | 
			
		||||
	uint8_t* DHCPOptionsOUTStart = (uint8_t*)(DHCPHeaderOutStart + sizeof(DHCP_Header_t));
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -73,7 +73,7 @@ int16_t DHCP_ProcessDHCPPacket(void* IPHeaderInStart,
 | 
			
		|||
	DHCPHeaderOUT->YourIP                = ClientIPAddress;
 | 
			
		||||
	memmove(&DHCPHeaderOUT->ClientHardwareAddress, &DHCPHeaderIN->ClientHardwareAddress, sizeof(MAC_Address_t));
 | 
			
		||||
	DHCPHeaderOUT->Cookie                = SwapEndian_32(DHCP_MAGIC_COOKIE);
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Alter the incoming IP packet header so that the corrected IP source and destinations are used - this means that
 | 
			
		||||
	   when the response IP header is generated, it will use the corrected addresses and not the null/broatcast addresses */
 | 
			
		||||
	IPHeaderIN->SourceAddress      = ClientIPAddress;
 | 
			
		||||
| 
						 | 
				
			
			@ -81,7 +81,7 @@ int16_t DHCP_ProcessDHCPPacket(void* IPHeaderInStart,
 | 
			
		|||
 | 
			
		||||
	/* Process the incoming DHCP packet options */
 | 
			
		||||
	while (DHCPOptionsINStart[0] != DHCP_OPTION_END)
 | 
			
		||||
	{	
 | 
			
		||||
	{
 | 
			
		||||
		/* Find the Message Type DHCP option, to determine the type of DHCP packet */
 | 
			
		||||
		if (DHCPOptionsINStart[0] == DHCP_OPTION_MESSAGETYPE)
 | 
			
		||||
		{
 | 
			
		||||
| 
						 | 
				
			
			@ -107,14 +107,15 @@ int16_t DHCP_ProcessDHCPPacket(void* IPHeaderInStart,
 | 
			
		|||
				DHCPOptionsOUTStart     += sizeof(IP_Address_t);
 | 
			
		||||
 | 
			
		||||
				*(DHCPOptionsOUTStart++) = DHCP_OPTION_END;
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
				return (sizeof(DHCP_Header_t) + 12 + sizeof(IP_Address_t));
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/* Go to the next DHCP option - skip one byte if option is a padding byte, else skip the complete option's size */
 | 
			
		||||
		DHCPOptionsINStart += ((DHCPOptionsINStart[0] == DHCP_OPTION_PAD) ? 1 : (DHCPOptionsINStart[1] + 2));
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	return NO_RESPONSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -32,14 +32,14 @@
 | 
			
		|||
 *
 | 
			
		||||
 *  Header file for DHCP.c.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
#ifndef _DHCP_H_
 | 
			
		||||
#define _DHCP_H_
 | 
			
		||||
 | 
			
		||||
	/* Includes: */
 | 
			
		||||
		#include <avr/io.h>
 | 
			
		||||
		#include <string.h>
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
		#include "EthernetProtocols.h"
 | 
			
		||||
		#include "Ethernet.h"
 | 
			
		||||
		#include "ProtocolDecoders.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -50,13 +50,13 @@
 | 
			
		|||
 | 
			
		||||
		/** DHCP operation constant, indicating a reply from a DHCP server to a host. */
 | 
			
		||||
		#define DHCP_OP_BOOTREPLY         0x02
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/** Hardware type constant, indicating Ethernet as a carrier. */
 | 
			
		||||
		#define DHCP_HTYPE_ETHERNET       0x01
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/** Magic boot protocol "cookie", inserted into all BOOTP packets (BOOTP is the carrier of DHCP). */
 | 
			
		||||
		#define DHCP_MAGIC_COOKIE         0x63825363
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/** DHCP option list entry header, indicating that a subnet mask will follow. */
 | 
			
		||||
		#define DHCP_OPTION_SUBNETMASK    1
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -71,7 +71,7 @@
 | 
			
		|||
 | 
			
		||||
		/** DHCP option list entry header, indicating the end of option data. */
 | 
			
		||||
		#define DHCP_OPTION_END           255
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
		/** Message type constant, used in the DHCP option data field, requesting that a DHCP server offer an IP address. */
 | 
			
		||||
		#define DHCP_MESSAGETYPE_DISCOVER 1
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -106,16 +106,16 @@
 | 
			
		|||
 | 
			
		||||
			uint16_t ElapsedSeconds; /**< Elapsed seconds since the request was made */
 | 
			
		||||
			uint16_t Flags; /**< BOOTP packet flags */
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			IP_Address_t ClientIP; /**< Client IP address, if already leased an IP */
 | 
			
		||||
			IP_Address_t YourIP; /**< Client IP address */
 | 
			
		||||
			IP_Address_t NextServerIP; /**< Legacy BOOTP protocol field, unused for DHCP */
 | 
			
		||||
			IP_Address_t RelayAgentIP; /**< Legacy BOOTP protocol field, unused for DHCP */
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			uint8_t ClientHardwareAddress[16]; /**< Hardware (MAC) address of the client making a request to the DHCP server */
 | 
			
		||||
			uint8_t ServerHostnameString[64]; /**< Legacy BOOTP protocol field, unused for DHCP */
 | 
			
		||||
			uint8_t BootFileName[128]; /**< Legacy BOOTP protocol field, unused for DHCP */
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			uint32_t Cookie; /**< Magic BOOTP protocol cookie to indicate a valid packet */
 | 
			
		||||
		} DHCP_Header_t;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -125,3 +125,4 @@
 | 
			
		|||
		                               void* DHCPHeaderOutStart);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -34,7 +34,7 @@
 | 
			
		|||
 *  frames sent and received, deferring the processing of sub-packet protocols to the appropriate
 | 
			
		||||
 *  protocol handlers, such as DHCP or ARP.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
#include "Ethernet.h"
 | 
			
		||||
 | 
			
		||||
/** Constant for convenience when checking against or setting a MAC address to the virtual server MAC address. */
 | 
			
		||||
| 
						 | 
				
			
			@ -64,9 +64,9 @@ void Ethernet_ProcessPacket(Ethernet_Frame_Info_t* const FrameIN,
 | 
			
		|||
	/* Cast the incoming Ethernet frame to the Ethernet header type */
 | 
			
		||||
	Ethernet_Frame_Header_t* FrameINHeader  = (Ethernet_Frame_Header_t*)&FrameIN->FrameData;
 | 
			
		||||
	Ethernet_Frame_Header_t* FrameOUTHeader = (Ethernet_Frame_Header_t*)&FrameOUT->FrameData;
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	int16_t                  RetSize        = NO_RESPONSE;
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Ensure frame is addressed to either all (broadcast) or the virtual webserver, and is a type II frame */
 | 
			
		||||
	if ((MAC_COMPARE(&FrameINHeader->Destination, &ServerMACAddress) ||
 | 
			
		||||
	     MAC_COMPARE(&FrameINHeader->Destination, &BroadcastMACAddress)) &&
 | 
			
		||||
| 
						 | 
				
			
			@ -78,14 +78,14 @@ void Ethernet_ProcessPacket(Ethernet_Frame_Info_t* const FrameIN,
 | 
			
		|||
			case ETHERTYPE_ARP:
 | 
			
		||||
				RetSize = ARP_ProcessARPPacket(&FrameIN->FrameData[sizeof(Ethernet_Frame_Header_t)],
 | 
			
		||||
				                               &FrameOUT->FrameData[sizeof(Ethernet_Frame_Header_t)]);
 | 
			
		||||
				break;		
 | 
			
		||||
				break;
 | 
			
		||||
			case ETHERTYPE_IPV4:
 | 
			
		||||
				RetSize = IP_ProcessIPPacket(FrameIN,
 | 
			
		||||
				                             &FrameIN->FrameData[sizeof(Ethernet_Frame_Header_t)],
 | 
			
		||||
				                             &FrameOUT->FrameData[sizeof(Ethernet_Frame_Header_t)]);
 | 
			
		||||
				break;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/* Protocol processing routine has filled a response, complete the ethernet frame header */
 | 
			
		||||
		if (RetSize > 0)
 | 
			
		||||
		{
 | 
			
		||||
| 
						 | 
				
			
			@ -93,7 +93,7 @@ void Ethernet_ProcessPacket(Ethernet_Frame_Info_t* const FrameIN,
 | 
			
		|||
			FrameOUTHeader->Source          = ServerMACAddress;
 | 
			
		||||
			FrameOUTHeader->Destination     = FrameINHeader->Source;
 | 
			
		||||
			FrameOUTHeader->EtherType       = FrameINHeader->EtherType;
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			/* Set the response length in the buffer and indicate that a response is ready to be sent */
 | 
			
		||||
			FrameOUT->FrameLength           = (sizeof(Ethernet_Frame_Header_t) + RetSize);
 | 
			
		||||
			FrameOUT->FrameInBuffer         = true;
 | 
			
		||||
| 
						 | 
				
			
			@ -124,9 +124,10 @@ uint16_t Ethernet_Checksum16(void* Data,
 | 
			
		|||
 | 
			
		||||
	for (uint16_t CurrWord = 0; CurrWord < (Bytes >> 1); CurrWord++)
 | 
			
		||||
	  Checksum += Words[CurrWord];
 | 
			
		||||
	  
 | 
			
		||||
 | 
			
		||||
	while (Checksum & 0xFFFF0000)
 | 
			
		||||
	  Checksum = ((Checksum & 0xFFFF) + (Checksum >> 16));
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	return ~Checksum;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -32,14 +32,14 @@
 | 
			
		|||
 *
 | 
			
		||||
 *  Header file for Ethernet.c.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
#ifndef _ETHERNET_H_
 | 
			
		||||
#define _ETHERNET_H_
 | 
			
		||||
 | 
			
		||||
	/* Includes: */
 | 
			
		||||
		#include <avr/io.h>
 | 
			
		||||
		#include <string.h>
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		#include <LUFA/Drivers/USB/Class/RNDIS.h>
 | 
			
		||||
 | 
			
		||||
		#include "EthernetProtocols.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -50,31 +50,31 @@
 | 
			
		|||
		#include "DHCP.h"
 | 
			
		||||
		#include "ARP.h"
 | 
			
		||||
		#include "IP.h"
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	/* Macros: */
 | 
			
		||||
		/** Physical MAC address of the USB RNDIS network adapter. */
 | 
			
		||||
		#define ADAPTER_MAC_ADDRESS              {0x02, 0x00, 0x02, 0x00, 0x02, 0x00}
 | 
			
		||||
 | 
			
		||||
		/** Physical MAC address of the virtual server on the network. */
 | 
			
		||||
		#define SERVER_MAC_ADDRESS               {0x00, 0x01, 0x00, 0x01, 0x00, 0x01}		
 | 
			
		||||
		#define SERVER_MAC_ADDRESS               {0x00, 0x01, 0x00, 0x01, 0x00, 0x01}
 | 
			
		||||
 | 
			
		||||
		/** Physical MAC address of the network broadcast address. */
 | 
			
		||||
		#define BROADCAST_MAC_ADDRESS            {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
		/** Performs a comparison between two MAC addresses, indicating if they are identical.
 | 
			
		||||
		 *  
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \param[in] MAC1  First MAC address
 | 
			
		||||
		 *  \param[in] MAC2  Second MAC address
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \return True if the addresses match, false otherwise
 | 
			
		||||
		 */
 | 
			
		||||
		#define MAC_COMPARE(MAC1, MAC2)          (memcmp(MAC1, MAC2, sizeof(MAC_Address_t)) == 0)
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/** Minimum size of an Ethernet packet in bytes, to conform to the Ethernet V2 packet standard. */
 | 
			
		||||
		#define ETHERNET_VER2_MINSIZE            0x0600
 | 
			
		||||
 | 
			
		||||
		/** Return value for all sub protocol handling routines, indicating that no response packet has been generated. */
 | 
			
		||||
		#define NO_RESPONSE                      0		
 | 
			
		||||
		#define NO_RESPONSE                      0
 | 
			
		||||
 | 
			
		||||
		/** Return value for all sub protocol handling routines, indicating that the packet has not yet been handled. */
 | 
			
		||||
		#define NO_PROCESS                       -1
 | 
			
		||||
| 
						 | 
				
			
			@ -87,18 +87,19 @@
 | 
			
		|||
			MAC_Address_t Source; /**< Physics MAC address of the packet source */
 | 
			
		||||
			uint16_t      EtherType; /**< Ethernet packet sub-protocol type, for Ethernet V2 packets */
 | 
			
		||||
		} Ethernet_Frame_Header_t;
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	/* External Variables: */
 | 
			
		||||
		extern const MAC_Address_t ServerMACAddress;
 | 
			
		||||
		extern const IP_Address_t  ServerIPAddress;
 | 
			
		||||
		extern const MAC_Address_t BroadcastMACAddress;
 | 
			
		||||
		extern const IP_Address_t  BroadcastIPAddress;
 | 
			
		||||
		extern const IP_Address_t  ClientIPAddress;
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	/* Function Prototypes: */
 | 
			
		||||
		void     Ethernet_ProcessPacket(Ethernet_Frame_Info_t* const FrameIN,
 | 
			
		||||
		                                Ethernet_Frame_Info_t* const FrameOUT);
 | 
			
		||||
		uint16_t Ethernet_Checksum16(void* Data,
 | 
			
		||||
		                             uint16_t Bytes);
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -63,7 +63,7 @@
 | 
			
		|||
		#define ETHERTYPE_FIBRECHANNEL           0x8906
 | 
			
		||||
		#define ETHERTYPE_QINQ                   0x9100
 | 
			
		||||
		#define ETHERTYPE_VLLT                   0xCAFE
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		#define PROTOCOL_ICMP                    1
 | 
			
		||||
		#define PROTOCOL_IGMP                    2
 | 
			
		||||
		#define PROTOCOL_TCP                     6
 | 
			
		||||
| 
						 | 
				
			
			@ -71,7 +71,7 @@
 | 
			
		|||
		#define PROTOCOL_OSPF                    89
 | 
			
		||||
		#define PROTOCOL_SCTP                    132
 | 
			
		||||
 | 
			
		||||
	/* Type Defines: */		
 | 
			
		||||
	/* Type Defines: */
 | 
			
		||||
		/** Type define for a protocol IP address of a device on a network. */
 | 
			
		||||
		typedef struct
 | 
			
		||||
		{
 | 
			
		||||
| 
						 | 
				
			
			@ -79,3 +79,4 @@
 | 
			
		|||
		} IP_Address_t;
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -34,7 +34,7 @@
 | 
			
		|||
 *  Echo requests from the host, to indicate a successful network connection between the host
 | 
			
		||||
 *  and the virtual server.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
#include "ICMP.h"
 | 
			
		||||
 | 
			
		||||
/** Processes an ICMP packet inside an Ethernet frame, and writes the appropriate response
 | 
			
		||||
| 
						 | 
				
			
			@ -64,9 +64,9 @@ int16_t ICMP_ProcessICMPPacket(Ethernet_Frame_Info_t* const FrameIN,
 | 
			
		|||
		ICMPHeaderOUT->Checksum = 0;
 | 
			
		||||
		ICMPHeaderOUT->Id       = ICMPHeaderIN->Id;
 | 
			
		||||
		ICMPHeaderOUT->Sequence = ICMPHeaderIN->Sequence;
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		intptr_t DataSize = FrameIN->FrameLength - ((((intptr_t)InDataStart + sizeof(ICMP_Header_t)) - (intptr_t)FrameIN->FrameData));
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/* Copy the remaining payload to the response - echo requests should echo back any sent data */
 | 
			
		||||
		memmove(&((uint8_t*)OutDataStart)[sizeof(ICMP_Header_t)],
 | 
			
		||||
		        &((uint8_t*)InDataStart)[sizeof(ICMP_Header_t)],
 | 
			
		||||
| 
						 | 
				
			
			@ -77,6 +77,7 @@ int16_t ICMP_ProcessICMPPacket(Ethernet_Frame_Info_t* const FrameIN,
 | 
			
		|||
		/* Return the size of the response so far */
 | 
			
		||||
		return (DataSize + sizeof(ICMP_Header_t));
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	return NO_RESPONSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -39,18 +39,18 @@
 | 
			
		|||
	/* Includes: */
 | 
			
		||||
		#include <avr/io.h>
 | 
			
		||||
		#include <string.h>
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		#include "EthernetProtocols.h"
 | 
			
		||||
		#include "Ethernet.h"
 | 
			
		||||
		#include "ProtocolDecoders.h"
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Macros: */
 | 
			
		||||
		/** ICMP message type constant, indicating an ICMP ECHO Reply message. */
 | 
			
		||||
		#define ICMP_TYPE_ECHOREPLY              0
 | 
			
		||||
 | 
			
		||||
		/** ICMP message type constant, indicating a packet destination is unreachable. */
 | 
			
		||||
		#define ICMP_TYPE_DESTINATIONUNREACHABLE 3
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/** ICMP message type constant, indicating an ICMP Source Quench message. */
 | 
			
		||||
		#define ICMP_TYPE_SOURCEQUENCH           4
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -62,7 +62,7 @@
 | 
			
		|||
 | 
			
		||||
		/** ICMP message type constant, indicating an ICMP Time Exceeded message. */
 | 
			
		||||
		#define ICMP_TYPE_TIMEEXCEEDED           11
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Type Defines: */
 | 
			
		||||
		/** Type define for an ICMP message header. */
 | 
			
		||||
		typedef struct
 | 
			
		||||
| 
						 | 
				
			
			@ -73,10 +73,11 @@
 | 
			
		|||
			uint16_t      Id; /**< Id of the ICMP message */
 | 
			
		||||
			uint16_t      Sequence; /**< Sequence number of the ICMP message, to link together message responses */
 | 
			
		||||
		} ICMP_Header_t;
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	/* Function Prototypes: */
 | 
			
		||||
		int16_t ICMP_ProcessICMPPacket(Ethernet_Frame_Info_t* const FrameIN,
 | 
			
		||||
		                               void* InDataStart,
 | 
			
		||||
		                               void* OutDataStart);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -33,7 +33,7 @@
 | 
			
		|||
 *  Internet Protocol (IP) packet handling routines. This protocol handles IP packets from the
 | 
			
		||||
 *  host which typically encapsulate other protocols such as ICMP, UDP and TCP.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
#include "IP.h"
 | 
			
		||||
 | 
			
		||||
/** Processes an IP packet inside an Ethernet frame, and writes the appropriate response
 | 
			
		||||
| 
						 | 
				
			
			@ -67,7 +67,7 @@ int16_t IP_ProcessIPPacket(Ethernet_Frame_Info_t* const FrameIN,
 | 
			
		|||
	{
 | 
			
		||||
		return NO_RESPONSE;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Pass off the IP payload to the appropriate protocol processing routine */
 | 
			
		||||
	switch (IPHeaderIN->Protocol)
 | 
			
		||||
	{
 | 
			
		||||
| 
						 | 
				
			
			@ -79,15 +79,15 @@ int16_t IP_ProcessIPPacket(Ethernet_Frame_Info_t* const FrameIN,
 | 
			
		|||
		case PROTOCOL_TCP:
 | 
			
		||||
			RetSize = TCP_ProcessTCPPacket(InDataStart,
 | 
			
		||||
			                               &((uint8_t*)InDataStart)[HeaderLengthBytes],
 | 
			
		||||
			                               &((uint8_t*)OutDataStart)[sizeof(IP_Header_t)]);		
 | 
			
		||||
			                               &((uint8_t*)OutDataStart)[sizeof(IP_Header_t)]);
 | 
			
		||||
			break;
 | 
			
		||||
		case PROTOCOL_UDP:
 | 
			
		||||
			RetSize = UDP_ProcessUDPPacket(InDataStart,
 | 
			
		||||
			                               &((uint8_t*)InDataStart)[HeaderLengthBytes],
 | 
			
		||||
			                               &((uint8_t*)OutDataStart)[sizeof(IP_Header_t)]);		
 | 
			
		||||
			                               &((uint8_t*)OutDataStart)[sizeof(IP_Header_t)]);
 | 
			
		||||
			break;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Check to see if the protocol processing routine has filled out a response */
 | 
			
		||||
	if (RetSize > 0)
 | 
			
		||||
	{
 | 
			
		||||
| 
						 | 
				
			
			@ -104,12 +104,13 @@ int16_t IP_ProcessIPPacket(Ethernet_Frame_Info_t* const FrameIN,
 | 
			
		|||
		IPHeaderOUT->TTL                = DEFAULT_TTL;
 | 
			
		||||
		IPHeaderOUT->SourceAddress      = IPHeaderIN->DestinationAddress;
 | 
			
		||||
		IPHeaderOUT->DestinationAddress = IPHeaderIN->SourceAddress;
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		IPHeaderOUT->HeaderChecksum     = Ethernet_Checksum16(IPHeaderOUT, sizeof(IP_Header_t));
 | 
			
		||||
						
 | 
			
		||||
 | 
			
		||||
		/* Return the size of the response so far */
 | 
			
		||||
		return (sizeof(IP_Header_t) + RetSize);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	return RetSize;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -32,18 +32,18 @@
 | 
			
		|||
 *
 | 
			
		||||
 *  Header file for IP.c.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
#ifndef _IP_H_
 | 
			
		||||
#define _IP_H_
 | 
			
		||||
 | 
			
		||||
	/* Includes: */
 | 
			
		||||
		#include <avr/io.h>
 | 
			
		||||
		#include <string.h>
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		#include "EthernetProtocols.h"
 | 
			
		||||
		#include "Ethernet.h"
 | 
			
		||||
		#include "ProtocolDecoders.h"
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Macros: */
 | 
			
		||||
		/** Protocol IP address of the host (client) machine, once assigned by DHCP. */
 | 
			
		||||
		#define CLIENT_IP_ADDRESS                { 10,     0,    0,    1}
 | 
			
		||||
| 
						 | 
				
			
			@ -58,16 +58,16 @@
 | 
			
		|||
		 *  is reached.
 | 
			
		||||
		 */
 | 
			
		||||
		#define DEFAULT_TTL                      128
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/** Performs a comparison between two IP addresses, indicating if they are identical.
 | 
			
		||||
		 *  
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \param[in] IP1  First IP address
 | 
			
		||||
		 *  \param[in] IP2  Second IP address
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \return True if the addresses match, false otherwise
 | 
			
		||||
		 */
 | 
			
		||||
		#define IP_COMPARE(IP1, IP2)             (memcmp(IP1, IP2, sizeof(IP_Address_t)) == 0)
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	/* Type Defines: */
 | 
			
		||||
		/** Type define of an IP packet header. */
 | 
			
		||||
		typedef struct
 | 
			
		||||
| 
						 | 
				
			
			@ -84,14 +84,15 @@
 | 
			
		|||
			uint8_t        TTL; /**< Maximum allowable number of hops to reach the packet destination */
 | 
			
		||||
			uint8_t        Protocol; /**< Encapsulated protocol type */
 | 
			
		||||
			uint16_t       HeaderChecksum; /**< Ethernet checksum of the IP header */
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			IP_Address_t  SourceAddress; /**< Source protocol IP address of the packet */
 | 
			
		||||
			IP_Address_t  DestinationAddress; /**< Destination protocol IP address of the packet */
 | 
			
		||||
		} IP_Header_t;
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	/* Function Prototypes: */
 | 
			
		||||
		int16_t IP_ProcessIPPacket(Ethernet_Frame_Info_t* const FrameIN,
 | 
			
		||||
		                           void* InDataStart,
 | 
			
		||||
		                           void* OutDataStart);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -31,7 +31,7 @@
 | 
			
		|||
/* Protocol decoders for Ethernet, TCP, IP, ICMP and ARP. Each of these routines
 | 
			
		||||
   accepts a header to the appropriate protocol and prints out pertinent information
 | 
			
		||||
   on the packet through the serial port.
 | 
			
		||||
   
 | 
			
		||||
 | 
			
		||||
   To disable printing of a specific protocol, define the token NO_DECODE_{Protocol}
 | 
			
		||||
   in the project makefile, and pass it to the compiler using the -D switch.
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -46,7 +46,7 @@
 | 
			
		|||
 *  Packet decoding routines can be disabled by defining NO_DECODE_{Protocol Name} in the project makefile
 | 
			
		||||
 *  and passing it to the compiler via the -D switch.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
#include "ProtocolDecoders.h"
 | 
			
		||||
 | 
			
		||||
/** Decodes an Ethernet frame header and prints its contents to through the USART in a human readable format.
 | 
			
		||||
| 
						 | 
				
			
			@ -57,9 +57,9 @@ void DecodeEthernetFrameHeader(Ethernet_Frame_Info_t* const FrameINData)
 | 
			
		|||
{
 | 
			
		||||
	#if !defined(NO_DECODE_ETHERNET)
 | 
			
		||||
	Ethernet_Frame_Header_t* FrameHeader = (Ethernet_Frame_Header_t*)FrameINData->FrameData;
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	printf_P(PSTR("\r\n"));
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	printf_P(PSTR("  ETHERNET\r\n"));
 | 
			
		||||
	printf_P(PSTR("  + Frame Size: %u\r\n"), FrameINData->FrameLength);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -98,7 +98,7 @@ void DecodeEthernetFrameHeader(Ethernet_Frame_Info_t* const FrameINData)
 | 
			
		|||
void DecodeARPHeader(void* InDataStart)
 | 
			
		||||
{
 | 
			
		||||
	#if !defined(NO_DECODE_ARP)
 | 
			
		||||
	ARP_Header_t* ARPHeader = (ARP_Header_t*)InDataStart;	
 | 
			
		||||
	ARP_Header_t* ARPHeader = (ARP_Header_t*)InDataStart;
 | 
			
		||||
 | 
			
		||||
	printf_P(PSTR("   \\\r\n    ARP\r\n"));
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -106,12 +106,12 @@ void DecodeARPHeader(void* InDataStart)
 | 
			
		|||
	    !(MAC_COMPARE(&ARPHeader->THA, &ServerMACAddress)))
 | 
			
		||||
	{
 | 
			
		||||
		printf_P(PSTR("    + NOT ADDRESSED TO DEVICE\r\n"));
 | 
			
		||||
		return;		
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	printf_P(PSTR("    + Protocol: %x\r\n"), SwapEndian_16(ARPHeader->ProtocolType));
 | 
			
		||||
	printf_P(PSTR("    + Operation: %u\r\n"), SwapEndian_16(ARPHeader->Operation));
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	if (SwapEndian_16(ARPHeader->ProtocolType) == ETHERTYPE_IPV4)
 | 
			
		||||
	{
 | 
			
		||||
		printf_P(PSTR("    + SHA MAC: %02X:%02X:%02X:%02X:%02X:%02X\r\n"), ARPHeader->SHA.Octets[0],
 | 
			
		||||
| 
						 | 
				
			
			@ -163,14 +163,14 @@ void DecodeIPHeader(void* InDataStart)
 | 
			
		|||
	printf_P(PSTR("    + Header Length: %u Bytes\r\n"), HeaderLengthBytes);
 | 
			
		||||
	printf_P(PSTR("    + Packet Version: %u\r\n"), IPHeader->Version);
 | 
			
		||||
	printf_P(PSTR("    + Total Length: %u\r\n"), SwapEndian_16(IPHeader->TotalLength));
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	printf_P(PSTR("    + Protocol: %u\r\n"), IPHeader->Protocol);
 | 
			
		||||
	printf_P(PSTR("    + TTL: %u\r\n"), IPHeader->TTL);
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	printf_P(PSTR("    + IP Src: %u.%u.%u.%u\r\n"), IPHeader->SourceAddress.Octets[0],
 | 
			
		||||
	                                                IPHeader->SourceAddress.Octets[1],
 | 
			
		||||
	                                                IPHeader->SourceAddress.Octets[2],
 | 
			
		||||
	                                                IPHeader->SourceAddress.Octets[3]);	
 | 
			
		||||
	                                                IPHeader->SourceAddress.Octets[3]);
 | 
			
		||||
 | 
			
		||||
	printf_P(PSTR("    + IP Dst: %u.%u.%u.%u\r\n"), IPHeader->DestinationAddress.Octets[0],
 | 
			
		||||
	                                                IPHeader->DestinationAddress.Octets[1],
 | 
			
		||||
| 
						 | 
				
			
			@ -215,9 +215,9 @@ void DecodeTCPHeader(void* InDataStart)
 | 
			
		|||
 | 
			
		||||
	printf_P(PSTR("     + Sequence Number: %lu\r\n"), SwapEndian_32(TCPHeader->SequenceNumber));
 | 
			
		||||
	printf_P(PSTR("     + Acknowledgment Number: %lu\r\n"), SwapEndian_32(TCPHeader->AcknowledgmentNumber));
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	printf_P(PSTR("     + Flags: 0x%02X\r\n"), TCPHeader->Flags);
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	if (TCP_GetPortState(TCPHeader->DestinationPort) == TCP_Port_Closed)
 | 
			
		||||
	  printf_P(PSTR("     + NOT LISTENING ON DESTINATION PORT\r\n"));
 | 
			
		||||
	#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -272,9 +272,10 @@ void DecodeDHCPHeader(void* InDataStart)
 | 
			
		|||
					break;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		DHCPOptions += ((DHCPOptions[0] == DHCP_OPTION_PAD) ? 1 : (DHCPOptions[1] + 2));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -40,13 +40,13 @@
 | 
			
		|||
		#include <avr/io.h>
 | 
			
		||||
		#include <avr/pgmspace.h>
 | 
			
		||||
		#include <stdio.h>
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		#include <LUFA/Drivers/USB/Class/RNDIS.h>
 | 
			
		||||
		#include <LUFA/Drivers/Peripheral/SerialStream.h>
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		#include "EthernetProtocols.h"
 | 
			
		||||
		#include "Ethernet.h"
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	/* Function Prototypes: */
 | 
			
		||||
		void DecodeEthernetFrameHeader(Ethernet_Frame_Info_t* const FrameINData);
 | 
			
		||||
		void DecodeARPHeader(void* InDataStart);
 | 
			
		||||
| 
						 | 
				
			
			@ -57,3 +57,4 @@
 | 
			
		|||
		void DecodeDHCPHeader(void* InDataStart);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -34,7 +34,7 @@
 | 
			
		|||
 *  and reception of packets to and from devices on a network, to "ports" on the device. It is used in situations where data
 | 
			
		||||
 *  delivery must be reliable and correct, e.g. HTTP, TELNET and most other non-streaming protocols.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
#define  INCLUDE_FROM_TCP_C
 | 
			
		||||
#include "TCP.h"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -64,7 +64,7 @@ void TCP_TCPTask(USB_ClassInfo_RNDIS_Device_t* const RNDISInterfaceInfo)
 | 
			
		|||
		for (uint8_t PTableEntry = 0; PTableEntry < MAX_OPEN_TCP_PORTS; PTableEntry++)
 | 
			
		||||
		{
 | 
			
		||||
			/* Run the application handler for the port */
 | 
			
		||||
			if ((PortStateTable[PTableEntry].Port  == ConnectionStateTable[CSTableEntry].Port) && 
 | 
			
		||||
			if ((PortStateTable[PTableEntry].Port  == ConnectionStateTable[CSTableEntry].Port) &&
 | 
			
		||||
			    (PortStateTable[PTableEntry].State == TCP_Port_Open))
 | 
			
		||||
			{
 | 
			
		||||
				PortStateTable[PTableEntry].ApplicationHandler(&ConnectionStateTable[CSTableEntry],
 | 
			
		||||
| 
						 | 
				
			
			@ -72,14 +72,14 @@ void TCP_TCPTask(USB_ClassInfo_RNDIS_Device_t* const RNDISInterfaceInfo)
 | 
			
		|||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Get pointer to the output frame info struct for convenience */
 | 
			
		||||
	Ethernet_Frame_Info_t* FrameOUT = &RNDISInterfaceInfo->State.FrameOUT;
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Bail out early if there is already a frame waiting to be sent in the Ethernet OUT buffer */
 | 
			
		||||
	if (FrameOUT->FrameInBuffer)
 | 
			
		||||
	  return;
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Send response packets from each application as the TCP packet buffers are filled by the applications */
 | 
			
		||||
	for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)
 | 
			
		||||
	{
 | 
			
		||||
| 
						 | 
				
			
			@ -111,7 +111,7 @@ void TCP_TCPTask(USB_ClassInfo_RNDIS_Device_t* const RNDISInterfaceInfo)
 | 
			
		|||
			TCPHeaderOUT->Reserved             = 0;
 | 
			
		||||
 | 
			
		||||
			memcpy(TCPDataOUT, ConnectionStateTable[CSTableEntry].Info.Buffer.Data, PacketSize);
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			ConnectionStateTable[CSTableEntry].Info.SequenceNumberOut += PacketSize;
 | 
			
		||||
 | 
			
		||||
			TCPHeaderOUT->Checksum             = TCP_Checksum16(TCPHeaderOUT, ServerIPAddress,
 | 
			
		||||
| 
						 | 
				
			
			@ -133,11 +133,11 @@ void TCP_TCPTask(USB_ClassInfo_RNDIS_Device_t* const RNDISInterfaceInfo)
 | 
			
		|||
			IPHeaderOUT->TTL                = DEFAULT_TTL;
 | 
			
		||||
			IPHeaderOUT->SourceAddress      = ServerIPAddress;
 | 
			
		||||
			IPHeaderOUT->DestinationAddress = ConnectionStateTable[CSTableEntry].RemoteAddress;
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			IPHeaderOUT->HeaderChecksum     = Ethernet_Checksum16(IPHeaderOUT, sizeof(IP_Header_t));
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
			PacketSize += sizeof(IP_Header_t);
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
			/* Fill out the response Ethernet frame header */
 | 
			
		||||
			FrameOUTHeader->Source          = ServerMACAddress;
 | 
			
		||||
			FrameOUTHeader->Destination     = (MAC_Address_t){{0x02, 0x00, 0x02, 0x00, 0x02, 0x00}};
 | 
			
		||||
| 
						 | 
				
			
			@ -148,9 +148,9 @@ void TCP_TCPTask(USB_ClassInfo_RNDIS_Device_t* const RNDISInterfaceInfo)
 | 
			
		|||
			/* Set the response length in the buffer and indicate that a response is ready to be sent */
 | 
			
		||||
			FrameOUT->FrameLength           = PacketSize;
 | 
			
		||||
			FrameOUT->FrameInBuffer         = true;
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			ConnectionStateTable[CSTableEntry].Info.Buffer.Ready = false;
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -210,7 +210,7 @@ bool TCP_SetPortState(const uint16_t Port,
 | 
			
		|||
				return true;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/* Port not in table and no room to add it, return failure */
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -237,7 +237,7 @@ uint8_t TCP_GetPortState(const uint16_t Port)
 | 
			
		|||
		if (PortStateTable[PTableEntry].Port == Port)
 | 
			
		||||
		  return PortStateTable[PTableEntry].State;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Port not in table, assume closed */
 | 
			
		||||
	return TCP_Port_Closed;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -270,20 +270,20 @@ bool TCP_SetConnectionState(const uint16_t Port,
 | 
			
		|||
			return true;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)
 | 
			
		||||
	{
 | 
			
		||||
		/* Find empty entry in the table */
 | 
			
		||||
		if (ConnectionStateTable[CSTableEntry].State == TCP_Connection_Closed)
 | 
			
		||||
		{
 | 
			
		||||
			ConnectionStateTable[CSTableEntry].Port          = Port;
 | 
			
		||||
			ConnectionStateTable[CSTableEntry].RemoteAddress = RemoteAddress;			
 | 
			
		||||
			ConnectionStateTable[CSTableEntry].RemoteAddress = RemoteAddress;
 | 
			
		||||
			ConnectionStateTable[CSTableEntry].RemotePort    = RemotePort;
 | 
			
		||||
			ConnectionStateTable[CSTableEntry].State         = State;
 | 
			
		||||
			return true;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -307,12 +307,12 @@ uint8_t TCP_GetConnectionState(const uint16_t Port,
 | 
			
		|||
		if ((ConnectionStateTable[CSTableEntry].Port == Port) &&
 | 
			
		||||
		     IP_COMPARE(&ConnectionStateTable[CSTableEntry].RemoteAddress, &RemoteAddress) &&
 | 
			
		||||
			 ConnectionStateTable[CSTableEntry].RemotePort == RemotePort)
 | 
			
		||||
			 
 | 
			
		||||
 | 
			
		||||
		{
 | 
			
		||||
			return ConnectionStateTable[CSTableEntry].State;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	return TCP_Connection_Closed;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -340,7 +340,7 @@ TCP_ConnectionInfo_t* TCP_GetConnectionInfo(const uint16_t Port,
 | 
			
		|||
			return &ConnectionStateTable[CSTableEntry].Info;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -364,11 +364,11 @@ int16_t TCP_ProcessTCPPacket(void* IPHeaderInStart,
 | 
			
		|||
	TCP_Header_t* TCPHeaderOUT = (TCP_Header_t*)TCPHeaderOutStart;
 | 
			
		||||
 | 
			
		||||
	TCP_ConnectionInfo_t* ConnectionInfo;
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	DecodeTCPHeader(TCPHeaderInStart);
 | 
			
		||||
 | 
			
		||||
	bool PacketResponse = false;
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	/* Check if the destination port is open and allows incoming connections */
 | 
			
		||||
	if (TCP_GetPortState(TCPHeaderIN->DestinationPort) == TCP_Port_Open)
 | 
			
		||||
	{
 | 
			
		||||
| 
						 | 
				
			
			@ -382,8 +382,8 @@ int16_t TCP_ProcessTCPPacket(void* IPHeaderInStart,
 | 
			
		|||
			if (TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,
 | 
			
		||||
			                           TCPHeaderIN->SourcePort, TCP_Connection_Closed))
 | 
			
		||||
			{
 | 
			
		||||
				TCPHeaderOUT->Flags = (TCP_FLAG_RST | TCP_FLAG_ACK);				
 | 
			
		||||
				PacketResponse = true;			
 | 
			
		||||
				TCPHeaderOUT->Flags = (TCP_FLAG_RST | TCP_FLAG_ACK);
 | 
			
		||||
				PacketResponse = true;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
| 
						 | 
				
			
			@ -398,7 +398,7 @@ int16_t TCP_ProcessTCPPacket(void* IPHeaderInStart,
 | 
			
		|||
						if (TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,
 | 
			
		||||
						                           TCPHeaderIN->SourcePort, TCP_Connection_SYNReceived))
 | 
			
		||||
						{
 | 
			
		||||
							TCPHeaderOUT->Flags = (TCP_FLAG_SYN | TCP_FLAG_ACK);						
 | 
			
		||||
							TCPHeaderOUT->Flags = (TCP_FLAG_SYN | TCP_FLAG_ACK);
 | 
			
		||||
 | 
			
		||||
							ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress, TCPHeaderIN->SourcePort);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -410,10 +410,10 @@ int16_t TCP_ProcessTCPPacket(void* IPHeaderInStart,
 | 
			
		|||
						{
 | 
			
		||||
							TCPHeaderOUT->Flags = TCP_FLAG_RST;
 | 
			
		||||
						}
 | 
			
		||||
											   
 | 
			
		||||
 | 
			
		||||
						PacketResponse      = true;
 | 
			
		||||
					}
 | 
			
		||||
					
 | 
			
		||||
 | 
			
		||||
					break;
 | 
			
		||||
				case TCP_Connection_SYNReceived:
 | 
			
		||||
					if (TCPHeaderIN->Flags == TCP_FLAG_ACK)
 | 
			
		||||
| 
						 | 
				
			
			@ -425,19 +425,19 @@ int16_t TCP_ProcessTCPPacket(void* IPHeaderInStart,
 | 
			
		|||
 | 
			
		||||
						ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,
 | 
			
		||||
															   TCPHeaderIN->SourcePort);
 | 
			
		||||
															   
 | 
			
		||||
 | 
			
		||||
						ConnectionInfo->SequenceNumberOut++;
 | 
			
		||||
					}
 | 
			
		||||
					
 | 
			
		||||
 | 
			
		||||
					break;
 | 
			
		||||
				case TCP_Connection_Established:
 | 
			
		||||
					if (TCPHeaderIN->Flags == (TCP_FLAG_FIN | TCP_FLAG_ACK))
 | 
			
		||||
					{
 | 
			
		||||
						/* FIN ACK when connected to a peer starts the finalization process */
 | 
			
		||||
					
 | 
			
		||||
						TCPHeaderOUT->Flags = (TCP_FLAG_FIN | TCP_FLAG_ACK);				
 | 
			
		||||
 | 
			
		||||
						TCPHeaderOUT->Flags = (TCP_FLAG_FIN | TCP_FLAG_ACK);
 | 
			
		||||
						PacketResponse      = true;
 | 
			
		||||
						
 | 
			
		||||
 | 
			
		||||
						TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,
 | 
			
		||||
											   TCPHeaderIN->SourcePort, TCP_Connection_CloseWait);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -452,14 +452,14 @@ int16_t TCP_ProcessTCPPacket(void* IPHeaderInStart,
 | 
			
		|||
						ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,
 | 
			
		||||
															   TCPHeaderIN->SourcePort);
 | 
			
		||||
 | 
			
		||||
						/* Check if the buffer is currently in use either by a buffered data to send, or receive */		
 | 
			
		||||
						/* Check if the buffer is currently in use either by a buffered data to send, or receive */
 | 
			
		||||
						if ((ConnectionInfo->Buffer.InUse == false) && (ConnectionInfo->Buffer.Ready == false))
 | 
			
		||||
						{						
 | 
			
		||||
						{
 | 
			
		||||
							ConnectionInfo->Buffer.Direction = TCP_PACKETDIR_IN;
 | 
			
		||||
							ConnectionInfo->Buffer.InUse     = true;
 | 
			
		||||
							ConnectionInfo->Buffer.Length    = 0;
 | 
			
		||||
						}
 | 
			
		||||
						
 | 
			
		||||
 | 
			
		||||
						/* Check if the buffer has been claimed by us to read in data from the peer */
 | 
			
		||||
						if ((ConnectionInfo->Buffer.Direction == TCP_PACKETDIR_IN) &&
 | 
			
		||||
							(ConnectionInfo->Buffer.Length != TCP_WINDOW_SIZE))
 | 
			
		||||
| 
						 | 
				
			
			@ -475,7 +475,7 @@ int16_t TCP_ProcessTCPPacket(void* IPHeaderInStart,
 | 
			
		|||
 | 
			
		||||
							ConnectionInfo->SequenceNumberIn += DataLength;
 | 
			
		||||
							ConnectionInfo->Buffer.Length    += DataLength;
 | 
			
		||||
							
 | 
			
		||||
 | 
			
		||||
							/* Check if the buffer is full or if the PSH flag is set, if so indicate buffer ready */
 | 
			
		||||
							if ((!(TCP_WINDOW_SIZE - ConnectionInfo->Buffer.Length)) || (TCPHeaderIN->Flags & TCP_FLAG_PSH))
 | 
			
		||||
							{
 | 
			
		||||
| 
						 | 
				
			
			@ -492,7 +492,7 @@ int16_t TCP_ProcessTCPPacket(void* IPHeaderInStart,
 | 
			
		|||
							return NO_PROCESS;
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
					
 | 
			
		||||
 | 
			
		||||
					break;
 | 
			
		||||
				case TCP_Connection_Closing:
 | 
			
		||||
						ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,
 | 
			
		||||
| 
						 | 
				
			
			@ -500,9 +500,9 @@ int16_t TCP_ProcessTCPPacket(void* IPHeaderInStart,
 | 
			
		|||
 | 
			
		||||
						TCPHeaderOUT->Flags = (TCP_FLAG_ACK | TCP_FLAG_FIN);
 | 
			
		||||
						PacketResponse      = true;
 | 
			
		||||
						
 | 
			
		||||
 | 
			
		||||
						ConnectionInfo->Buffer.InUse = false;
 | 
			
		||||
						
 | 
			
		||||
 | 
			
		||||
						TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,
 | 
			
		||||
											   TCPHeaderIN->SourcePort, TCP_Connection_FINWait1);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -518,7 +518,7 @@ int16_t TCP_ProcessTCPPacket(void* IPHeaderInStart,
 | 
			
		|||
 | 
			
		||||
						ConnectionInfo->SequenceNumberIn++;
 | 
			
		||||
						ConnectionInfo->SequenceNumberOut++;
 | 
			
		||||
						
 | 
			
		||||
 | 
			
		||||
						TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,
 | 
			
		||||
											   TCPHeaderIN->SourcePort, TCP_Connection_Closed);
 | 
			
		||||
					}
 | 
			
		||||
| 
						 | 
				
			
			@ -527,7 +527,7 @@ int16_t TCP_ProcessTCPPacket(void* IPHeaderInStart,
 | 
			
		|||
						TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,
 | 
			
		||||
											   TCPHeaderIN->SourcePort, TCP_Connection_FINWait2);
 | 
			
		||||
					}
 | 
			
		||||
					
 | 
			
		||||
 | 
			
		||||
					break;
 | 
			
		||||
				case TCP_Connection_FINWait2:
 | 
			
		||||
					if (TCPHeaderIN->Flags == (TCP_FLAG_FIN | TCP_FLAG_ACK))
 | 
			
		||||
| 
						 | 
				
			
			@ -540,11 +540,11 @@ int16_t TCP_ProcessTCPPacket(void* IPHeaderInStart,
 | 
			
		|||
 | 
			
		||||
						ConnectionInfo->SequenceNumberIn++;
 | 
			
		||||
						ConnectionInfo->SequenceNumberOut++;
 | 
			
		||||
						
 | 
			
		||||
 | 
			
		||||
						TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,
 | 
			
		||||
											   TCPHeaderIN->SourcePort, TCP_Connection_Closed);
 | 
			
		||||
					}
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
					break;
 | 
			
		||||
				case TCP_Connection_CloseWait:
 | 
			
		||||
					if (TCPHeaderIN->Flags == TCP_FLAG_ACK)
 | 
			
		||||
| 
						 | 
				
			
			@ -552,7 +552,7 @@ int16_t TCP_ProcessTCPPacket(void* IPHeaderInStart,
 | 
			
		|||
						TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,
 | 
			
		||||
											   TCPHeaderIN->SourcePort, TCP_Connection_Closed);
 | 
			
		||||
					}
 | 
			
		||||
					
 | 
			
		||||
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -560,10 +560,10 @@ int16_t TCP_ProcessTCPPacket(void* IPHeaderInStart,
 | 
			
		|||
	else
 | 
			
		||||
	{
 | 
			
		||||
		/* Port is not open, indicate via a RST/ACK response to the sender */
 | 
			
		||||
		TCPHeaderOUT->Flags = (TCP_FLAG_RST | TCP_FLAG_ACK);				
 | 
			
		||||
		TCPHeaderOUT->Flags = (TCP_FLAG_RST | TCP_FLAG_ACK);
 | 
			
		||||
		PacketResponse      = true;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Check if we need to respond to the sent packet */
 | 
			
		||||
	if (PacketResponse)
 | 
			
		||||
	{
 | 
			
		||||
| 
						 | 
				
			
			@ -575,7 +575,7 @@ int16_t TCP_ProcessTCPPacket(void* IPHeaderInStart,
 | 
			
		|||
		TCPHeaderOUT->SequenceNumber       = SwapEndian_32(ConnectionInfo->SequenceNumberOut);
 | 
			
		||||
		TCPHeaderOUT->AcknowledgmentNumber = SwapEndian_32(ConnectionInfo->SequenceNumberIn);
 | 
			
		||||
		TCPHeaderOUT->DataOffset           = (sizeof(TCP_Header_t) / sizeof(uint32_t));
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		if (!(ConnectionInfo->Buffer.InUse))
 | 
			
		||||
		  TCPHeaderOUT->WindowSize         = SwapEndian_16(TCP_WINDOW_SIZE);
 | 
			
		||||
		else
 | 
			
		||||
| 
						 | 
				
			
			@ -584,11 +584,11 @@ int16_t TCP_ProcessTCPPacket(void* IPHeaderInStart,
 | 
			
		|||
		TCPHeaderOUT->UrgentPointer        = 0;
 | 
			
		||||
		TCPHeaderOUT->Checksum             = 0;
 | 
			
		||||
		TCPHeaderOUT->Reserved             = 0;
 | 
			
		||||
		
 | 
			
		||||
		TCPHeaderOUT->Checksum             = TCP_Checksum16(TCPHeaderOUT, IPHeaderIN->DestinationAddress,
 | 
			
		||||
		                                                    IPHeaderIN->SourceAddress, sizeof(TCP_Header_t));					
 | 
			
		||||
 | 
			
		||||
		return sizeof(TCP_Header_t);	
 | 
			
		||||
		TCPHeaderOUT->Checksum             = TCP_Checksum16(TCPHeaderOUT, IPHeaderIN->DestinationAddress,
 | 
			
		||||
		                                                    IPHeaderIN->SourceAddress, sizeof(TCP_Header_t));
 | 
			
		||||
 | 
			
		||||
		return sizeof(TCP_Header_t);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return NO_RESPONSE;
 | 
			
		||||
| 
						 | 
				
			
			@ -610,10 +610,10 @@ static uint16_t TCP_Checksum16(void* TCPHeaderOutStart,
 | 
			
		|||
                               const uint16_t TCPOutSize)
 | 
			
		||||
{
 | 
			
		||||
	uint32_t Checksum = 0;
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* TCP/IP checksums are the addition of the one's compliment of each word including the IP pseudo-header,
 | 
			
		||||
	   complimented */
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	Checksum += ((uint16_t*)&SourceAddress)[0];
 | 
			
		||||
	Checksum += ((uint16_t*)&SourceAddress)[1];
 | 
			
		||||
	Checksum += ((uint16_t*)&DestinationAddress)[0];
 | 
			
		||||
| 
						 | 
				
			
			@ -623,12 +623,13 @@ static uint16_t TCP_Checksum16(void* TCPHeaderOutStart,
 | 
			
		|||
 | 
			
		||||
	for (uint16_t CurrWord = 0; CurrWord < (TCPOutSize >> 1); CurrWord++)
 | 
			
		||||
	  Checksum += ((uint16_t*)TCPHeaderOutStart)[CurrWord];
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	if (TCPOutSize & 0x01)
 | 
			
		||||
	  Checksum += (((uint16_t*)TCPHeaderOutStart)[TCPOutSize >> 1] & 0x00FF);
 | 
			
		||||
	  
 | 
			
		||||
 | 
			
		||||
	while (Checksum & 0xFFFF0000)
 | 
			
		||||
	  Checksum = ((Checksum & 0xFFFF) + (Checksum >> 16));
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	return ~Checksum;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -39,11 +39,11 @@
 | 
			
		|||
	/* Includes: */
 | 
			
		||||
		#include <avr/io.h>
 | 
			
		||||
		#include <stdbool.h>
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		#include "EthernetProtocols.h"
 | 
			
		||||
		#include "Ethernet.h"
 | 
			
		||||
		#include "ProtocolDecoders.h"
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	/* Macros: */
 | 
			
		||||
		/** Maximum number of TCP ports which can be open at the one time. */
 | 
			
		||||
		#define MAX_OPEN_TCP_PORTS              1
 | 
			
		||||
| 
						 | 
				
			
			@ -53,16 +53,16 @@
 | 
			
		|||
 | 
			
		||||
		/** TCP window size, giving the maximum number of bytes which can be buffered at the one time. */
 | 
			
		||||
		#define TCP_WINDOW_SIZE                 512
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/** Port number for HTTP transmissions. */
 | 
			
		||||
		#define TCP_PORT_HTTP                   SwapEndian_16(80)
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/** Data direction indicator for a TCP application buffer, indicating data from host-to-device. */
 | 
			
		||||
		#define TCP_PACKETDIR_IN                false
 | 
			
		||||
 | 
			
		||||
		/** Data direction indicator for a TCP application buffer, indicating data from device-to-host. */
 | 
			
		||||
		#define TCP_PACKETDIR_OUT               true
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/** Congestion Window Reduced TCP flag mask. */
 | 
			
		||||
		#define TCP_FLAG_CWR                    (1 << 7)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -86,7 +86,7 @@
 | 
			
		|||
 | 
			
		||||
		/** Connection Finalize TCP flag mask. */
 | 
			
		||||
		#define TCP_FLAG_FIN                    (1 << 0)
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/** Application macro: Determines if the given application buffer contains a packet received from the host
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \param[in] Buffer  Application buffer to check
 | 
			
		||||
| 
						 | 
				
			
			@ -138,7 +138,7 @@
 | 
			
		|||
		 *  \param[in] Buffer  Application buffer to clear
 | 
			
		||||
		 */
 | 
			
		||||
		#define TCP_APP_CLEAR_BUFFER(Buffer)         MACROS{ Buffer->Ready = false; Buffer->Length = 0; }MACROE
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/** Application macro: Closes an open connection to a host.
 | 
			
		||||
		 *
 | 
			
		||||
		 *  \param[in] Connection  Open TCP connection to close
 | 
			
		||||
| 
						 | 
				
			
			@ -152,7 +152,7 @@
 | 
			
		|||
			TCP_Port_Closed            = 0, /**< TCP port closed, no connections to a host may be made on this port. */
 | 
			
		||||
			TCP_Port_Open              = 1, /**< TCP port open, connections to a host may be made on this port. */
 | 
			
		||||
		};
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
		/** Enum for possible TCP connection states. */
 | 
			
		||||
		enum TCP_ConnectionStates_t
 | 
			
		||||
		{
 | 
			
		||||
| 
						 | 
				
			
			@ -166,9 +166,9 @@
 | 
			
		|||
			TCP_Connection_Closing     = 7, /**< Unused */
 | 
			
		||||
			TCP_Connection_LastACK     = 8, /**< Unused */
 | 
			
		||||
			TCP_Connection_TimeWait    = 9, /**< Unused */
 | 
			
		||||
			TCP_Connection_Closed      = 10, /**< Connection closed in both directions */			
 | 
			
		||||
			TCP_Connection_Closed      = 10, /**< Connection closed in both directions */
 | 
			
		||||
		};
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Type Defines: */
 | 
			
		||||
		/** Type define for a TCP connection buffer structure, including size, data and direction. */
 | 
			
		||||
		typedef struct
 | 
			
		||||
| 
						 | 
				
			
			@ -185,7 +185,7 @@
 | 
			
		|||
		/** Type define for a TCP connection information structure. */
 | 
			
		||||
		typedef struct
 | 
			
		||||
		{
 | 
			
		||||
			uint32_t               SequenceNumberIn; /**< Current TCP sequence number for host-to-device */	
 | 
			
		||||
			uint32_t               SequenceNumberIn; /**< Current TCP sequence number for host-to-device */
 | 
			
		||||
			uint32_t               SequenceNumberOut; /**< Current TCP sequence number for device-to-host */
 | 
			
		||||
			TCP_ConnectionBuffer_t Buffer; /**< Connection application data buffer */
 | 
			
		||||
		} TCP_ConnectionInfo_t;
 | 
			
		||||
| 
						 | 
				
			
			@ -214,19 +214,19 @@
 | 
			
		|||
		{
 | 
			
		||||
			uint16_t               SourcePort; /**< Source port of the TCP packet */
 | 
			
		||||
			uint16_t               DestinationPort; /**< Destination port of the TCP packet */
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			uint32_t               SequenceNumber; /**< Data sequence number of the packet */
 | 
			
		||||
			uint32_t               AcknowledgmentNumber; /**< Data acknowledgment number of the packet */
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			unsigned char          Reserved : 4; /**< Reserved, must be all 0 */
 | 
			
		||||
			unsigned char          DataOffset : 4; /**< Offset of the data from the start of the header, in 4 byte chunks */
 | 
			
		||||
			uint8_t                Flags; /**< TCP packet flags */
 | 
			
		||||
			uint16_t               WindowSize; /**< Current data window size (bytes remaining in reception buffer) */
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			uint16_t               Checksum; /**< TCP checksum */
 | 
			
		||||
			uint16_t               UrgentPointer; /**< Urgent data pointer */
 | 
			
		||||
		} TCP_Header_t;
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	/* Function Prototypes: */
 | 
			
		||||
		void                  TCP_TCPTask(USB_ClassInfo_RNDIS_Device_t* const RNDISInterfaceInfo);
 | 
			
		||||
		void                  TCP_Init(void);
 | 
			
		||||
| 
						 | 
				
			
			@ -256,3 +256,4 @@
 | 
			
		|||
		#endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -33,7 +33,7 @@
 | 
			
		|||
 *  User Datagram Protocol (UDP) packet handling routines. This protocol handles high throughput, low
 | 
			
		||||
 *  reliability packets which are typically used to encapsulate streaming data.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
#define  INCLUDE_FROM_UDP_C
 | 
			
		||||
#include "UDP.h"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -52,11 +52,11 @@ int16_t UDP_ProcessUDPPacket(void* IPHeaderInStart,
 | 
			
		|||
{
 | 
			
		||||
	UDP_Header_t* UDPHeaderIN  = (UDP_Header_t*)UDPHeaderInStart;
 | 
			
		||||
	UDP_Header_t* UDPHeaderOUT = (UDP_Header_t*)UDPHeaderOutStart;
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	int16_t RetSize = NO_RESPONSE;
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	DecodeUDPHeader(UDPHeaderInStart);
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	switch (SwapEndian_16(UDPHeaderIN->DestinationPort))
 | 
			
		||||
	{
 | 
			
		||||
		case UDP_PORT_DHCP_REQUEST:
 | 
			
		||||
| 
						 | 
				
			
			@ -65,7 +65,7 @@ int16_t UDP_ProcessUDPPacket(void* IPHeaderInStart,
 | 
			
		|||
		                                     &((uint8_t*)UDPHeaderOutStart)[sizeof(UDP_Header_t)]);
 | 
			
		||||
			break;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Check to see if the protocol processing routine has filled out a response */
 | 
			
		||||
	if (RetSize > 0)
 | 
			
		||||
	{
 | 
			
		||||
| 
						 | 
				
			
			@ -78,6 +78,7 @@ int16_t UDP_ProcessUDPPacket(void* IPHeaderInStart,
 | 
			
		|||
		/* Return the size of the response so far */
 | 
			
		||||
		return (sizeof(UDP_Header_t) + RetSize);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	return NO_RESPONSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -38,12 +38,12 @@
 | 
			
		|||
 | 
			
		||||
	/* Includes: */
 | 
			
		||||
		#include <avr/io.h>
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
		#include "EthernetProtocols.h"
 | 
			
		||||
		#include "Ethernet.h"
 | 
			
		||||
		#include "ProtocolDecoders.h"
 | 
			
		||||
		#include "DHCP.h"
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Macros: */
 | 
			
		||||
		/** Source UDP port for a DHCP request. */
 | 
			
		||||
		#define UDP_PORT_DHCP_REQUEST 67
 | 
			
		||||
| 
						 | 
				
			
			@ -60,10 +60,11 @@
 | 
			
		|||
			uint16_t Length; /**< Total packet length, in bytes */
 | 
			
		||||
			uint16_t Checksum; /**< Optional UDP packet checksum */
 | 
			
		||||
		} UDP_Header_t;
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	/* Function Prototypes: */
 | 
			
		||||
		int16_t UDP_ProcessUDPPacket(void* IPHeaderInStart,
 | 
			
		||||
		                             void* UDPHeaderInStart,
 | 
			
		||||
		                             void* UDPHeaderOutStart);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -54,7 +54,7 @@ char PROGMEM HTTP404Header[] = "HTTP/1.1 404 Not Found\r\n"
 | 
			
		|||
/** HTTP page to serve to the host when a HTTP request is made. This page is too long for a single response, thus it is automatically
 | 
			
		||||
 *  broken up into smaller blocks and sent as a series of packets each time the webserver application callback is run.
 | 
			
		||||
 */
 | 
			
		||||
char PROGMEM HTTPPage[]   = 
 | 
			
		||||
char PROGMEM HTTPPage[]   =
 | 
			
		||||
		"<html>"
 | 
			
		||||
		"	<head>"
 | 
			
		||||
		"		<title>"
 | 
			
		||||
| 
						 | 
				
			
			@ -108,7 +108,7 @@ void Webserver_ApplicationCallback(TCP_ConnectionState_t* const ConnectionState,
 | 
			
		|||
{
 | 
			
		||||
	char*          BufferDataStr = (char*)Buffer->Data;
 | 
			
		||||
	static uint8_t PageBlock     = 0;
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Check to see if a packet has been received on the HTTP port from a remote host */
 | 
			
		||||
	if (TCP_APP_HAS_RECEIVED_PACKET(Buffer))
 | 
			
		||||
	{
 | 
			
		||||
| 
						 | 
				
			
			@ -120,7 +120,7 @@ void Webserver_ApplicationCallback(TCP_ConnectionState_t* const ConnectionState,
 | 
			
		|||
 | 
			
		||||
				/* Copy the HTTP 200 response header into the packet buffer */
 | 
			
		||||
				strcpy_P(BufferDataStr, HTTP200Header);
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
				/* Send the buffer contents to the host */
 | 
			
		||||
				TCP_APP_SEND_BUFFER(Buffer, strlen(BufferDataStr));
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -131,10 +131,10 @@ void Webserver_ApplicationCallback(TCP_ConnectionState_t* const ConnectionState,
 | 
			
		|||
			{
 | 
			
		||||
				/* Copy the HTTP 404 response header into the packet buffer */
 | 
			
		||||
				strcpy_P(BufferDataStr, HTTP404Header);
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
				/* Send the buffer contents to the host */
 | 
			
		||||
				TCP_APP_SEND_BUFFER(Buffer, strlen(BufferDataStr));
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
				/* All data sent, close the connection */
 | 
			
		||||
				TCP_APP_CLOSECONNECTION(ConnectionState);
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			@ -155,9 +155,9 @@ void Webserver_ApplicationCallback(TCP_ConnectionState_t* const ConnectionState,
 | 
			
		|||
				strcpy_P(BufferDataStr, HTTP404Header);
 | 
			
		||||
 | 
			
		||||
				/* Send the buffer contents to the host */
 | 
			
		||||
				TCP_APP_SEND_BUFFER(Buffer, strlen(BufferDataStr));			
 | 
			
		||||
				TCP_APP_SEND_BUFFER(Buffer, strlen(BufferDataStr));
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			/* All data sent, close the connection */
 | 
			
		||||
			TCP_APP_CLOSECONNECTION(ConnectionState);
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -165,7 +165,7 @@ void Webserver_ApplicationCallback(TCP_ConnectionState_t* const ConnectionState,
 | 
			
		|||
		{
 | 
			
		||||
			/* Echo the host's query back to the host */
 | 
			
		||||
			TCP_APP_SEND_BUFFER(Buffer, Buffer->Length);
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			/* All data sent, close the connection */
 | 
			
		||||
			TCP_APP_CLOSECONNECTION(ConnectionState);
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -179,13 +179,13 @@ void Webserver_ApplicationCallback(TCP_ConnectionState_t* const ConnectionState,
 | 
			
		|||
	{
 | 
			
		||||
		uint16_t RemLength = strlen_P(&HTTPPage[PageBlock * HTTP_REPLY_BLOCK_SIZE]);
 | 
			
		||||
		uint16_t Length;
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
		/* Determine the length of the loaded block */
 | 
			
		||||
		Length = ((RemLength > HTTP_REPLY_BLOCK_SIZE) ? HTTP_REPLY_BLOCK_SIZE : RemLength);
 | 
			
		||||
 | 
			
		||||
		/* Copy the next buffer sized block of the page to the packet buffer */
 | 
			
		||||
		strncpy_P(BufferDataStr, &HTTPPage[PageBlock * HTTP_REPLY_BLOCK_SIZE], Length);
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		/* Send the buffer contents to the host */
 | 
			
		||||
		TCP_APP_SEND_BUFFER(Buffer, Length);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -194,9 +194,10 @@ void Webserver_ApplicationCallback(TCP_ConnectionState_t* const ConnectionState,
 | 
			
		|||
		{
 | 
			
		||||
			/* Unlock the buffer so that the host can fill it with future packets */
 | 
			
		||||
			TCP_APP_RELEASE_BUFFER(Buffer);
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			/* Close the connection to the host */
 | 
			
		||||
			TCP_APP_CLOSECONNECTION(ConnectionState);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -32,25 +32,26 @@
 | 
			
		|||
 *
 | 
			
		||||
 *  Header file for Webserver.c.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
#ifndef _WEBSERVER_H_
 | 
			
		||||
#define _WEBSERVER_H_
 | 
			
		||||
 | 
			
		||||
	/* Includes: */
 | 
			
		||||
		#include <avr/io.h>
 | 
			
		||||
		#include <avr/pgmspace.h>
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		#include <LUFA/Version.h>
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		#include "TCP.h"
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Macros: */
 | 
			
		||||
		/** Maximum size of a HTTP response per transmission */
 | 
			
		||||
		#define  HTTP_REPLY_BLOCK_SIZE     128
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	/* Function Prototypes: */
 | 
			
		||||
		void Webserver_Init(void);
 | 
			
		||||
		void Webserver_ApplicationCallback(TCP_ConnectionState_t* const ConnectionState,
 | 
			
		||||
		                                   TCP_ConnectionBuffer_t* const Buffer);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -57,7 +57,7 @@ USB_ClassInfo_RNDIS_Device_t Ethernet_RNDIS_Interface =
 | 
			
		|||
				.NotificationEndpointNumber     = CDC_NOTIFICATION_EPNUM,
 | 
			
		||||
				.NotificationEndpointSize       = CDC_NOTIFICATION_EPSIZE,
 | 
			
		||||
				.NotificationEndpointDoubleBank = false,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
				.AdapterVendorDescription       = "LUFA RNDIS Demo Adapter",
 | 
			
		||||
				.AdapterMACAddress              = {ADAPTER_MAC_ADDRESS},
 | 
			
		||||
			},
 | 
			
		||||
| 
						 | 
				
			
			@ -135,3 +135,4 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
 | 
			
		|||
{
 | 
			
		||||
	RNDIS_Device_ProcessControlRequest(&Ethernet_RNDIS_Interface);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -32,7 +32,7 @@
 | 
			
		|||
 *
 | 
			
		||||
 *  Header file for RNDISEthernet.c.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
#ifndef _RNDISETHERNET_H_
 | 
			
		||||
#define _RNDISETHERNET_H_
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -71,7 +71,7 @@
 | 
			
		|||
 | 
			
		||||
		/** LED mask for the library LED driver, to indicate that the USB interface is busy. */
 | 
			
		||||
		#define LEDMASK_USB_BUSY          LEDS_LED2
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	/* Function Prototypes: */
 | 
			
		||||
		void SetupHardware(void);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -79,5 +79,6 @@
 | 
			
		|||
		void EVENT_USB_Device_Disconnect(void);
 | 
			
		||||
		void EVENT_USB_Device_ConfigurationChanged(void);
 | 
			
		||||
		void EVENT_USB_Device_UnhandledControlRequest(void);
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,7 +3,7 @@
 | 
			
		|||
 *  This file contains special DoxyGen information for the generation of the main page and other special
 | 
			
		||||
 *  documentation pages. It is not a project source file.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
/** \mainpage RNDIS Class Ethernet Demo (with Webserver/Telnet)
 | 
			
		||||
 *
 | 
			
		||||
 *  \section SSec_Compat Demo Compatibility:
 | 
			
		||||
| 
						 | 
				
			
			@ -26,7 +26,7 @@
 | 
			
		|||
 *    <td><b>USB Class:</b></td>
 | 
			
		||||
 *    <td>Communications Device Class (CDC)</td>
 | 
			
		||||
 *   </tr>
 | 
			
		||||
 *   <tr> 
 | 
			
		||||
 *   <tr>
 | 
			
		||||
 *    <td><b>USB Subclass:</b></td>
 | 
			
		||||
 *    <td>Remote NDIS (Microsoft Proprietary CDC Class Networking Standard)</td>
 | 
			
		||||
 *   </tr>
 | 
			
		||||
| 
						 | 
				
			
			@ -40,7 +40,7 @@
 | 
			
		|||
 *   </tr>
 | 
			
		||||
 *  </table>
 | 
			
		||||
 *
 | 
			
		||||
 *  \section SSec_Description Project Description: 
 | 
			
		||||
 *  \section SSec_Description Project Description:
 | 
			
		||||
 *
 | 
			
		||||
 *  Remote Network Driver Interface demonstration application.
 | 
			
		||||
 *  This gives a simple reference application for implementing
 | 
			
		||||
| 
						 | 
				
			
			@ -49,7 +49,7 @@
 | 
			
		|||
 *  standard; this demo will only work on Windows 2000 (manually
 | 
			
		||||
 *  patched with the Microsoft RNDIS hotfix) and above (with no
 | 
			
		||||
 *  manual patches), or on the latest Linux kernels.
 | 
			
		||||
 *  
 | 
			
		||||
 *
 | 
			
		||||
 *  Before running, you will need to install the INF file that
 | 
			
		||||
 *  is located in the RNDISEthernet project directory. This will
 | 
			
		||||
 *  enable Windows to use its inbuilt RNDIS drivers, negating the
 | 
			
		||||
| 
						 | 
				
			
			@ -58,7 +58,7 @@
 | 
			
		|||
 *  Windows 2000 is used, the Microsoft INF file in the hotfix
 | 
			
		||||
 *  will need to be altered to use the VID/PID of the demo and
 | 
			
		||||
 *  then chosen instead of the LUFA RNDIS INF file when prompted.
 | 
			
		||||
 *  
 | 
			
		||||
 *
 | 
			
		||||
 *  When enumerated, this demo will install as a new network
 | 
			
		||||
 *  adapter which ethernet packets can be sent to and received
 | 
			
		||||
 *  from. Running on top of the adapter is a very simple TCP/IP
 | 
			
		||||
| 
						 | 
				
			
			@ -66,10 +66,10 @@
 | 
			
		|||
 *  accessed through a web browser at IP address 10.0.0.2:80 or
 | 
			
		||||
 *  through a TELNET client at 10.0.0.2:25. This device also supports
 | 
			
		||||
 *  ping echos via the ICMP protocol.
 | 
			
		||||
 *  
 | 
			
		||||
 *
 | 
			
		||||
 *  \note The TCP/IP stack in this demo has a number of limitations
 | 
			
		||||
 *  and should serve as an example only - it is not fully featured nor
 | 
			
		||||
 *  compliant to the TCP/IP specification. For complete projects, it is 
 | 
			
		||||
 *  compliant to the TCP/IP specification. For complete projects, it is
 | 
			
		||||
 *  recommended that it be replaced with an external open source TCP/IP
 | 
			
		||||
 *  stack that is feature complete, such as the uIP stack.
 | 
			
		||||
 *
 | 
			
		||||
| 
						 | 
				
			
			@ -120,3 +120,4 @@
 | 
			
		|||
 *   </tr>
 | 
			
		||||
 *  </table>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,7 +47,7 @@
 | 
			
		|||
# make doxygen = Generate DoxyGen documentation for the project (must have
 | 
			
		||||
#                DoxyGen installed)
 | 
			
		||||
#
 | 
			
		||||
# make debug = Start either simulavr or avarice as specified for debugging, 
 | 
			
		||||
# make debug = Start either simulavr or avarice as specified for debugging,
 | 
			
		||||
#              with avr-gdb or avr-insight as the front end for debugging.
 | 
			
		||||
#
 | 
			
		||||
# make filename.s = Just compile filename.c into the assembler code only.
 | 
			
		||||
| 
						 | 
				
			
			@ -64,14 +64,14 @@ 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 
 | 
			
		||||
# LUFA board drivers). If USER is selected, put custom board drivers in a directory called
 | 
			
		||||
# "Board" inside the application directory.
 | 
			
		||||
BOARD = USBKEY
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Processor frequency.
 | 
			
		||||
#     This will define a symbol, F_CPU, in all source code files equal to the 
 | 
			
		||||
#     processor frequency in Hz. You can then use this symbol in your source code to 
 | 
			
		||||
#     This will define a symbol, F_CPU, in all source code files equal to the
 | 
			
		||||
#     processor frequency in Hz. You can then use this symbol in your source code to
 | 
			
		||||
#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
 | 
			
		||||
#     automatically to create a 32-bit value in your source code.
 | 
			
		||||
#
 | 
			
		||||
| 
						 | 
				
			
			@ -84,7 +84,7 @@ F_CPU = 8000000
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Input clock frequency.
 | 
			
		||||
#     This will define a symbol, F_CLOCK, in all source code files equal to the 
 | 
			
		||||
#     This will define a symbol, F_CLOCK, in all source code files equal to the
 | 
			
		||||
#     input clock frequency (before any prescaling is performed) in Hz. This value may
 | 
			
		||||
#     differ from F_CPU if prescaling is used on the latter, and is required as the
 | 
			
		||||
#     raw input clock is fed directly to the PLL sections of the AVR for high speed
 | 
			
		||||
| 
						 | 
				
			
			@ -154,7 +154,7 @@ SRC = $(TARGET).c                                                 \
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# List C++ source files here. (C dependencies are automatically generated.)
 | 
			
		||||
CPPSRC = 
 | 
			
		||||
CPPSRC =
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# List Assembler source files here.
 | 
			
		||||
| 
						 | 
				
			
			@ -167,7 +167,7 @@ CPPSRC =
 | 
			
		|||
ASRC =
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Optimization level, can be [0, 1, 2, 3, s]. 
 | 
			
		||||
# Optimization level, can be [0, 1, 2, 3, s].
 | 
			
		||||
#     0 = turn off optimization. s = optimize for size.
 | 
			
		||||
#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
 | 
			
		||||
OPT = s
 | 
			
		||||
| 
						 | 
				
			
			@ -281,7 +281,7 @@ CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
 | 
			
		|||
#             for use in COFF files, additional information about filenames
 | 
			
		||||
#             and function names needs to be present in the assembler source
 | 
			
		||||
#             files -- see avr-libc docs [FIXME: not yet described there]
 | 
			
		||||
#  -listing-cont-lines: Sets the maximum number of continuation lines of hex 
 | 
			
		||||
#  -listing-cont-lines: Sets the maximum number of continuation lines of hex
 | 
			
		||||
#       dump that will be displayed for a given single line of source input.
 | 
			
		||||
ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -294,7 +294,7 @@ PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
 | 
			
		|||
PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
 | 
			
		||||
 | 
			
		||||
# If this is left blank, then it will use the Standard printf version.
 | 
			
		||||
PRINTF_LIB = 
 | 
			
		||||
PRINTF_LIB =
 | 
			
		||||
#PRINTF_LIB = $(PRINTF_LIB_MIN)
 | 
			
		||||
#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -306,7 +306,7 @@ SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
 | 
			
		|||
SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
 | 
			
		||||
 | 
			
		||||
# If this is left blank, then it will use the Standard scanf version.
 | 
			
		||||
SCANF_LIB = 
 | 
			
		||||
SCANF_LIB =
 | 
			
		||||
#SCANF_LIB = $(SCANF_LIB_MIN)
 | 
			
		||||
#SCANF_LIB = $(SCANF_LIB_FLOAT)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -318,7 +318,7 @@ MATH_LIB = -lm
 | 
			
		|||
#     Each directory must be seperated by a space.
 | 
			
		||||
#     Use forward slashes for directory separators.
 | 
			
		||||
#     For a directory that has spaces, enclose it in quotes.
 | 
			
		||||
EXTRALIBDIRS = 
 | 
			
		||||
EXTRALIBDIRS =
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -341,7 +341,7 @@ EXTMEMOPTS =
 | 
			
		|||
#    -Map:      create map file
 | 
			
		||||
#    --cref:    add cross reference to  map file
 | 
			
		||||
LDFLAGS  = -Wl,-Map=$(TARGET).map,--cref
 | 
			
		||||
LDFLAGS += -Wl,--relax 
 | 
			
		||||
LDFLAGS += -Wl,--relax
 | 
			
		||||
LDFLAGS += -Wl,--gc-sections
 | 
			
		||||
LDFLAGS += $(EXTMEMOPTS)
 | 
			
		||||
LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))
 | 
			
		||||
| 
						 | 
				
			
			@ -375,7 +375,7 @@ AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
 | 
			
		|||
#AVRDUDE_NO_VERIFY = -V
 | 
			
		||||
 | 
			
		||||
# Increase verbosity level.  Please use this when submitting bug
 | 
			
		||||
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
 | 
			
		||||
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
 | 
			
		||||
# to submit bug reports.
 | 
			
		||||
#AVRDUDE_VERBOSE = -v -v
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -409,7 +409,7 @@ JTAG_DEV = /dev/com1
 | 
			
		|||
DEBUG_PORT = 4242
 | 
			
		||||
 | 
			
		||||
# Debugging host used to communicate between GDB / avarice / simulavr, normally
 | 
			
		||||
#     just set to localhost unless doing some sort of crazy debugging when 
 | 
			
		||||
#     just set to localhost unless doing some sort of crazy debugging when
 | 
			
		||||
#     avarice is running on a different computer.
 | 
			
		||||
DEBUG_HOST = localhost
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -438,7 +438,7 @@ WINSHELL = cmd
 | 
			
		|||
MSG_ERRORS_NONE = Errors: none
 | 
			
		||||
MSG_BEGIN = -------- begin --------
 | 
			
		||||
MSG_END = --------  end  --------
 | 
			
		||||
MSG_SIZE_BEFORE = Size before: 
 | 
			
		||||
MSG_SIZE_BEFORE = Size before:
 | 
			
		||||
MSG_SIZE_AFTER = Size after:
 | 
			
		||||
MSG_COFF = Converting to AVR COFF:
 | 
			
		||||
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
 | 
			
		||||
| 
						 | 
				
			
			@ -457,10 +457,10 @@ MSG_CREATING_LIBRARY = Creating library:
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Define all object files.
 | 
			
		||||
OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) 
 | 
			
		||||
OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o)
 | 
			
		||||
 | 
			
		||||
# Define all listing files.
 | 
			
		||||
LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) 
 | 
			
		||||
LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Compiler flags to generate dependency files.
 | 
			
		||||
| 
						 | 
				
			
			@ -525,11 +525,11 @@ sizeafter:
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Display compiler version information.
 | 
			
		||||
gccversion : 
 | 
			
		||||
gccversion :
 | 
			
		||||
	@$(CC) --version
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Program the device.  
 | 
			
		||||
# Program the device.
 | 
			
		||||
program: $(TARGET).hex $(TARGET).eep
 | 
			
		||||
	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -556,9 +556,9 @@ dfu-ee: $(TARGET).hex $(TARGET).eep
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# Generate avr-gdb config/init file which does the following:
 | 
			
		||||
#     define the reset signal, load the target file, connect to target, and set 
 | 
			
		||||
#     define the reset signal, load the target file, connect to target, and set
 | 
			
		||||
#     a breakpoint at main().
 | 
			
		||||
gdb-config: 
 | 
			
		||||
gdb-config:
 | 
			
		||||
	@$(REMOVE) $(GDBINIT_FILE)
 | 
			
		||||
	@echo define reset >> $(GDBINIT_FILE)
 | 
			
		||||
	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
 | 
			
		||||
| 
						 | 
				
			
			@ -656,14 +656,14 @@ extcoff: $(TARGET).elf
 | 
			
		|||
$(OBJDIR)/%.o : %.c
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo $(MSG_COMPILING) $<
 | 
			
		||||
	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
 | 
			
		||||
	$(CC) -c $(ALL_CFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Compile: create object files from C++ source files.
 | 
			
		||||
$(OBJDIR)/%.o : %.cpp
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo $(MSG_COMPILING_CPP) $<
 | 
			
		||||
	$(CC) -c $(ALL_CPPFLAGS) $< -o $@ 
 | 
			
		||||
	$(CC) -c $(ALL_CPPFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Compile: create assembler files from C source files.
 | 
			
		||||
| 
						 | 
				
			
			@ -685,7 +685,7 @@ $(OBJDIR)/%.o : %.S
 | 
			
		|||
 | 
			
		||||
# Create preprocessed source for use in sending a bug report.
 | 
			
		||||
%.i : %.c
 | 
			
		||||
	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
 | 
			
		||||
	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Target: clean project.
 | 
			
		||||
| 
						 | 
				
			
			@ -728,4 +728,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null)
 | 
			
		|||
.PHONY : all begin finish end sizebefore sizeafter gccversion \
 | 
			
		||||
build elf hex eep lss sym coff extcoff doxygen clean          \
 | 
			
		||||
clean_list clean_doxygen program dfu flip flip-ee dfu-ee      \
 | 
			
		||||
debug gdb-config
 | 
			
		||||
debug gdb-config
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,13 +9,13 @@
 | 
			
		|||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  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 
 | 
			
		||||
  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 
 | 
			
		||||
  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
 | 
			
		||||
| 
						 | 
				
			
			@ -30,9 +30,9 @@
 | 
			
		|||
 | 
			
		||||
/** \file
 | 
			
		||||
 *
 | 
			
		||||
 *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special 
 | 
			
		||||
 *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special
 | 
			
		||||
 *  computer-readable structures which the host requests upon device enumeration, to determine
 | 
			
		||||
 *  the device's capabilities and functions.  
 | 
			
		||||
 *  the device's capabilities and functions.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "Descriptors.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -83,102 +83,102 @@ USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
 | 
			
		|||
 */
 | 
			
		||||
USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 | 
			
		||||
{
 | 
			
		||||
	.Config = 
 | 
			
		||||
	.Config =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},
 | 
			
		||||
 | 
			
		||||
			.TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),
 | 
			
		||||
			.TotalInterfaces        = 2,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.ConfigurationNumber    = 1,
 | 
			
		||||
			.ConfigurationStrIndex  = NO_DESCRIPTOR,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.ConfigAttributes       = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)
 | 
			
		||||
		},
 | 
			
		||||
		
 | 
			
		||||
	.CDC_CCI_Interface = 
 | 
			
		||||
 | 
			
		||||
	.CDC_CCI_Interface =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 | 
			
		||||
 | 
			
		||||
			.InterfaceNumber        = 0,
 | 
			
		||||
			.AlternateSetting       = 0,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.TotalEndpoints         = 1,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.Class                  = 0x02,
 | 
			
		||||
			.SubClass               = 0x02,
 | 
			
		||||
			.Protocol               = 0x01,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.InterfaceStrIndex      = NO_DESCRIPTOR
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.CDC_Functional_Header = 
 | 
			
		||||
	.CDC_Functional_Header =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), .Type = DTYPE_CSInterface},
 | 
			
		||||
			.Subtype                = CDC_DSUBTYPE_CSInterface_Header,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.CDCSpecification       = VERSION_BCD(01.10),
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.CDC_Functional_ACM = 
 | 
			
		||||
	.CDC_Functional_ACM =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = DTYPE_CSInterface},
 | 
			
		||||
			.Subtype                = CDC_DSUBTYPE_CSInterface_ACM,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.Capabilities           = 0x06,
 | 
			
		||||
		},
 | 
			
		||||
		
 | 
			
		||||
	.CDC_Functional_Union = 
 | 
			
		||||
 | 
			
		||||
	.CDC_Functional_Union =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = DTYPE_CSInterface},
 | 
			
		||||
			.Subtype                = CDC_DSUBTYPE_CSInterface_Union,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.MasterInterfaceNumber  = 0,
 | 
			
		||||
			.SlaveInterfaceNumber   = 1,
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.CDC_NotificationEndpoint = 
 | 
			
		||||
	.CDC_NotificationEndpoint =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_NOTIFICATION_EPNUM),
 | 
			
		||||
			.Attributes             = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
 | 
			
		||||
			.EndpointSize           = CDC_NOTIFICATION_EPSIZE,
 | 
			
		||||
			.PollingIntervalMS      = 0xFF
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.CDC_DCI_Interface = 
 | 
			
		||||
	.CDC_DCI_Interface =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
 | 
			
		||||
 | 
			
		||||
			.InterfaceNumber        = 1,
 | 
			
		||||
			.AlternateSetting       = 0,
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.TotalEndpoints         = 2,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.Class                  = 0x0A,
 | 
			
		||||
			.SubClass               = 0x00,
 | 
			
		||||
			.Protocol               = 0x00,
 | 
			
		||||
				
 | 
			
		||||
 | 
			
		||||
			.InterfaceStrIndex      = NO_DESCRIPTOR
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
	.CDC_DataOutEndpoint = 
 | 
			
		||||
	.CDC_DataOutEndpoint =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC_RX_EPNUM),
 | 
			
		||||
			.Attributes             = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
 | 
			
		||||
			.EndpointSize           = CDC_TXRX_EPSIZE,
 | 
			
		||||
			.PollingIntervalMS      = 0x00
 | 
			
		||||
		},
 | 
			
		||||
		
 | 
			
		||||
	.CDC_DataInEndpoint = 
 | 
			
		||||
 | 
			
		||||
	.CDC_DataInEndpoint =
 | 
			
		||||
		{
 | 
			
		||||
			.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			.EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_TX_EPNUM),
 | 
			
		||||
			.Attributes             = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
 | 
			
		||||
			.EndpointSize           = CDC_TXRX_EPSIZE,
 | 
			
		||||
| 
						 | 
				
			
			@ -241,30 +241,31 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
 | 
			
		|||
			Address = &DeviceDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Device_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_Configuration: 
 | 
			
		||||
		case DTYPE_Configuration:
 | 
			
		||||
			Address = &ConfigurationDescriptor;
 | 
			
		||||
			Size    = sizeof(USB_Descriptor_Configuration_t);
 | 
			
		||||
			break;
 | 
			
		||||
		case DTYPE_String: 
 | 
			
		||||
		case DTYPE_String:
 | 
			
		||||
			switch (DescriptorNumber)
 | 
			
		||||
			{
 | 
			
		||||
				case 0x00: 
 | 
			
		||||
				case 0x00:
 | 
			
		||||
					Address = &LanguageString;
 | 
			
		||||
					Size    = pgm_read_byte(&LanguageString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x01: 
 | 
			
		||||
				case 0x01:
 | 
			
		||||
					Address = &ManufacturerString;
 | 
			
		||||
					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
				case 0x02: 
 | 
			
		||||
				case 0x02:
 | 
			
		||||
					Address = &ProductString;
 | 
			
		||||
					Size    = pgm_read_byte(&ProductString.Header.Size);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			break;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	*DescriptorAddress = Address;
 | 
			
		||||
	return Size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
Some files were not shown because too many files have changed in this diff Show more
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue