diff options
Diffstat (limited to 'Demos/Device/LowLevel')
100 files changed, 2161 insertions, 2063 deletions
diff --git a/Demos/Device/LowLevel/AudioInput/AudioInput.c b/Demos/Device/LowLevel/AudioInput/AudioInput.c index 4abc17422..a984a2ab8 100644 --- a/Demos/Device/LowLevel/AudioInput/AudioInput.c +++ b/Demos/Device/LowLevel/AudioInput/AudioInput.c @@ -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 @@ -48,7 +48,7 @@ int main(void) LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); sei(); - + for (;;) { USB_Audio_Task(); @@ -65,13 +65,13 @@ void SetupHardware(void) /* Disable clock division */ clock_prescale_set(clock_div_1); - + /* Hardware Initialization */ LEDs_Init(); ADC_Init(ADC_FREE_RUNNING | ADC_PRESCALE_32); ADC_SetupChannel(MIC_IN_ADC_CHANNEL); USB_Init(); - + /* Start the ADC conversion in free running mode */ ADC_StartReading(ADC_REFERENCE_AVCC | ADC_RIGHT_ADJUSTED | MIC_IN_ADC_MUX_MASK); } @@ -133,7 +133,7 @@ void EVENT_USB_Device_UnhandledControlRequest(void) /* Set Interface is not handled by the library, as its function is application-specific */ if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_INTERFACE)) { - Endpoint_ClearSETUP(); + Endpoint_ClearSETUP(); Endpoint_ClearStatusStage(); /* Check if the host is enabling the audio interface (setting AlternateSetting to 1) */ @@ -157,7 +157,7 @@ void USB_Audio_Task(void) /* Select the audio stream endpoint */ Endpoint_SelectEndpoint(AUDIO_STREAM_EPNUM); - + /* Check if the current endpoint can be written to and that the next sample should be stored */ if (Endpoint_IsINReady() && (TIFR0 & (1 << OCF0A))) { @@ -166,7 +166,7 @@ void USB_Audio_Task(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); @@ -183,3 +183,4 @@ void USB_Audio_Task(void) } } } + diff --git a/Demos/Device/LowLevel/AudioInput/AudioInput.h b/Demos/Device/LowLevel/AudioInput/AudioInput.h index 7be23e8dd..53b63517b 100644 --- a/Demos/Device/LowLevel/AudioInput/AudioInput.h +++ b/Demos/Device/LowLevel/AudioInput/AudioInput.h @@ -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_ @@ -43,7 +43,7 @@ #include <avr/interrupt.h> #include "Descriptors.h" - + #include <LUFA/Version.h> #include <LUFA/Drivers/USB/USB.h> #include <LUFA/Drivers/Board/LEDs.h> @@ -52,10 +52,10 @@ /* 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 - + /** Maximum ADC sample value for the microphone input. */ #define SAMPLE_MAX_RANGE 0xFFFF @@ -82,5 +82,6 @@ void EVENT_USB_Device_Disconnect(void); void EVENT_USB_Device_ConfigurationChanged(void); void EVENT_USB_Device_UnhandledControlRequest(void); - + #endif + diff --git a/Demos/Device/LowLevel/AudioInput/AudioInput.txt b/Demos/Device/LowLevel/AudioInput/AudioInput.txt index d61e77a52..39d78e784 100644 --- a/Demos/Device/LowLevel/AudioInput/AudioInput.txt +++ b/Demos/Device/LowLevel/AudioInput/AudioInput.txt @@ -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 2. - * + * * Under Windows, if a driver request dialogue pops up, select the option * to automatically install the appropriate drivers. * @@ -81,3 +81,4 @@ * </tr> * </table> */ + diff --git a/Demos/Device/LowLevel/AudioInput/Descriptors.c b/Demos/Device/LowLevel/AudioInput/Descriptors.c index 150fb3367..432f0c909 100644 --- a/Demos/Device/LowLevel/AudioInput/Descriptors.c +++ b/Demos/Device/LowLevel/AudioInput/Descriptors.c @@ -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 = 0x2047, .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,134 +80,134 @@ 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_Interface_AC_t), .Type = DTYPE_CSInterface}, .Subtype = DSUBTYPE_AudioHeader, - + .ACSpecification = VERSION_BCD(01.00), .TotalLength = (sizeof(USB_Audio_Interface_AC_t) + sizeof(USB_Audio_InputTerminal_t) + sizeof(USB_Audio_OutputTerminal_t)), - + .InCollection = 1, .InterfaceNumbers = {1}, }, - .Audio_InputTerminal = + .Audio_InputTerminal = { .Header = {.Size = sizeof(USB_Audio_InputTerminal_t), .Type = DTYPE_CSInterface}, .Subtype = DSUBTYPE_InputTerminal, - + .TerminalID = 0x01, .TerminalType = TERMINAL_IN_MIC, .AssociatedOutputTerminal = 0x00, - + .TotalChannels = 1, .ChannelConfig = 0, - + .ChannelStrIndex = NO_DESCRIPTOR, .TerminalStrIndex = NO_DESCRIPTOR }, - .Audio_OutputTerminal = + .Audio_OutputTerminal = { .Header = {.Size = sizeof(USB_Audio_OutputTerminal_t), .Type = DTYPE_CSInterface}, .Subtype = DSUBTYPE_OutputTerminal, - + .TerminalID = 0x02, .TerminalType = TERMINAL_STREAMING, .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_Interface_AS_t), .Type = DTYPE_CSInterface}, .Subtype = DSUBTYPE_General, - + .TerminalLink = 0x02, - + .FrameDelay = 1, .AudioFormat = 0x0001 }, - - .Audio_AudioFormat = + + .Audio_AudioFormat = { .Header = {.Size = sizeof(USB_Audio_Format_t), .Type = DTYPE_CSInterface}, .Subtype = DSUBTYPE_Format, .FormatType = 0x01, .Channels = 0x01, - + .SubFrameSize = 0x02, .BitResolution = 16, .SampleFrequencyType = (sizeof(ConfigurationDescriptor.Audio_AudioFormat.SampleFrequencies) / sizeof(Audio_SampleFreq_t)), - + .SampleFrequencies = {SAMPLE_FREQ(AUDIO_SAMPLE_FREQUENCY)} }, - - .Audio_StreamEndpoint = + + .Audio_StreamEndpoint = { - .Endpoint = + .Endpoint = { .Header = {.Size = sizeof(USB_Audio_StreamEndpoint_Std_t), .Type = DTYPE_Endpoint}, @@ -216,18 +216,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_StreamEndpoint_Spc_t), .Type = DTYPE_CSEndpoint}, .Subtype = DSUBTYPE_General, - + .Attributes = EP_ACCEPTS_SMALL_PACKETS, - + .LockDelayUnits = 0x00, .LockDelay = 0x0000 } @@ -240,7 +240,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} }; @@ -251,7 +251,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" }; @@ -262,7 +262,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 Audio In Demo" }; @@ -288,30 +288,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; } + diff --git a/Demos/Device/LowLevel/AudioInput/Descriptors.h b/Demos/Device/LowLevel/AudioInput/Descriptors.h index d154f01a4..c8b43b617 100644 --- a/Demos/Device/LowLevel/AudioInput/Descriptors.h +++ b/Demos/Device/LowLevel/AudioInput/Descriptors.h @@ -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_ @@ -59,7 +59,7 @@ /** Audio class descriptor subtype value for an Audio class specific descriptor indicating the format of an audio stream. */ #define DSUBTYPE_Format 0x02 - + //@{ /** Supported channel mask for an Audio class terminal descriptor. See the Audio class specification for more details. */ @@ -94,7 +94,7 @@ //@{ /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */ - + #define TERMINAL_UNDEFINED 0x0100 #define TERMINAL_STREAMING 0x0101 #define TERMINAL_VENDOR 0x01FF @@ -120,7 +120,7 @@ * \param[in] freq Required audio sampling frequency in HZ */ #define SAMPLE_FREQ(freq) {LowWord: ((uint32_t)(freq) & 0x00FFFF), HighByte: (((uint32_t)(freq) >> 16) & 0x0000FF)} - + /** Mask for the attributes parameter of an Audio class specific Endpoint descriptor, indicating that the endpoint * accepts only filled endpoint packets of audio samples. */ @@ -133,16 +133,16 @@ /** 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 an Audio class specific interface descriptor. This follows a regular interface descriptor to * supply extra information about the audio device's layout to the host. See the USB Audio specification for more @@ -155,11 +155,11 @@ uint16_t ACSpecification; /**< Binary coded decimal value, indicating the supported Audio Class specification version */ uint16_t TotalLength; /**< Total length of the Audio class specific descriptors, including this descriptor */ - + uint8_t InCollection; /**< Total number of audio class interfaces within this device */ uint8_t InterfaceNumbers[1]; /**< Interface numbers of each audio interface */ } USB_Audio_Interface_AC_t; - + /** Type define for an Audio class specific Feature Unit descriptor. This indicates to the host what features * are present in the device's audio stream for basic control, such as per-channel volume. See the USB Audio * specification for more details. @@ -168,13 +168,13 @@ { USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length */ uint8_t Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */ - + uint8_t UnitID; /**< ID value of this feature unit - must be a unique value within the device */ uint8_t SourceID; /**< Source ID value of the audio source input into this feature unit */ - + uint8_t ControlSize; /**< Size of each element in the ChanelControlls array */ uint8_t ChannelControls[3]; /**< Feature masks for the control channel, and each separate audio channel */ - + uint8_t FeatureUnitStrIndex; /**< Index of a string descriptor describing this descriptor within the device */ } USB_Audio_FeatureUnit_t; @@ -186,7 +186,7 @@ { USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length */ uint8_t Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */ - + uint8_t TerminalID; /**< ID value of this terminal unit - must be a unique value within the device */ uint16_t TerminalType; /**< Type of terminal, a TERMINAL_* mask */ uint8_t AssociatedOutputTerminal; /**< ID of associated output terminal, for physically grouped terminals @@ -194,7 +194,7 @@ */ uint8_t TotalChannels; /**< Total number of separate audio channels within this interface (right, left, etc.) */ uint16_t ChannelConfig; /**< CHANNEL_* masks indicating what channel layout is supported by this terminal */ - + uint8_t ChannelStrIndex; /**< Index of a string descriptor describing this channel within the device */ uint8_t TerminalStrIndex; /**< Index of a string descriptor describing this descriptor within the device */ } USB_Audio_InputTerminal_t; @@ -207,17 +207,17 @@ { USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length */ uint8_t Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */ - + uint8_t TerminalID; /**< ID value of this terminal unit - must be a unique value within the device */ uint16_t TerminalType; /**< Type of terminal, a TERMINAL_* mask */ uint8_t AssociatedInputTerminal; /**< ID of associated input terminal, for physically grouped terminals * such as the speaker and microphone of a phone handset */ uint8_t SourceID; /**< ID value of the unit this terminal's audio is sourced from */ - + uint8_t TerminalStrIndex; /**< Index of a string descriptor describing this descriptor within the device */ } USB_Audio_OutputTerminal_t; - + /** Type define for an Audio class specific streaming interface descriptor. This indicates to the host * how audio streams within the device are formatted. See the USB Audio specification for more details. */ @@ -225,13 +225,13 @@ { USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length */ uint8_t Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */ - + uint8_t TerminalLink; /**< ID value of the output terminal this descriptor is describing */ - + uint8_t FrameDelay; /**< Delay in frames resulting from the complete sample processing from input to output */ uint16_t AudioFormat; /**< Format of the audio stream, see Audio Device Formats specification */ } USB_Audio_Interface_AS_t; - + /** Type define for a 24bit audio sample frequency structure. GCC does not contain a built in 24bit datatype, * this this structure is used to build up the value instead. Fill this structure with the SAMPLE_FREQ() macro. */ @@ -252,15 +252,15 @@ uint8_t FormatType; /**< Format of the audio stream, see Audio Device Formats specification */ uint8_t Channels; /**< Total number of discrete channels in the stream */ - + uint8_t SubFrameSize; /**< Size in bytes of each channel's sample data in the stream */ uint8_t BitResolution; /**< Bits of resolution of each channel's samples in the stream */ - uint8_t SampleFrequencyType; /**< Total number of sample frequencies supported by the device */ + uint8_t SampleFrequencyType; /**< Total number of sample frequencies supported by the device */ Audio_SampleFreq_t SampleFrequencies[1]; /**< Sample frequencies supported by the device */ } USB_Audio_Format_t; - - /** Type define for an Audio class specific endpoint descriptor. This contains a regular endpoint + + /** Type define for an Audio class specific endpoint descriptor. This contains a regular endpoint * descriptor with a few Audio-class specific extensions. See the USB Audio specification for more details. */ typedef struct @@ -270,7 +270,7 @@ uint8_t Refresh; /**< Always set to zero */ uint8_t SyncEndpointNumber; /**< Endpoint address to send synchronization information to, if needed (zero otherwise) */ } USB_Audio_StreamEndpoint_Std_t; - + /** Type define for an Audio class specific extended endpoint descriptor. This contains extra information * on the usage of endpoints used to stream audio in and out of the USB Audio device, and follows an Audio * class specific extended endpoint descriptor. See the USB Audio specification for more details. @@ -279,13 +279,13 @@ { USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length */ uint8_t Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */ - + uint8_t Attributes; /**< Audio class specific endpoint attributes, such as ACCEPTS_SMALL_PACKETS */ uint8_t LockDelayUnits; /**< Units used for the LockDelay field, see Audio class specification */ uint16_t LockDelay; /**< Time required to internally lock endpoint's internal clock recovery circuitry */ } USB_Audio_StreamEndpoint_Spc_t; - + /** 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. @@ -304,7 +304,7 @@ USB_Audio_StreamEndpoint_Std_t Audio_StreamEndpoint; USB_Audio_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, @@ -312,3 +312,4 @@ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); #endif + diff --git a/Demos/Device/LowLevel/AudioInput/makefile b/Demos/Device/LowLevel/AudioInput/makefile index 34d6b2545..1b7fd07a3 100644 --- a/Demos/Device/LowLevel/AudioInput/makefile +++ b/Demos/Device/LowLevel/AudioInput/makefile @@ -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 @@ -136,7 +136,7 @@ SRC = $(TARGET).c \ # List C++ source files here. (C dependencies are automatically generated.) -CPPSRC = +CPPSRC = # List Assembler source files here. @@ -149,7 +149,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 @@ -263,7 +263,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 @@ -276,7 +276,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) @@ -288,7 +288,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) @@ -300,7 +300,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 = @@ -323,7 +323,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)) @@ -357,7 +357,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 @@ -391,7 +391,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 @@ -420,7 +420,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: @@ -439,10 +439,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. @@ -507,11 +507,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) @@ -538,9 +538,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) @@ -638,14 +638,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. @@ -667,7 +667,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. @@ -711,3 +711,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 + diff --git a/Demos/Device/LowLevel/AudioOutput/AudioOutput.c b/Demos/Device/LowLevel/AudioOutput/AudioOutput.c index fbadf8d0b..e33eb401e 100644 --- a/Demos/Device/LowLevel/AudioOutput/AudioOutput.c +++ b/Demos/Device/LowLevel/AudioOutput/AudioOutput.c @@ -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 @@ * Main source file for the AudioOutput demo. This file contains the main tasks of the demo and * is responsible for the initial application hardware configuration. */ - + #include "AudioOutput.h" /** Flag to indicate if the streaming audio alternative interface has been selected by the host. */ @@ -48,7 +48,7 @@ int main(void) LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); sei(); - + for (;;) { USB_Audio_Task(); @@ -65,7 +65,7 @@ void SetupHardware(void) /* Disable clock division */ clock_prescale_set(clock_div_1); - + /* Hardware Initialization */ LEDs_Init(); USB_Init(); @@ -78,12 +78,12 @@ void EVENT_USB_Device_Connect(void) { /* Indicate USB enumerating */ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); - + /* Sample reload timer initialization */ OCR0A = (F_CPU / 8 / AUDIO_SAMPLE_FREQUENCY) - 1; TCCR0A = (1 << WGM01); // CTC mode TCCR0B = (1 << CS01); // Fcpu/8 speed - + #if defined(AUDIO_OUT_MONO) /* Set speaker as output */ DDRC |= (1 << 6); @@ -100,7 +100,7 @@ void EVENT_USB_Device_Connect(void) TCCR3A = ((1 << WGM30) | (1 << COM3A1) | (1 << COM3A0) | (1 << COM3B1) | (1 << COM3B0)); // Set on match, clear on TOP TCCR3B = ((1 << WGM32) | (1 << CS30)); // Fast 8-Bit PWM, F_CPU speed -#endif +#endif } /** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via @@ -112,7 +112,7 @@ void EVENT_USB_Device_Disconnect(void) TCCR0B = 0; #if (defined(AUDIO_OUT_MONO) || defined(AUDIO_OUT_STEREO)) TCCR3B = 0; -#endif +#endif #if defined(AUDIO_OUT_MONO) /* Set speaker as input to reduce current draw */ @@ -182,11 +182,11 @@ void USB_Audio_Task(void) /* Check to see if the streaming interface is selected, if not the host is not receiving audio */ if (!(StreamingAudioInterfaceSelected)) - return; + return; /* Select the audio stream endpoint */ Endpoint_SelectEndpoint(AUDIO_STREAM_EPNUM); - + /* Check if the current endpoint can be read from (contains a packet) and that the next sample should be read */ if (Endpoint_IsOUTReceived() && (TIFR0 & (1 << OCF0A))) { @@ -234,3 +234,4 @@ void USB_Audio_Task(void) LEDs_SetAllLEDs(LEDMask); } } + diff --git a/Demos/Device/LowLevel/AudioOutput/AudioOutput.h b/Demos/Device/LowLevel/AudioOutput/AudioOutput.h index de7b07175..7e224f23c 100644 --- a/Demos/Device/LowLevel/AudioOutput/AudioOutput.h +++ b/Demos/Device/LowLevel/AudioOutput/AudioOutput.h @@ -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 @@ -43,11 +43,11 @@ #include <avr/interrupt.h> #include "Descriptors.h" - + #include <LUFA/Version.h> #include <LUFA/Drivers/USB/USB.h> #include <LUFA/Drivers/Board/LEDs.h> - + /* Macros: */ /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */ #define LEDMASK_USB_NOTREADY LEDS_LED1 @@ -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); void USB_Audio_Task(void); @@ -71,3 +71,4 @@ void EVENT_USB_Device_UnhandledControlRequest(void); #endif + diff --git a/Demos/Device/LowLevel/AudioOutput/AudioOutput.txt b/Demos/Device/LowLevel/AudioOutput/AudioOutput.txt index 079b537b0..c42fc744b 100644 --- a/Demos/Device/LowLevel/AudioOutput/AudioOutput.txt +++ b/Demos/Device/LowLevel/AudioOutput/AudioOutput.txt @@ -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> */ + diff --git a/Demos/Device/LowLevel/AudioOutput/Descriptors.c b/Demos/Device/LowLevel/AudioOutput/Descriptors.c index 1194568ad..cc3d8ccae 100644 --- a/Demos/Device/LowLevel/AudioOutput/Descriptors.c +++ b/Demos/Device/LowLevel/AudioOutput/Descriptors.c @@ -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 = 0x2046, .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,134 +80,134 @@ 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_Interface_AC_t), .Type = DTYPE_CSInterface}, .Subtype = DSUBTYPE_AudioHeader, - + .ACSpecification = VERSION_BCD(01.00), .TotalLength = (sizeof(USB_Audio_Interface_AC_t) + sizeof(USB_Audio_InputTerminal_t) + sizeof(USB_Audio_OutputTerminal_t)), - + .InCollection = 1, .InterfaceNumbers = {1}, }, - .Audio_InputTerminal = + .Audio_InputTerminal = { .Header = {.Size = sizeof(USB_Audio_InputTerminal_t), .Type = DTYPE_CSInterface}, .Subtype = DSUBTYPE_InputTerminal, - + .TerminalID = 0x01, .TerminalType = TERMINAL_STREAMING, .AssociatedOutputTerminal = 0x00, - + .TotalChannels = 2, .ChannelConfig = (CHANNEL_LEFT_FRONT | CHANNEL_RIGHT_FRONT), - + .ChannelStrIndex = NO_DESCRIPTOR, .TerminalStrIndex = NO_DESCRIPTOR }, - .Audio_OutputTerminal = + .Audio_OutputTerminal = { .Header = {.Size = sizeof(USB_Audio_OutputTerminal_t), .Type = DTYPE_CSInterface}, .Subtype = DSUBTYPE_OutputTerminal, - + .TerminalID = 0x02, .TerminalType = TERMINAL_OUT_SPEAKER, .AssociatedInputTerminal = 0x00, - + .SourceID = 0x01, - - .TerminalStrIndex = NO_DESCRIPTOR + + .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_Interface_AS_t), .Type = DTYPE_CSInterface}, .Subtype = DSUBTYPE_General, - + .TerminalLink = 0x01, - + .FrameDelay = 1, .AudioFormat = 0x0001 }, - - .Audio_AudioFormat = + + .Audio_AudioFormat = { .Header = {.Size = sizeof(USB_Audio_Format_t), .Type = DTYPE_CSInterface}, .Subtype = DSUBTYPE_Format, .FormatType = 0x01, .Channels = 0x02, - + .SubFrameSize = 0x02, .BitResolution = 16, .SampleFrequencyType = (sizeof(ConfigurationDescriptor.Audio_AudioFormat.SampleFrequencies) / - sizeof(Audio_SampleFreq_t)), + sizeof(Audio_SampleFreq_t)), .SampleFrequencies = {SAMPLE_FREQ(AUDIO_SAMPLE_FREQUENCY)} }, - - .Audio_StreamEndpoint = + + .Audio_StreamEndpoint = { - .Endpoint = + .Endpoint = { .Header = {.Size = sizeof(USB_Audio_StreamEndpoint_Std_t), .Type = DTYPE_Endpoint}, @@ -216,18 +216,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_StreamEndpoint_Spc_t), .Type = DTYPE_CSEndpoint}, .Subtype = DSUBTYPE_General, - + .Attributes = EP_ACCEPTS_SMALL_PACKETS, - + .LockDelayUnits = 0x00, .LockDelay = 0x0000 } @@ -240,7 +240,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} }; @@ -251,7 +251,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" }; @@ -262,7 +262,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 Audio Out Demo" }; @@ -292,26 +292,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; } + diff --git a/Demos/Device/LowLevel/AudioOutput/Descriptors.h b/Demos/Device/LowLevel/AudioOutput/Descriptors.h index cd6b2b8cf..c8b43b617 100644 --- a/Demos/Device/LowLevel/AudioOutput/Descriptors.h +++ b/Demos/Device/LowLevel/AudioOutput/Descriptors.h @@ -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_ @@ -59,7 +59,7 @@ /** Audio class descriptor subtype value for an Audio class specific descriptor indicating the format of an audio stream. */ #define DSUBTYPE_Format 0x02 - + //@{ /** Supported channel mask for an Audio class terminal descriptor. See the Audio class specification for more details. */ @@ -94,7 +94,7 @@ //@{ /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */ - + #define TERMINAL_UNDEFINED 0x0100 #define TERMINAL_STREAMING 0x0101 #define TERMINAL_VENDOR 0x01FF @@ -120,7 +120,7 @@ * \param[in] freq Required audio sampling frequency in HZ */ #define SAMPLE_FREQ(freq) {LowWord: ((uint32_t)(freq) & 0x00FFFF), HighByte: (((uint32_t)(freq) >> 16) & 0x0000FF)} - + /** Mask for the attributes parameter of an Audio class specific Endpoint descriptor, indicating that the endpoint * accepts only filled endpoint packets of audio samples. */ @@ -133,16 +133,16 @@ /** 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 an Audio class specific interface descriptor. This follows a regular interface descriptor to * supply extra information about the audio device's layout to the host. See the USB Audio specification for more @@ -155,11 +155,11 @@ uint16_t ACSpecification; /**< Binary coded decimal value, indicating the supported Audio Class specification version */ uint16_t TotalLength; /**< Total length of the Audio class specific descriptors, including this descriptor */ - + uint8_t InCollection; /**< Total number of audio class interfaces within this device */ uint8_t InterfaceNumbers[1]; /**< Interface numbers of each audio interface */ } USB_Audio_Interface_AC_t; - + /** Type define for an Audio class specific Feature Unit descriptor. This indicates to the host what features * are present in the device's audio stream for basic control, such as per-channel volume. See the USB Audio * specification for more details. @@ -168,13 +168,13 @@ { USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length */ uint8_t Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */ - + uint8_t UnitID; /**< ID value of this feature unit - must be a unique value within the device */ uint8_t SourceID; /**< Source ID value of the audio source input into this feature unit */ - + uint8_t ControlSize; /**< Size of each element in the ChanelControlls array */ uint8_t ChannelControls[3]; /**< Feature masks for the control channel, and each separate audio channel */ - + uint8_t FeatureUnitStrIndex; /**< Index of a string descriptor describing this descriptor within the device */ } USB_Audio_FeatureUnit_t; @@ -186,7 +186,7 @@ { USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length */ uint8_t Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */ - + uint8_t TerminalID; /**< ID value of this terminal unit - must be a unique value within the device */ uint16_t TerminalType; /**< Type of terminal, a TERMINAL_* mask */ uint8_t AssociatedOutputTerminal; /**< ID of associated output terminal, for physically grouped terminals @@ -194,7 +194,7 @@ */ uint8_t TotalChannels; /**< Total number of separate audio channels within this interface (right, left, etc.) */ uint16_t ChannelConfig; /**< CHANNEL_* masks indicating what channel layout is supported by this terminal */ - + uint8_t ChannelStrIndex; /**< Index of a string descriptor describing this channel within the device */ uint8_t TerminalStrIndex; /**< Index of a string descriptor describing this descriptor within the device */ } USB_Audio_InputTerminal_t; @@ -207,17 +207,17 @@ { USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length */ uint8_t Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */ - + uint8_t TerminalID; /**< ID value of this terminal unit - must be a unique value within the device */ uint16_t TerminalType; /**< Type of terminal, a TERMINAL_* mask */ uint8_t AssociatedInputTerminal; /**< ID of associated input terminal, for physically grouped terminals * such as the speaker and microphone of a phone handset */ uint8_t SourceID; /**< ID value of the unit this terminal's audio is sourced from */ - + uint8_t TerminalStrIndex; /**< Index of a string descriptor describing this descriptor within the device */ } USB_Audio_OutputTerminal_t; - + /** Type define for an Audio class specific streaming interface descriptor. This indicates to the host * how audio streams within the device are formatted. See the USB Audio specification for more details. */ @@ -225,13 +225,13 @@ { USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length */ uint8_t Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */ - + uint8_t TerminalLink; /**< ID value of the output terminal this descriptor is describing */ - + uint8_t FrameDelay; /**< Delay in frames resulting from the complete sample processing from input to output */ uint16_t AudioFormat; /**< Format of the audio stream, see Audio Device Formats specification */ } USB_Audio_Interface_AS_t; - + /** Type define for a 24bit audio sample frequency structure. GCC does not contain a built in 24bit datatype, * this this structure is used to build up the value instead. Fill this structure with the SAMPLE_FREQ() macro. */ @@ -252,15 +252,15 @@ uint8_t FormatType; /**< Format of the audio stream, see Audio Device Formats specification */ uint8_t Channels; /**< Total number of discrete channels in the stream */ - + uint8_t SubFrameSize; /**< Size in bytes of each channel's sample data in the stream */ uint8_t BitResolution; /**< Bits of resolution of each channel's samples in the stream */ - uint8_t SampleFrequencyType; /**< Total number of sample frequencies supported by the device */ + uint8_t SampleFrequencyType; /**< Total number of sample frequencies supported by the device */ Audio_SampleFreq_t SampleFrequencies[1]; /**< Sample frequencies supported by the device */ } USB_Audio_Format_t; - - /** Type define for an Audio class specific endpoint descriptor. This contains a regular endpoint + + /** Type define for an Audio class specific endpoint descriptor. This contains a regular endpoint * descriptor with a few Audio-class specific extensions. See the USB Audio specification for more details. */ typedef struct @@ -270,7 +270,7 @@ uint8_t Refresh; /**< Always set to zero */ uint8_t SyncEndpointNumber; /**< Endpoint address to send synchronization information to, if needed (zero otherwise) */ } USB_Audio_StreamEndpoint_Std_t; - + /** Type define for an Audio class specific extended endpoint descriptor. This contains extra information * on the usage of endpoints used to stream audio in and out of the USB Audio device, and follows an Audio * class specific extended endpoint descriptor. See the USB Audio specification for more details. @@ -279,12 +279,12 @@ { USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length */ uint8_t Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */ - + uint8_t Attributes; /**< Audio class specific endpoint attributes, such as ACCEPTS_SMALL_PACKETS */ uint8_t LockDelayUnits; /**< Units used for the LockDelay field, see Audio class specification */ uint16_t LockDelay; /**< Time required to internally lock endpoint's internal clock recovery circuitry */ - } USB_Audio_StreamEndpoint_Spc_t; + } USB_Audio_StreamEndpoint_Spc_t; /** 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 @@ -304,7 +304,7 @@ USB_Audio_StreamEndpoint_Std_t Audio_StreamEndpoint; USB_Audio_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, @@ -312,3 +312,4 @@ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); #endif + diff --git a/Demos/Device/LowLevel/AudioOutput/makefile b/Demos/Device/LowLevel/AudioOutput/makefile index 6bcfcafd5..1f526006c 100644 --- a/Demos/Device/LowLevel/AudioOutput/makefile +++ b/Demos/Device/LowLevel/AudioOutput/makefile @@ -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 + diff --git a/Demos/Device/LowLevel/DualVirtualSerial/Descriptors.c b/Demos/Device/LowLevel/DualVirtualSerial/Descriptors.c index ac9739fd7..ca5af2770 100644 --- a/Demos/Device/LowLevel/DualVirtualSerial/Descriptors.c +++ b/Demos/Device/LowLevel/DualVirtualSerial/Descriptors.c @@ -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_Descriptor_CDC_FunctionalHeader_t), .Type = DTYPE_CSInterface}, .Subtype = 0x00, - + .CDCSpecification = VERSION_BCD(01.10), }, - .CDC1_Functional_ACM = + .CDC1_Functional_ACM = { .Header = {.Size = sizeof(USB_Descriptor_CDC_FunctionalACM_t), .Type = DTYPE_CSInterface}, .Subtype = 0x02, - + .Capabilities = 0x06, }, - - .CDC1_Functional_Union = + + .CDC1_Functional_Union = { .Header = {.Size = sizeof(USB_Descriptor_CDC_FunctionalUnion_t), .Type = DTYPE_CSInterface}, .Subtype = 0x06, - + .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_Descriptor_CDC_FunctionalHeader_t), .Type = DTYPE_CSInterface}, .Subtype = 0x00, - + .CDCSpecification = VERSION_BCD(01.10), }, - .CDC2_Functional_ACM = + .CDC2_Functional_ACM = { .Header = {.Size = sizeof(USB_Descriptor_CDC_FunctionalACM_t), .Type = DTYPE_CSInterface}, .Subtype = 0x02, - + .Capabilities = 0x06, }, - - .CDC2_Functional_Union = + + .CDC2_Functional_Union = { .Header = {.Size = sizeof(USB_Descriptor_CDC_FunctionalUnion_t), .Type = DTYPE_CSInterface}, .Subtype = 0x06, - + .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, @@ -308,7 +308,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} }; @@ -319,7 +319,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" }; @@ -330,7 +330,7 @@ USB_Descriptor_String_t PROGMEM ManufacturerString = USB_Descriptor_String_t PROGMEM ProductString = { .Header = {.Size = USB_STRING_LEN(13), .Type = DTYPE_String}, - + .UnicodeString = L"LUFA Dual CDC Demo" }; @@ -349,37 +349,38 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const void* Address = NULL; uint16_t Size = NO_DESCRIPTOR; - + switch (DescriptorType) { 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; + + *DescriptorAddress = Address; return Size; } + diff --git a/Demos/Device/LowLevel/DualVirtualSerial/Descriptors.h b/Demos/Device/LowLevel/DualVirtualSerial/Descriptors.h index 90091ea22..ba876f1df 100644 --- a/Demos/Device/LowLevel/DualVirtualSerial/Descriptors.h +++ b/Demos/Device/LowLevel/DualVirtualSerial/Descriptors.h @@ -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_ @@ -40,22 +40,22 @@ #include <LUFA/Drivers/USB/USB.h> #include <avr/pgmspace.h> - + /* Macros: */ /** Endpoint number of the first CDC interface's device-to-host data IN endpoint. */ - #define CDC1_TX_EPNUM 1 + #define CDC1_TX_EPNUM 1 /** Endpoint number of the first CDC interface's host-to-device data OUT endpoint. */ - #define CDC1_RX_EPNUM 2 + #define CDC1_RX_EPNUM 2 /** Endpoint number of the first CDC interface's device-to-host notification IN endpoint. */ #define CDC1_NOTIFICATION_EPNUM 3 /** Endpoint number of the second CDC interface's device-to-host data IN endpoint. */ - #define CDC2_TX_EPNUM 4 + #define CDC2_TX_EPNUM 4 /** Endpoint number of the second CDC interface's host-to-device data OUT endpoint. */ - #define CDC2_RX_EPNUM 5 + #define CDC2_RX_EPNUM 5 /** Endpoint number of the second CDC interface's device-to-host notification IN endpoint. */ #define CDC2_NOTIFICATION_EPNUM 6 @@ -64,7 +64,7 @@ #define CDC_NOTIFICATION_EPSIZE 8 /** Size in bytes of the CDC data IN and OUT endpoints. */ - #define CDC_TXRX_EPSIZE 16 + #define CDC_TXRX_EPSIZE 16 /* Type Defines: */ /** Type define for a CDC class-specific functional header descriptor. This indicates to the host that the device @@ -89,7 +89,7 @@ uint8_t Subtype; /**< Sub type value used to distinguish between CDC class-specific descriptors. */ uint8_t Capabilities; /**< Capabilities of the ACM interface, given as a bit mask. */ } USB_Descriptor_CDC_FunctionalACM_t; - + /** Type define for a CDC class-specific functional Union descriptor. This indicates to the host that specific * CDC control and data interfaces are related. See the CDC class specification for more details. */ @@ -135,3 +135,4 @@ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); #endif + diff --git a/Demos/Device/LowLevel/DualVirtualSerial/DualVirtualSerial.c b/Demos/Device/LowLevel/DualVirtualSerial/DualVirtualSerial.c index 67463084e..45159a8f8 100644 --- a/Demos/Device/LowLevel/DualVirtualSerial/DualVirtualSerial.c +++ b/Demos/Device/LowLevel/DualVirtualSerial/DualVirtualSerial.c @@ -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 @@ * Main source file for the DualVirtualSerial demo. This file contains the main tasks of the demo and * is responsible for the initial application hardware configuration. */ - + #include "DualVirtualSerial.h" /** Contains the current baud rate and other settings of the first virtual serial port. While this demo does not use @@ -69,7 +69,7 @@ CDC_Line_Coding_t LineEncoding2 = { .BaudRateBPS = 0, int main(void) { SetupHardware(); - + LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); sei(); @@ -160,14 +160,14 @@ void EVENT_USB_Device_UnhandledControlRequest(void) { case REQ_GetLineEncoding: if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) - { + { Endpoint_ClearSETUP(); /* Write the line coding data to the control endpoint */ - Endpoint_Write_Control_Stream_LE(LineEncodingData, sizeof(CDC_Line_Coding_t)); + Endpoint_Write_Control_Stream_LE(LineEncodingData, sizeof(CDC_Line_Coding_t)); Endpoint_ClearOUT(); } - + break; case REQ_SetLineEncoding: if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) @@ -178,7 +178,7 @@ void EVENT_USB_Device_UnhandledControlRequest(void) Endpoint_Read_Control_Stream_LE(LineEncodingData, sizeof(CDC_Line_Coding_t)); Endpoint_ClearIN(); } - + break; case REQ_SetControlLineState: if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) @@ -186,7 +186,7 @@ void EVENT_USB_Device_UnhandledControlRequest(void) Endpoint_ClearSETUP(); Endpoint_ClearStatusStage(); } - + break; } } @@ -199,7 +199,7 @@ void CDC1_Task(void) char* ReportString = NULL; uint8_t JoyStatus_LCL = Joystick_GetStatus(); static bool ActionSent = false; - + /* Device must be connected and configured for the task to run */ if (USB_DeviceState != DEVICE_STATE_Configured) return; @@ -222,26 +222,26 @@ void CDC1_Task(void) if ((ReportString != NULL) && (ActionSent == false) && LineEncoding1.BaudRateBPS) { ActionSent = true; - + /* Select the Serial Tx Endpoint */ Endpoint_SelectEndpoint(CDC1_TX_EPNUM); /* Write the String to the Endpoint */ Endpoint_Write_Stream_LE(ReportString, strlen(ReportString)); - + /* Finalize the stream transfer to send the last packet */ Endpoint_ClearIN(); /* Wait until the endpoint is ready for another packet */ Endpoint_WaitUntilReady(); - + /* Send an empty packet to ensure that the host does not buffer data sent to it */ Endpoint_ClearIN(); } /* Select the Serial Rx Endpoint */ Endpoint_SelectEndpoint(CDC1_RX_EPNUM); - + /* Throw away any received data from the host */ if (Endpoint_IsOUTReceived()) Endpoint_ClearOUT(); @@ -258,16 +258,16 @@ void CDC2_Task(void) /* Select the Serial Rx Endpoint */ Endpoint_SelectEndpoint(CDC2_RX_EPNUM); - + /* Check to see if any data has been received */ if (Endpoint_IsOUTReceived()) { /* Create a temp buffer big enough to hold the incoming endpoint packet */ uint8_t Buffer[Endpoint_BytesInEndpoint()]; - + /* Remember how large the incoming packet is */ uint16_t DataLength = Endpoint_BytesInEndpoint(); - + /* Read in the incoming packet into the buffer */ Endpoint_Read_Stream_LE(&Buffer, DataLength); @@ -276,7 +276,7 @@ void CDC2_Task(void) /* Select the Serial Tx Endpoint */ Endpoint_SelectEndpoint(CDC2_TX_EPNUM); - + /* Write the received data to the endpoint */ Endpoint_Write_Stream_LE(&Buffer, DataLength); @@ -290,3 +290,4 @@ void CDC2_Task(void) Endpoint_ClearIN(); } } + diff --git a/Demos/Device/LowLevel/DualVirtualSerial/DualVirtualSerial.h b/Demos/Device/LowLevel/DualVirtualSerial/DualVirtualSerial.h index 6cce44c5f..b66750112 100644 --- a/Demos/Device/LowLevel/DualVirtualSerial/DualVirtualSerial.h +++ b/Demos/Device/LowLevel/DualVirtualSerial/DualVirtualSerial.h @@ -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 @@ -87,7 +87,7 @@ */ uint8_t DataBits; /**< Bits of data per character of the virtual serial port */ } CDC_Line_Coding_t; - + /* Enums: */ /** Enum for the possible line encoding formats of a virtual serial port. */ enum CDCDevice_CDC_LineCodingFormats_t @@ -96,7 +96,7 @@ OneAndAHalfStopBits = 1, /**< Each frame contains one and a half stop bits */ TwoStopBits = 2, /**< Each frame contains two stop bits */ }; - + /** Enum for the possible line encoding parity settings of a virtual serial port. */ enum CDCDevice_LineCodingParity_t { @@ -116,5 +116,6 @@ void EVENT_USB_Device_Disconnect(void); void EVENT_USB_Device_ConfigurationChanged(void); void EVENT_USB_Device_UnhandledControlRequest(void); - + #endif + diff --git a/Demos/Device/LowLevel/DualVirtualSerial/DualVirtualSerial.txt b/Demos/Device/LowLevel/DualVirtualSerial/DualVirtualSerial.txt index 03a97cee9..2989e7adb 100644 --- a/Demos/Device/LowLevel/DualVirtualSerial/DualVirtualSerial.txt +++ b/Demos/Device/LowLevel/DualVirtualSerial/DualVirtualSerial.txt @@ -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> */ + diff --git a/Demos/Device/LowLevel/DualVirtualSerial/makefile b/Demos/Device/LowLevel/DualVirtualSerial/makefile index bf8c8e0aa..7eb6bb44e 100644 --- a/Demos/Device/LowLevel/DualVirtualSerial/makefile +++ b/Demos/Device/LowLevel/DualVirtualSerial/makefile @@ -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 + diff --git a/Demos/Device/LowLevel/GenericHID/Descriptors.c b/Demos/Device/LowLevel/GenericHID/Descriptors.c index 88388e641..440179645 100644 --- a/Demos/Device/LowLevel/GenericHID/Descriptors.c +++ b/Demos/Device/LowLevel/GenericHID/Descriptors.c @@ -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 = 2, - + .Class = 0x03, .SubClass = 0x00, .Protocol = 0x00, - + .InterfaceStrIndex = NO_DESCRIPTOR }, - .HID_GenericHID = + .HID_GenericHID = { .Header = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID}, - + .HIDSpec = VERSION_BCD(01.11), .CountryCode = 0x00, .TotalReportDescriptors = 1, @@ -139,20 +139,20 @@ 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, .PollingIntervalMS = 0x0A }, - .HID_ReportOUTEndpoint = + .HID_ReportOUTEndpoint = { .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, - + .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_OUT | GENERIC_OUT_EPNUM), .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .EndpointSize = GENERIC_EPSIZE, @@ -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(21), .Type = DTYPE_String}, - + .UnicodeString = L"LUFA Generic HID 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 DTYPE_HID: + case DTYPE_HID: Address = &ConfigurationDescriptor.HID_GenericHID; Size = sizeof(USB_Descriptor_HID_t); break; - case DTYPE_Report: + case DTYPE_Report: Address = &GenericReport; Size = sizeof(GenericReport); break; } - + *DescriptorAddress = Address; return Size; } + diff --git a/Demos/Device/LowLevel/GenericHID/Descriptors.h b/Demos/Device/LowLevel/GenericHID/Descriptors.h index a6a5e35ad..2033c27e7 100644 --- a/Demos/Device/LowLevel/GenericHID/Descriptors.h +++ b/Demos/Device/LowLevel/GenericHID/Descriptors.h @@ -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_ @@ -48,10 +48,10 @@ typedef struct { USB_Descriptor_Header_t Header; - + uint16_t HIDSpec; uint8_t CountryCode; - + uint8_t TotalReportDescriptors; uint8_t HIDReportType; @@ -73,7 +73,7 @@ USB_Descriptor_Endpoint_t HID_ReportINEndpoint; USB_Descriptor_Endpoint_t HID_ReportOUTEndpoint; } USB_Descriptor_Configuration_t; - + /* Macros: */ /** Endpoint number of the Generic HID reporting IN endpoint. */ #define GENERIC_IN_EPNUM 1 @@ -83,13 +83,13 @@ /** 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 /** Descriptor header type value, to indicate a HID class HID descriptor. */ #define DTYPE_HID 0x21 - + /** Descriptor header type value, to indicate a HID class HID report descriptor. */ #define DTYPE_Report 0x22 @@ -100,3 +100,4 @@ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); #endif + diff --git a/Demos/Device/LowLevel/GenericHID/GenericHID.c b/Demos/Device/LowLevel/GenericHID/GenericHID.c index a72cecb45..d7c2e3728 100644 --- a/Demos/Device/LowLevel/GenericHID/GenericHID.c +++ b/Demos/Device/LowLevel/GenericHID/GenericHID.c @@ -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 @@ -46,7 +46,7 @@ static uint8_t LastReceived[GENERIC_REPORT_SIZE]; int main(void) { SetupHardware(); - + LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); sei(); @@ -128,7 +128,7 @@ void EVENT_USB_Device_UnhandledControlRequest(void) Endpoint_Write_Control_Stream_LE(&GenericData, sizeof(GenericData)); Endpoint_ClearOUT(); } - + break; case REQ_SetReport: if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) @@ -143,7 +143,7 @@ void EVENT_USB_Device_UnhandledControlRequest(void) ProcessGenericHIDReport(GenericData); } - + break; } } @@ -159,7 +159,7 @@ void ProcessGenericHIDReport(uint8_t* DataArray) DataArray is an array holding the last report from the host. This function is called each time the host has sent a report to the device. */ - + for (uint8_t i = 0; i < GENERIC_REPORT_SIZE; i++) LastReceived[i] = DataArray[i]; } @@ -172,7 +172,7 @@ void CreateGenericHIDReport(uint8_t* DataArray) { /* This is where you need to create reports to be sent to the host from the device. This - function is called each time the host is ready to accept a new report. DataArray is + function is called each time the host is ready to accept a new report. DataArray is an array to hold the report to the host. */ @@ -187,7 +187,7 @@ void HID_Task(void) return; Endpoint_SelectEndpoint(GENERIC_OUT_EPNUM); - + /* Check to see if a packet has been sent from the host */ if (Endpoint_IsOUTReceived()) { @@ -196,26 +196,26 @@ void HID_Task(void) { /* Create a temporary buffer to hold the read in report from the host */ uint8_t GenericData[GENERIC_REPORT_SIZE]; - + /* Read Generic Report Data */ Endpoint_Read_Stream_LE(&GenericData, sizeof(GenericData)); - + /* Process Generic Report Data */ ProcessGenericHIDReport(GenericData); } /* Finalize the stream transfer to send the last packet */ Endpoint_ClearOUT(); - } + } Endpoint_SelectEndpoint(GENERIC_IN_EPNUM); - + /* Check to see if the host is ready to accept another packet */ if (Endpoint_IsINReady()) { /* Create a temporary buffer to hold the report to send to the host */ uint8_t GenericData[GENERIC_REPORT_SIZE]; - + /* Create Generic Report Data */ CreateGenericHIDReport(GenericData); @@ -226,3 +226,4 @@ void HID_Task(void) Endpoint_ClearIN(); } } + diff --git a/Demos/Device/LowLevel/GenericHID/GenericHID.h b/Demos/Device/LowLevel/GenericHID/GenericHID.h index e6e0666f4..840902e51 100644 --- a/Demos/Device/LowLevel/GenericHID/GenericHID.h +++ b/Demos/Device/LowLevel/GenericHID/GenericHID.h @@ -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_ @@ -43,13 +43,13 @@ #include <avr/interrupt.h> #include <stdbool.h> #include <string.h> - + #include "Descriptors.h" #include <LUFA/Version.h> #include <LUFA/Drivers/USB/USB.h> #include <LUFA/Drivers/Board/LEDs.h> - + /* Macros: */ /** HID Class specific request to get the next HID report from the device. */ #define REQ_GetReport 0x01 @@ -72,7 +72,7 @@ /* Function Prototypes: */ void SetupHardware(void); void HID_Task(void); - + void EVENT_USB_Device_Connect(void); void EVENT_USB_Device_Disconnect(void); void EVENT_USB_Device_ConfigurationChanged(void); @@ -81,5 +81,6 @@ void ProcessGenericHIDReport(uint8_t* DataArray); void CreateGenericHIDReport(uint8_t* DataArray); - + #endif + diff --git a/Demos/Device/LowLevel/GenericHID/GenericHID.txt b/Demos/Device/LowLevel/GenericHID/GenericHID.txt index b73a9512d..60920c7fb 100644 --- a/Demos/Device/LowLevel/GenericHID/GenericHID.txt +++ b/Demos/Device/LowLevel/GenericHID/GenericHID.txt @@ -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> */ + diff --git a/Demos/Device/LowLevel/GenericHID/makefile b/Demos/Device/LowLevel/GenericHID/makefile index 8e366900d..bbcc74160 100644 --- a/Demos/Device/LowLevel/GenericHID/makefile +++ b/Demos/Device/LowLevel/GenericHID/makefile @@ -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 + diff --git a/Demos/Device/LowLevel/Joystick/Descriptors.c b/Demos/Device/LowLevel/Joystick/Descriptors.c index 19925a9c9..08674c8d6 100644 --- a/Demos/Device/LowLevel/Joystick/Descriptors.c +++ b/Demos/Device/LowLevel/Joystick/Descriptors.c @@ -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 = 0x00, - + .InterfaceStrIndex = NO_DESCRIPTOR }, - .HID_JoystickHID = + .HID_JoystickHID = { .Header = {.Size = sizeof(USB_Descriptor_HID_t), .Type = 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 DTYPE_HID: + case DTYPE_HID: Address = &ConfigurationDescriptor.HID_JoystickHID; Size = sizeof(USB_Descriptor_HID_t); break; - case DTYPE_Report: + case DTYPE_Report: Address = &JoystickReport; Size = sizeof(JoystickReport); break; } - + *DescriptorAddress = Address; return Size; } + diff --git a/Demos/Device/LowLevel/Joystick/Descriptors.h b/Demos/Device/LowLevel/Joystick/Descriptors.h index ee828fd4c..76f609715 100644 --- a/Demos/Device/LowLevel/Joystick/Descriptors.h +++ b/Demos/Device/LowLevel/Joystick/Descriptors.h @@ -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_ @@ -48,10 +48,10 @@ typedef struct { USB_Descriptor_Header_t Header; - + uint16_t HIDSpec; uint8_t CountryCode; - + uint8_t TotalReportDescriptors; uint8_t HIDReportType; @@ -72,7 +72,7 @@ USB_Descriptor_HID_t HID_JoystickHID; USB_Descriptor_Endpoint_t HID_ReportINEndpoint; } USB_Descriptor_Configuration_t; - + /* Macros: */ /** Endpoint number of the Joystick HID reporting IN endpoint. */ #define JOYSTICK_EPNUM 1 @@ -82,7 +82,7 @@ /** Descriptor header type value, to indicate a HID class HID descriptor. */ #define DTYPE_HID 0x21 - + /** Descriptor header type value, to indicate a HID class HID report descriptor. */ #define DTYPE_Report 0x22 @@ -93,3 +93,4 @@ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); #endif + diff --git a/Demos/Device/LowLevel/Joystick/Joystick.c b/Demos/Device/LowLevel/Joystick/Joystick.c index 5aadb599c..24f744fdb 100644 --- a/Demos/Device/LowLevel/Joystick/Joystick.c +++ b/Demos/Device/LowLevel/Joystick/Joystick.c @@ -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 @@ -42,7 +42,7 @@ int main(void) { SetupHardware(); - + LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); sei(); @@ -90,7 +90,7 @@ void EVENT_USB_Device_Disconnect(void) /** Event handler for the USB_ConfigurationChanged event. This is fired when the host set the current configuration * of the USB device after enumeration - the device endpoints are configured and the joystick reporting task started. - */ + */ void EVENT_USB_Device_ConfigurationChanged(void) { bool ConfigSuccess = true; @@ -116,8 +116,8 @@ void EVENT_USB_Device_UnhandledControlRequest(void) if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) { USB_JoystickReport_Data_t JoystickReportData; - - /* Create the next HID report to send to the host */ + + /* Create the next HID report to send to the host */ GetNextReport(&JoystickReportData); Endpoint_ClearSETUP(); @@ -126,7 +126,7 @@ void EVENT_USB_Device_UnhandledControlRequest(void) Endpoint_Write_Control_Stream_LE(&JoystickReportData, sizeof(JoystickReportData)); Endpoint_ClearOUT(); } - + break; } } @@ -160,10 +160,10 @@ bool GetNextReport(USB_JoystickReport_Data_t* const ReportData) if (JoyStatus_LCL & JOY_PRESS) ReportData->Button = (1 << 1); - + if (ButtonStatus_LCL & BUTTONS_BUTTON1) ReportData->Button |= (1 << 0); - + /* Check if the new report is different to the previous report */ InputChanged = (uint8_t)(PrevJoyStatus ^ JoyStatus_LCL) | (uint8_t)(PrevButtonStatus ^ ButtonStatus_LCL); @@ -181,7 +181,7 @@ void HID_Task(void) /* Device must be connected and configured for the task to run */ if (USB_DeviceState != DEVICE_STATE_Configured) return; - + /* Select the Joystick Report Endpoint */ Endpoint_SelectEndpoint(JOYSTICK_EPNUM); @@ -189,17 +189,18 @@ void HID_Task(void) if (Endpoint_IsINReady()) { USB_JoystickReport_Data_t JoystickReportData; - + /* Create the next HID report to send to the host */ GetNextReport(&JoystickReportData); - + /* Write Joystick Report Data */ Endpoint_Write_Stream_LE(&JoystickReportData, sizeof(JoystickReportData)); /* Finalize the stream transfer to send the last packet */ Endpoint_ClearIN(); - + /* Clear the report data afterwards */ memset(&JoystickReportData, 0, sizeof(JoystickReportData)); } } + diff --git a/Demos/Device/LowLevel/Joystick/Joystick.h b/Demos/Device/LowLevel/Joystick/Joystick.h index 607f56ec9..e1ae51228 100644 --- a/Demos/Device/LowLevel/Joystick/Joystick.h +++ b/Demos/Device/LowLevel/Joystick/Joystick.h @@ -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_ @@ -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) - + /* Type Defines: */ /** Type define for the joystick HID report structure, for creating and sending HID reports to the host PC. * This mirrors the layout described to the host in the HID report descriptor, in Descriptors.c. @@ -90,3 +90,4 @@ bool GetNextReport(USB_JoystickReport_Data_t* const ReportData); #endif + diff --git a/Demos/Device/LowLevel/Joystick/Joystick.txt b/Demos/Device/LowLevel/Joystick/Joystick.txt index 5b1495cbc..0a8dff697 100644 --- a/Demos/Device/LowLevel/Joystick/Joystick.txt +++ b/Demos/Device/LowLevel/Joystick/Joystick.txt @@ -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> */ + diff --git a/Demos/Device/LowLevel/Joystick/makefile b/Demos/Device/LowLevel/Joystick/makefile index 710ec136e..e253c56d7 100644 --- a/Demos/Device/LowLevel/Joystick/makefile +++ b/Demos/Device/LowLevel/Joystick/makefile @@ -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 + diff --git a/Demos/Device/LowLevel/Keyboard/Descriptors.c b/Demos/Device/LowLevel/Keyboard/Descriptors.c index 69265cba9..e1a87662f 100644 --- a/Demos/Device/LowLevel/Keyboard/Descriptors.c +++ b/Demos/Device/LowLevel/Keyboard/Descriptors.c @@ -1,7 +1,7 @@ /* LUFA Library Copyright (C) Dean Camera, 2010. - + dean [at] fourwalledcubicle [dot] com www.fourwalledcubicle.com */ @@ -9,14 +9,14 @@ /* Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) Copyright 2010 Denver Gingerich (denver [at] ossguy [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,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" @@ -88,22 +88,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 }; @@ -114,49 +114,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 = 2, - + .Class = 0x03, .SubClass = 0x01, .Protocol = 0x01, - + .InterfaceStrIndex = NO_DESCRIPTOR }, - .HID_KeyboardHID = - { + .HID_KeyboardHID = + { .Header = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID}, - + .HIDSpec = VERSION_BCD(01.11), .CountryCode = 0x00, .TotalReportDescriptors = 1, .HIDReportType = DTYPE_Report, .HIDReportLength = sizeof(KeyboardReport) }, - - .HID_ReportINEndpoint = + + .HID_ReportINEndpoint = { .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, @@ -166,7 +166,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor = .PollingIntervalMS = 0x0A }, - .HID_ReportOUTEndpoint = + .HID_ReportOUTEndpoint = { .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, @@ -184,7 +184,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} }; @@ -195,7 +195,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" }; @@ -206,7 +206,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" }; @@ -228,42 +228,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 DTYPE_HID: + case DTYPE_HID: Address = &ConfigurationDescriptor.HID_KeyboardHID; Size = sizeof(USB_Descriptor_HID_t); break; - case DTYPE_Report: + case DTYPE_Report: Address = &KeyboardReport; Size = sizeof(KeyboardReport); break; } - + *DescriptorAddress = Address; return Size; } + diff --git a/Demos/Device/LowLevel/Keyboard/Descriptors.h b/Demos/Device/LowLevel/Keyboard/Descriptors.h index 815381bb7..0ee13a4e4 100644 --- a/Demos/Device/LowLevel/Keyboard/Descriptors.h +++ b/Demos/Device/LowLevel/Keyboard/Descriptors.h @@ -1,7 +1,7 @@ /* LUFA Library Copyright (C) Dean Camera, 2010. - + dean [at] fourwalledcubicle [dot] com www.fourwalledcubicle.com */ @@ -9,14 +9,14 @@ /* Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) Copyright 2010 Denver Gingerich (denver [at] ossguy [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 @@ -45,20 +45,20 @@ /* Type Defines: */ /** Type define for the HID class specific HID descriptor, to describe the HID device's specifications. Refer to the HID * specification for details on the structure elements. - */ + */ typedef struct { USB_Descriptor_Header_t Header; - + uint16_t HIDSpec; uint8_t CountryCode; - + uint8_t TotalReportDescriptors; uint8_t HIDReportType; uint16_t HIDReportLength; } USB_Descriptor_HID_t; - + /** Type define for the data type used to store HID report descriptor elements. */ typedef uint8_t USB_Descriptor_HIDReport_Datatype_t; @@ -74,20 +74,20 @@ USB_Descriptor_Endpoint_t HID_ReportINEndpoint; USB_Descriptor_Endpoint_t HID_ReportOUTEndpoint; } USB_Descriptor_Configuration_t; - + /* Macros: */ /** Endpoint number of the Keyboard HID reporting IN endpoint. */ #define KEYBOARD_IN_EPNUM 1 /** Endpoint number of the Keyboard HID reporting OUT endpoint. */ #define KEYBOARD_OUT_EPNUM 2 - - /** 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 /** Descriptor header type value, to indicate a HID class HID descriptor. */ #define DTYPE_HID 0x21 - + /** Descriptor header type value, to indicate a HID class HID report descriptor. */ #define DTYPE_Report 0x22 @@ -98,3 +98,4 @@ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); #endif + diff --git a/Demos/Device/LowLevel/Keyboard/Keyboard.c b/Demos/Device/LowLevel/Keyboard/Keyboard.c index b4d4c2137..9d187f850 100644 --- a/Demos/Device/LowLevel/Keyboard/Keyboard.c +++ b/Demos/Device/LowLevel/Keyboard/Keyboard.c @@ -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 Denver Gingerich (denver [at] ossguy [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 @@ * Main source file for the Keyboard demo. This file contains the main tasks of the demo and * is responsible for the initial application hardware configuration. */ - + #include "Keyboard.h" /** Indicates what report mode the host has requested, true for normal HID reporting mode, false for special boot @@ -48,7 +48,7 @@ bool UsingReportProtocol = true; uint16_t IdleCount = 500; /** Current Idle period remaining. When the IdleCount value is set, this tracks the remaining number of idle - * milliseconds. This is separate to the IdleCount timer and is incremented and compared as the host may request + * milliseconds. This is separate to the IdleCount timer and is incremented and compared as the host may request * the current idle period via a Get Idle HID class request, thus its value must be preserved. */ uint16_t IdleMSRemaining = 0; @@ -60,7 +60,7 @@ uint16_t IdleMSRemaining = 0; int main(void) { SetupHardware(); - + LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); sei(); @@ -113,7 +113,7 @@ void EVENT_USB_Device_Disconnect(void) * of the USB device after enumeration, and configures the keyboard device endpoints. */ void EVENT_USB_Device_ConfigurationChanged(void) -{ +{ bool ConfigSuccess = true; /* Setup HID Report Endpoints */ @@ -126,7 +126,7 @@ void EVENT_USB_Device_ConfigurationChanged(void) USB_Device_EnableSOFEvents(); /* Indicate endpoint configuration success or failure */ - LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); + LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); } /** Event handler for the USB_UnhandledControlRequest event. This is used to catch standard and class specific @@ -152,13 +152,13 @@ void EVENT_USB_Device_UnhandledControlRequest(void) Endpoint_Write_Control_Stream_LE(&KeyboardReportData, sizeof(KeyboardReportData)); Endpoint_ClearOUT(); } - + break; case REQ_SetReport: if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) { Endpoint_ClearSETUP(); - + /* Wait until the LED report has been sent by the host */ while (!(Endpoint_IsOUTReceived())) { @@ -175,20 +175,20 @@ void EVENT_USB_Device_UnhandledControlRequest(void) /* Process the incoming LED report */ ProcessLEDReport(LEDStatus); } - + break; case REQ_GetProtocol: if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) { Endpoint_ClearSETUP(); - + /* Write the current protocol flag to the host */ Endpoint_Write_Byte(UsingReportProtocol); Endpoint_ClearIN(); Endpoint_ClearStatusStage(); } - + break; case REQ_SetProtocol: if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) @@ -199,26 +199,26 @@ void EVENT_USB_Device_UnhandledControlRequest(void) /* Set or clear the flag depending on what the host indicates that the current Protocol should be */ UsingReportProtocol = (USB_ControlRequest.wValue != 0); } - + break; case REQ_SetIdle: if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) { - Endpoint_ClearSETUP(); + Endpoint_ClearSETUP(); Endpoint_ClearStatusStage(); /* Get idle period in MSB, IdleCount must be multiplied by 4 to get number of milliseconds */ IdleCount = ((USB_ControlRequest.wValue & 0xFF00) >> 6); } - + break; case REQ_GetIdle: if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) - { + { Endpoint_ClearSETUP(); - + /* Write the current idle duration to the host, must be divided by 4 before sent to host */ - Endpoint_Write_Byte(IdleCount >> 2); + Endpoint_Write_Byte(IdleCount >> 2); Endpoint_ClearIN(); Endpoint_ClearStatusStage(); @@ -249,10 +249,10 @@ void CreateKeyboardReport(USB_KeyboardReport_Data_t* const ReportData) /* Clear the report contents */ memset(ReportData, 0, sizeof(USB_KeyboardReport_Data_t)); - + /* Make sent key uppercase by indicating that the left shift key is pressed */ ReportData->Modifier = KEYBOARD_MODIFER_LEFTSHIFT; - + if (JoyStatus_LCL & JOY_UP) ReportData->KeyCode[UsedKeyCodes++] = 0x04; // A else if (JoyStatus_LCL & JOY_DOWN) @@ -265,7 +265,7 @@ void CreateKeyboardReport(USB_KeyboardReport_Data_t* const ReportData) if (JoyStatus_LCL & JOY_PRESS) ReportData->KeyCode[UsedKeyCodes++] = 0x08; // E - + if (ButtonStatus_LCL & BUTTONS_BUTTON1) ReportData->KeyCode[UsedKeyCodes++] = 0x09; // F } @@ -277,10 +277,10 @@ void CreateKeyboardReport(USB_KeyboardReport_Data_t* const ReportData) void ProcessLEDReport(const uint8_t LEDReport) { uint8_t LEDMask = LEDS_LED2; - + if (LEDReport & KEYBOARD_LED_NUMLOCK) LEDMask |= LEDS_LED1; - + if (LEDReport & KEYBOARD_LED_CAPSLOCK) LEDMask |= LEDS_LED3; @@ -297,23 +297,23 @@ void SendNextReport(void) static USB_KeyboardReport_Data_t PrevKeyboardReportData; USB_KeyboardReport_Data_t KeyboardReportData; bool SendReport = true; - + /* Create the next keyboard report for transmission to the host */ CreateKeyboardReport(&KeyboardReportData); - + /* Check to see if the report data has changed - if so a report MUST be sent */ SendReport = (memcmp(&PrevKeyboardReportData, &KeyboardReportData, sizeof(USB_KeyboardReport_Data_t)) != 0); - + /* Check if the idle period is set and has elapsed */ if ((IdleCount != HID_IDLE_CHANGESONLY) && (!(IdleMSRemaining))) { /* Reset the idle time remaining counter */ IdleMSRemaining = IdleCount; - + /* Idle period is set and has elapsed, must send a report to the host */ SendReport = true; } - + /* Select the Keyboard Report Endpoint */ Endpoint_SelectEndpoint(KEYBOARD_IN_EPNUM); @@ -322,10 +322,10 @@ void SendNextReport(void) { /* Save the current report data for later comparison to check for changes */ PrevKeyboardReportData = KeyboardReportData; - + /* Write Keyboard Report Data */ Endpoint_Write_Stream_LE(&KeyboardReportData, sizeof(KeyboardReportData)); - + /* Finalize the stream transfer to send the last packet */ Endpoint_ClearIN(); } @@ -361,10 +361,11 @@ void HID_Task(void) /* Device must be connected and configured for the task to run */ if (USB_DeviceState != DEVICE_STATE_Configured) return; - + /* Send the next keypress report to the host */ SendNextReport(); - + /* Process the LED report sent from the host */ ReceiveNextReport(); } + diff --git a/Demos/Device/LowLevel/Keyboard/Keyboard.h b/Demos/Device/LowLevel/Keyboard/Keyboard.h index e5904b8d6..06526566c 100644 --- a/Demos/Device/LowLevel/Keyboard/Keyboard.h +++ b/Demos/Device/LowLevel/Keyboard/Keyboard.h @@ -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 Denver Gingerich (denver [at] ossguy [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 @@ -101,7 +101,7 @@ /** Constant for a keyboard output report LED byte, indicating that the host's NUM LOCK mode is currently set. */ #define KEYBOARD_LED_NUMLOCK (1 << 0) - + /** Constant for a keyboard output report LED byte, indicating that the host's CAPS LOCK mode is currently set. */ #define KEYBOARD_LED_CAPSLOCK (1 << 1) @@ -110,7 +110,7 @@ /** Constant for a keyboard output report LED byte, indicating that the host's KATANA mode is currently set. */ #define KEYBOARD_LED_KATANA (1 << 3) - + /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */ #define LEDMASK_USB_NOTREADY LEDS_LED1 @@ -133,11 +133,11 @@ uint8_t Reserved; /**< Reserved, always set as 0x00 */ uint8_t KeyCode[6]; /**< Array of up to six simultaneous key codes of pressed keys */ } USB_KeyboardReport_Data_t; - + /* Function Prototypes: */ void SetupHardware(void); void HID_Task(void); - + void EVENT_USB_Device_Connect(void); void EVENT_USB_Device_Disconnect(void); void EVENT_USB_Device_ConfigurationChanged(void); @@ -150,3 +150,4 @@ void ReceiveNextReport(void); #endif + diff --git a/Demos/Device/LowLevel/Keyboard/Keyboard.txt b/Demos/Device/LowLevel/Keyboard/Keyboard.txt index 49e990f24..54d86d3a7 100644 --- a/Demos/Device/LowLevel/Keyboard/Keyboard.txt +++ b/Demos/Device/LowLevel/Keyboard/Keyboard.txt @@ -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>N/A</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> */ + diff --git a/Demos/Device/LowLevel/Keyboard/makefile b/Demos/Device/LowLevel/Keyboard/makefile index f46afabc4..c78388099 100644 --- a/Demos/Device/LowLevel/Keyboard/makefile +++ b/Demos/Device/LowLevel/Keyboard/makefile @@ -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 + diff --git a/Demos/Device/LowLevel/KeyboardMouse/Descriptors.c b/Demos/Device/LowLevel/KeyboardMouse/Descriptors.c index 642b8e904..b04dccdf8 100644 --- a/Demos/Device/LowLevel/KeyboardMouse/Descriptors.c +++ b/Demos/Device/LowLevel/KeyboardMouse/Descriptors.c @@ -1,7 +1,7 @@ /* LUFA Library Copyright (C) Dean Camera, 2010. - + dean [at] fourwalledcubicle [dot] com www.fourwalledcubicle.com */ @@ -9,14 +9,14 @@ /* Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) Copyright 2010 Denver Gingerich (denver [at] ossguy [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,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" @@ -121,22 +121,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 }; @@ -147,49 +147,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 = 2, - + .Class = 0x03, .SubClass = 0x01, .Protocol = 0x01, - + .InterfaceStrIndex = NO_DESCRIPTOR }, - .HID1_KeyboardHID = - { + .HID1_KeyboardHID = + { .Header = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID}, - + .HIDSpec = VERSION_BCD(01.11), .CountryCode = 0x00, .TotalReportDescriptors = 1, .HIDReportType = DTYPE_Report, .HIDReportLength = sizeof(KeyboardReport) }, - - .HID1_ReportINEndpoint = + + .HID1_ReportINEndpoint = { .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, @@ -199,7 +199,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor = .PollingIntervalMS = 0x0A }, - .HID1_ReportOUTEndpoint = + .HID1_ReportOUTEndpoint = { .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, @@ -209,34 +209,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 = 0x02, - + .InterfaceStrIndex = NO_DESCRIPTOR }, - .HID2_MouseHID = - { + .HID2_MouseHID = + { .Header = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID}, - + .HIDSpec = VERSION_BCD(01.11), .CountryCode = 0x00, .TotalReportDescriptors = 1, .HIDReportType = DTYPE_Report, .HIDReportLength = sizeof(MouseReport) }, - - .HID2_ReportINEndpoint = + + .HID2_ReportINEndpoint = { .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, @@ -254,7 +254,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} }; @@ -265,7 +265,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" }; @@ -276,7 +276,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" }; @@ -298,33 +298,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 DTYPE_HID: + case DTYPE_HID: if (!(wIndex)) { Address = &ConfigurationDescriptor.HID1_KeyboardHID; @@ -333,24 +333,25 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, else { Address = &ConfigurationDescriptor.HID2_MouseHID; - Size = sizeof(USB_Descriptor_HID_t); + Size = sizeof(USB_Descriptor_HID_t); } break; - case DTYPE_Report: + case DTYPE_Report: if (!(wIndex)) { Address = &KeyboardReport; Size = sizeof(KeyboardReport); } else - { + { Address = &MouseReport; Size = sizeof(MouseReport); } - + break; } - + *DescriptorAddress = Address; return Size; } + diff --git a/Demos/Device/LowLevel/KeyboardMouse/Descriptors.h b/Demos/Device/LowLevel/KeyboardMouse/Descriptors.h index 8005d5ad3..908591c26 100644 --- a/Demos/Device/LowLevel/KeyboardMouse/Descriptors.h +++ b/Demos/Device/LowLevel/KeyboardMouse/Descriptors.h @@ -1,7 +1,7 @@ /* LUFA Library Copyright (C) Dean Camera, 2010. - + dean [at] fourwalledcubicle [dot] com www.fourwalledcubicle.com */ @@ -9,14 +9,14 @@ /* Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) Copyright 2010 Denver Gingerich (denver [at] ossguy [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 @@ * * Header file for Descriptors.c. */ - + #ifndef _DESCRIPTORS_H_ #define _DESCRIPTORS_H_ @@ -49,10 +49,10 @@ typedef struct { USB_Descriptor_Header_t Header; - + uint16_t HIDSpec; uint8_t CountryCode; - + uint8_t TotalReportDescriptors; uint8_t HIDReportType; @@ -77,7 +77,7 @@ USB_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 @@ -93,7 +93,7 @@ /** Descriptor header type value, to indicate a HID class HID descriptor. */ #define DTYPE_HID 0x21 - + /** Descriptor header type value, to indicate a HID class HID report descriptor. */ #define DTYPE_Report 0x22 @@ -104,3 +104,4 @@ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); #endif + diff --git a/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.c b/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.c index 2f4bd76cf..678957378 100644 --- a/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.c +++ b/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.c @@ -1,7 +1,7 @@ /* LUFA Library Copyright (C) Dean Camera, 2010. - + dean [at] fourwalledcubicle [dot] com www.fourwalledcubicle.com */ @@ -9,14 +9,14 @@ /* Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) Copyright 2010 Denver Gingerich (denver [at] ossguy [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 @@ * Main source file for the KeyboardMouse demo. This file contains the main tasks of the demo and * is responsible for the initial application hardware configuration. */ - + #include "KeyboardMouse.h" /** Global structure to hold the current keyboard interface HID report, for transmission to the host */ @@ -50,7 +50,7 @@ USB_MouseReport_Data_t MouseReportData; int main(void) { SetupHardware(); - + LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); sei(); @@ -114,7 +114,7 @@ void EVENT_USB_Device_ConfigurationChanged(void) HID_EPSIZE, ENDPOINT_BANK_SINGLE); /* Indicate endpoint configuration success or failure */ - LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); + LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); } /** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific @@ -133,7 +133,7 @@ void EVENT_USB_Device_UnhandledControlRequest(void) if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) { Endpoint_ClearSETUP(); - + /* Determine if it is the mouse or the keyboard data that is being requested */ if (!(USB_ControlRequest.wIndex)) { @@ -153,13 +153,13 @@ void EVENT_USB_Device_UnhandledControlRequest(void) /* Clear the report data afterwards */ memset(ReportData, 0, ReportSize); } - + break; case REQ_SetReport: if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) { Endpoint_ClearSETUP(); - + /* Wait until the LED report has been sent by the host */ while (!(Endpoint_IsOUTReceived())) { @@ -176,7 +176,7 @@ void EVENT_USB_Device_UnhandledControlRequest(void) /* Process the incoming LED report */ Keyboard_ProcessLEDReport(LEDStatus); } - + break; } } @@ -189,10 +189,10 @@ void EVENT_USB_Device_UnhandledControlRequest(void) void Keyboard_ProcessLEDReport(const uint8_t LEDStatus) { uint8_t LEDMask = LEDS_LED2; - + if (LEDStatus & KEYBOARD_LED_NUMLOCK) LEDMask |= LEDS_LED1; - + if (LEDStatus & KEYBOARD_LED_CAPSLOCK) LEDMask |= LEDS_LED3; @@ -256,7 +256,7 @@ void Keyboard_HID_Task(void) /* Check if Keyboard LED Endpoint Ready for Read/Write */ if (Endpoint_IsReadWriteAllowed()) - { + { /* Read in and process the LED report from the host */ Keyboard_ProcessLEDReport(Endpoint_Read_Byte()); @@ -309,3 +309,4 @@ void Mouse_HID_Task(void) memset(&MouseReportData, 0, sizeof(MouseReportData)); } } + diff --git a/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.h b/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.h index 565fa57ac..40572992d 100644 --- a/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.h +++ b/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.h @@ -1,7 +1,7 @@ /* LUFA Library Copyright (C) Dean Camera, 2010. - + dean [at] fourwalledcubicle [dot] com www.fourwalledcubicle.com */ @@ -9,14 +9,14 @@ /* Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) Copyright 2010 Denver Gingerich (denver [at] ossguy [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 @@ -47,7 +47,7 @@ #include <LUFA/Drivers/Board/Joystick.h> #include <LUFA/Drivers/Board/LEDs.h> #include <LUFA/Drivers/Board/Buttons.h> - + /* Macros: */ /** HID Class specific request to get the next HID report from the device. */ #define REQ_GetReport 0x01 @@ -87,7 +87,7 @@ /** Constant for a keyboard output report LED byte, indicating that the host's NUM LOCK mode is currently set. */ #define KEYBOARD_LED_NUMLOCK (1 << 0) - + /** Constant for a keyboard output report LED byte, indicating that the host's CAPS LOCK mode is currently set. */ #define KEYBOARD_LED_CAPSLOCK (1 << 1) @@ -108,7 +108,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) - + /* Type Defines: */ /** Type define for the keyboard HID report structure, for creating and sending HID reports to the host PC. * This mirrors the layout described to the host in the HID report descriptor, in Descriptors.c. @@ -129,17 +129,18 @@ int8_t X; /**< Current mouse delta X movement, as a signed 8-bit integer */ int8_t Y; /**< Current mouse delta Y movement, as a signed 8-bit integer */ } USB_MouseReport_Data_t; - + /* Function Prototypes: */ void SetupHardware(void); void Keyboard_ProcessLEDReport(const uint8_t LEDStatus); void Keyboard_HID_Task(void); void Mouse_HID_Task(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); void EVENT_USB_Device_StartOfFrame(void); - + #endif + diff --git a/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.txt b/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.txt index f13087885..984493056 100644 --- a/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.txt +++ b/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.txt @@ -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> */ + diff --git a/Demos/Device/LowLevel/KeyboardMouse/makefile b/Demos/Device/LowLevel/KeyboardMouse/makefile index 3898c8209..d3527c790 100644 --- a/Demos/Device/LowLevel/KeyboardMouse/makefile +++ b/Demos/Device/LowLevel/KeyboardMouse/makefile @@ -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 + diff --git a/Demos/Device/LowLevel/MIDI/Descriptors.c b/Demos/Device/LowLevel/MIDI/Descriptors.c index 3c2efdbd9..5640c67ca 100644 --- a/Demos/Device/LowLevel/MIDI/Descriptors.c +++ b/Demos/Device/LowLevel/MIDI/Descriptors.c @@ -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 + + .InterfaceStrIndex = NO_DESCRIPTOR }, - - .Audio_ControlInterface_SPC = + + .Audio_ControlInterface_SPC = { .Header = {.Size = sizeof(USB_Audio_Interface_AC_t), .Type = DTYPE_CSInterface}, .Subtype = DSUBTYPE_AudioHeader, - + .AudioSpecification = VERSION_BCD(01.00), .TotalLength = sizeof(USB_Audio_Interface_AC_t), - + .InCollection = 1, - .InterfaceNumbers = {1}, + .InterfaceNumbers = {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_Audio_Interface_MIDI_AS_t), .Type = DTYPE_CSInterface}, .Subtype = DSUBTYPE_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_In_Jack_t), .Type = DTYPE_CSInterface}, .Subtype = DSUBTYPE_InputJack, - + .JackType = JACKTYPE_EMBEDDED, .JackID = 0x01, - + .JackStrIndex = NO_DESCRIPTOR }, - .MIDI_In_Jack_Ext = + .MIDI_In_Jack_Ext = { .Header = {.Size = sizeof(USB_MIDI_In_Jack_t), .Type = DTYPE_CSInterface}, .Subtype = DSUBTYPE_InputJack, - + .JackType = JACKTYPE_EXTERNAL, .JackID = 0x02, - + .JackStrIndex = NO_DESCRIPTOR }, - - .MIDI_Out_Jack_Emb = + + .MIDI_Out_Jack_Emb = { .Header = {.Size = sizeof(USB_MIDI_Out_Jack_t), .Type = DTYPE_CSInterface}, .Subtype = DSUBTYPE_OutputJack, - + .JackType = 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_Out_Jack_t), .Type = DTYPE_CSInterface}, .Subtype = DSUBTYPE_OutputJack, - + .JackType = 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_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_Jack_Endpoint_t), .Type = DTYPE_CSEndpoint}, .Subtype = DSUBTYPE_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_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_Jack_Endpoint_t), .Type = DTYPE_CSEndpoint}, .Subtype = DSUBTYPE_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; } + diff --git a/Demos/Device/LowLevel/MIDI/Descriptors.h b/Demos/Device/LowLevel/MIDI/Descriptors.h index e110cc2e6..abaabb731 100644 --- a/Demos/Device/LowLevel/MIDI/Descriptors.h +++ b/Demos/Device/LowLevel/MIDI/Descriptors.h @@ -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_ @@ -59,7 +59,7 @@ /** Audio class descriptor jack type value for an external (physical) MIDI input or output jack. */ #define JACKTYPE_EXTERNAL 0x02 - + /** Endpoint number of the MIDI streaming data IN endpoint, for device-to-host data transfers. */ #define MIDI_STREAM_IN_EPNUM 1 @@ -68,7 +68,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 an Audio class specific interface descriptor. This follows a regular interface descriptor to * supply extra information about the audio device's layout to the host. See the USB Audio specification for more @@ -81,11 +81,11 @@ uint16_t AudioSpecification; /**< Binary coded decimal value, indicating the supported Audio Class specification version */ uint16_t TotalLength; /**< Total length of the Audio class specific control descriptors, including this descriptor */ - + uint8_t InCollection; /**< Total number of audio class interfaces within this device */ uint8_t InterfaceNumbers[1]; /**< Interface numbers of each audio interface */ } USB_Audio_Interface_AC_t; - + /** Type define for an Audio class specific MIDI streaming interface descriptor. This indicates to the host * how MIDI the specification compliance of the device and the total length of the Audio class specific descriptors. * See the USB Audio specification for more details. @@ -94,12 +94,12 @@ { USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length */ uint8_t Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */ - + uint16_t AudioSpecification; /**< Binary coded decimal value, indicating the supported Audio Class specification version */ uint16_t TotalLength; /**< Total length of the Audio class specific descriptors, including this descriptor */ } USB_Audio_Interface_MIDI_AS_t; - - /** Type define for an Audio class specific endpoint descriptor. This contains a regular endpoint + + /** Type define for an Audio class specific endpoint descriptor. This contains a regular endpoint * descriptor with a few Audio-class specific extensions. See the USB Audio specification for more details. */ typedef struct @@ -120,7 +120,7 @@ uint8_t JackType; /**< Type of jack, one of the JACKTYPE_* mask values */ uint8_t JackID; /**< ID value of this jack - must be a unique value within the device */ - + uint8_t JackStrIndex; /**< Index of a string descriptor describing this descriptor within the device */ } USB_MIDI_In_Jack_t; @@ -134,14 +134,14 @@ uint8_t JackType; /**< Type of jack, one of the JACKTYPE_* mask values */ uint8_t JackID; /**< ID value of this jack - must be a unique value within the device */ - + uint8_t NumberOfPins; /**< Number of output channels within the jack, either physical or logical */ uint8_t SourceJackID[1]; /**< ID of each output pin's source data jack */ uint8_t SourcePinID[1]; /**< Pin number in the input jack of each output pin's source data */ - + uint8_t JackStrIndex; /**< Index of a string descriptor describing this descriptor within the device */ } USB_MIDI_Out_Jack_t; - + /** Type define for an Audio class specific extended MIDI jack endpoint descriptor. This contains extra information * on the usage of MIDI endpoints used to stream MIDI events in and out of the USB Audio device, and follows an Audio * class specific extended MIDI endpoint descriptor. See the USB Audio specification for more details. @@ -175,7 +175,7 @@ USB_Audio_StreamEndpoint_Std_t MIDI_Out_Jack_Endpoint; USB_MIDI_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, @@ -183,3 +183,4 @@ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); #endif + diff --git a/Demos/Device/LowLevel/MIDI/MIDI.c b/Demos/Device/LowLevel/MIDI/MIDI.c index 87ecbd4d0..4696d2336 100644 --- a/Demos/Device/LowLevel/MIDI/MIDI.c +++ b/Demos/Device/LowLevel/MIDI/MIDI.c @@ -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 @@ -42,10 +42,10 @@ int main(void) { SetupHardware(); - + LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); sei(); - + for (;;) { MIDI_Task(); @@ -62,7 +62,7 @@ void SetupHardware(void) /* Disable clock division */ clock_prescale_set(clock_div_1); - + /* Hardware Initialization */ Joystick_Init(); LEDs_Init(); @@ -100,7 +100,7 @@ void EVENT_USB_Device_ConfigurationChanged(void) MIDI_STREAM_EPSIZE, ENDPOINT_BANK_SINGLE); /* Indicate endpoint configuration success or failure */ - LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); + LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); } /** Task to handle the generation of MIDI note change events in response to presses of the board joystick, and send them @@ -120,10 +120,10 @@ void MIDI_Task(void) { uint8_t MIDICommand = 0; uint8_t MIDIPitch; - + 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)); @@ -144,7 +144,7 @@ void MIDI_Task(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); @@ -164,19 +164,19 @@ void MIDI_Task(void) { .CableNumber = 0, .Command = (MIDICommand >> 4), - + .Data1 = MIDICommand | Channel, .Data2 = MIDIPitch, - .Data3 = MIDI_STANDARD_VELOCITY, + .Data3 = MIDI_STANDARD_VELOCITY, }; - + /* Write the MIDI event packet to the endpoint */ Endpoint_Write_Stream_LE(&MIDIEvent, sizeof(MIDIEvent)); - + /* Send the data in the endpoint to the host */ Endpoint_ClearIN(); } - + /* Save previous joystick value for next joystick change detection */ PrevJoystickStatus = JoystickStatus; } @@ -188,10 +188,10 @@ void MIDI_Task(void) if (Endpoint_IsOUTReceived()) { USB_MIDI_EventPacket_t MIDIEvent; - + /* Read the MIDI event packet from the endpoint */ Endpoint_Read_Stream_LE(&MIDIEvent, sizeof(MIDIEvent)); - + /* Check to see if the sent command is a note on message with a non-zero velocity */ if ((MIDIEvent.Command == (MIDI_COMMAND_NOTE_ON >> 4)) && (MIDIEvent.Data3 > 0)) { @@ -203,8 +203,9 @@ void MIDI_Task(void) /* Turn off all LEDs in response to non Note On messages */ LEDs_SetAllLEDs(LEDS_NO_LEDS); } - + /* Clear the endpoint ready for new packet */ Endpoint_ClearOUT(); } } + diff --git a/Demos/Device/LowLevel/MIDI/MIDI.h b/Demos/Device/LowLevel/MIDI/MIDI.h index 75ac8458e..e2f39f3bd 100644 --- a/Demos/Device/LowLevel/MIDI/MIDI.h +++ b/Demos/Device/LowLevel/MIDI/MIDI.h @@ -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_ @@ -44,7 +44,7 @@ #include <stdbool.h> #include "Descriptors.h" - + #include <LUFA/Version.h> #include <LUFA/Drivers/USB/USB.h> #include <LUFA/Drivers/Board/Joystick.h> @@ -60,7 +60,7 @@ /** Standard key press velocity value used for all note events, as no pressure sensor is mounted. */ #define MIDI_STANDARD_VELOCITY 64 - + /** Convenience macro. MIDI channels are numbered from 1-10 (natural numbers) however the logical channel * addresses are zero-indexed. This converts a natural MIDI channel number into the logical channel address. * @@ -86,18 +86,19 @@ { unsigned char Command : 4; /**< MIDI command being sent or received in the event packet */ unsigned char CableNumber : 4; /**< Virtual cable number of the event being sent or received in the given MIDI interface */ - + uint8_t Data1; /**< First byte of data in the MIDI event */ uint8_t Data2; /**< Second byte of data in the MIDI event */ - uint8_t Data3; /**< Third byte of data in the MIDI event */ + uint8_t Data3; /**< Third byte of data in the MIDI event */ } USB_MIDI_EventPacket_t; - + /* Function Prototypes: */ void SetupHardware(void); void MIDI_Task(void); - + void EVENT_USB_Device_Connect(void); void EVENT_USB_Device_Disconnect(void); void EVENT_USB_Device_ConfigurationChanged(void); - + #endif + diff --git a/Demos/Device/LowLevel/MIDI/MIDI.txt b/Demos/Device/LowLevel/MIDI/MIDI.txt index e9522f2ed..0629832b2 100644 --- a/Demos/Device/LowLevel/MIDI/MIDI.txt +++ b/Demos/Device/LowLevel/MIDI/MIDI.txt @@ -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> */ + diff --git a/Demos/Device/LowLevel/MIDI/makefile b/Demos/Device/LowLevel/MIDI/makefile index 4bdf98462..6cc229ddb 100644 --- a/Demos/Device/LowLevel/MIDI/makefile +++ b/Demos/Device/LowLevel/MIDI/makefile @@ -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 + diff --git a/Demos/Device/LowLevel/MassStorage/Descriptors.c b/Demos/Device/LowLevel/MassStorage/Descriptors.c index b6e03a359..d06161049 100644 --- a/Demos/Device/LowLevel/MassStorage/Descriptors.c +++ b/Demos/Device/LowLevel/MassStorage/Descriptors.c @@ -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; } + diff --git a/Demos/Device/LowLevel/MassStorage/Descriptors.h b/Demos/Device/LowLevel/MassStorage/Descriptors.h index b2989f1bc..6f3dbd4b4 100644 --- a/Demos/Device/LowLevel/MassStorage/Descriptors.h +++ b/Demos/Device/LowLevel/MassStorage/Descriptors.h @@ -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_ @@ -43,15 +43,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. @@ -63,7 +63,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, @@ -71,3 +71,4 @@ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); #endif + diff --git a/Demos/Device/LowLevel/MassStorage/Lib/DataflashManager.c b/Demos/Device/LowLevel/MassStorage/Lib/DataflashManager.c index e32618258..09274e1cd 100644 --- a/Demos/Device/LowLevel/MassStorage/Lib/DataflashManager.c +++ b/Demos/Device/LowLevel/MassStorage/Lib/DataflashManager.c @@ -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 @@ -71,11 +71,11 @@ void DataflashManager_WriteBlocks(const uint32_t BlockAddress, /* 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)) { @@ -84,7 +84,7 @@ void DataflashManager_WriteBlocks(const uint32_t BlockAddress, { /* Clear the current endpoint bank */ Endpoint_ClearOUT(); - + /* Wait until the host has sent another packet */ if (Endpoint_WaitUntilReady()) return; @@ -123,7 +123,7 @@ void DataflashManager_WriteBlocks(const uint32_t BlockAddress, /* 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 */ @@ -143,7 +143,7 @@ void DataflashManager_WriteBlocks(const uint32_t BlockAddress, Dataflash_SendByte(Endpoint_Read_Byte()); Dataflash_SendByte(Endpoint_Read_Byte()); Dataflash_SendByte(Endpoint_Read_Byte()); - + /* Increment the Dataflash page 16 byte block counter */ CurrDFPageByteDiv16++; @@ -152,9 +152,9 @@ void DataflashManager_WriteBlocks(const uint32_t BlockAddress, /* Check if the current command is being aborted by the host */ if (IsMassStoreReset) - return; + return; } - + /* Decrement the blocks remaining counter and reset the sub block counter */ TotalBlocks--; } @@ -197,15 +197,15 @@ void DataflashManager_ReadBlocks(const uint32_t BlockAddress, 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)) { @@ -214,12 +214,12 @@ void DataflashManager_ReadBlocks(const uint32_t BlockAddress, { /* 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)) { @@ -229,7 +229,7 @@ void DataflashManager_ReadBlocks(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); @@ -237,7 +237,7 @@ void DataflashManager_ReadBlocks(const uint32_t BlockAddress, Dataflash_SendByte(0x00); Dataflash_SendByte(0x00); Dataflash_SendByte(0x00); - } + } /* Read one 16-byte chunk of data from the Dataflash */ Endpoint_Write_Byte(Dataflash_ReceiveByte()); @@ -256,10 +256,10 @@ void DataflashManager_ReadBlocks(const uint32_t BlockAddress, 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++; @@ -267,11 +267,11 @@ void DataflashManager_ReadBlocks(const uint32_t BlockAddress, if (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,7 +315,7 @@ void DataflashManager_WriteBlocks_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)) { @@ -355,18 +355,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--; } @@ -412,7 +412,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)) { @@ -425,7 +425,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); @@ -433,19 +433,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--; } @@ -460,7 +460,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) { @@ -472,12 +472,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) { @@ -490,7 +490,7 @@ void DataflashManager_ResetDataflashProtections(void) Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[3]); } #endif - + /* Deselect current Dataflash chip */ Dataflash_DeselectChip(); } @@ -524,6 +524,7 @@ bool DataflashManager_CheckDataflashOperation(void) if (ReturnByte != DF_MANUFACTURER_ATMEL) return false; #endif - + return true; } + diff --git a/Demos/Device/LowLevel/MassStorage/Lib/DataflashManager.h b/Demos/Device/LowLevel/MassStorage/Lib/DataflashManager.h index cb613f42c..935f41189 100644 --- a/Demos/Device/LowLevel/MassStorage/Lib/DataflashManager.h +++ b/Demos/Device/LowLevel/MassStorage/Lib/DataflashManager.h @@ -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" @@ -59,20 +59,20 @@ * 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) - + /** Total number of Logical Units (drives) in the device. The total device capacity is shared equally between * each drive - this can be set to any positive non-zero amount. */ #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) - + #define LUN_MEDIA_BLOCKS (VIRTUAL_MEMORY_BLOCKS / TOTAL_LUNS) + /* Function Prototypes: */ void DataflashManager_WriteBlocks(const uint32_t BlockAddress, uint16_t TotalBlocks); @@ -86,5 +86,6 @@ uint8_t* BufferPtr) ATTR_NON_NULL_PTR_ARG(3); void DataflashManager_ResetDataflashProtections(void); bool DataflashManager_CheckDataflashOperation(void); - + #endif + diff --git a/Demos/Device/LowLevel/MassStorage/Lib/SCSI.c b/Demos/Device/LowLevel/MassStorage/Lib/SCSI.c index 76005952f..bf961b7ed 100644 --- a/Demos/Device/LowLevel/MassStorage/Lib/SCSI.c +++ b/Demos/Device/LowLevel/MassStorage/Lib/SCSI.c @@ -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'}, @@ -94,13 +94,13 @@ bool SCSI_DecodeSCSICommand(void) switch (CommandBlock.SCSICommandData[0]) { case SCSI_CMD_INQUIRY: - CommandSuccess = SCSI_Command_Inquiry(); + CommandSuccess = SCSI_Command_Inquiry(); break; case SCSI_CMD_REQUEST_SENSE: CommandSuccess = SCSI_Command_Request_Sense(); break; case SCSI_CMD_READ_CAPACITY_10: - CommandSuccess = SCSI_Command_Read_Capacity_10(); + CommandSuccess = SCSI_Command_Read_Capacity_10(); break; case SCSI_CMD_SEND_DIAGNOSTIC: CommandSuccess = SCSI_Command_Send_Diagnostic(); @@ -125,14 +125,14 @@ bool SCSI_DecodeSCSICommand(void) SCSI_ASENSEQ_NO_QUALIFIER); break; } - + /* Check if command was successfully processed */ if (CommandSuccess) { SCSI_SET_SENSE(SCSI_SENSE_KEY_GOOD, SCSI_ASENSE_NO_ADDITIONAL_INFORMATION, SCSI_ASENSEQ_NO_QUALIFIER); - + return true; } @@ -166,7 +166,7 @@ static bool SCSI_Command_Inquiry(void) Endpoint_Write_Stream_LE(&InquiryData, BytesTransferred, StreamCallback_AbortOnMassStoreReset); uint8_t PadBytes[AllocationLength - BytesTransferred]; - + /* Pad out remaining bytes with 0x00 */ Endpoint_Write_Stream_LE(&PadBytes, sizeof(PadBytes), StreamCallback_AbortOnMassStoreReset); @@ -175,7 +175,7 @@ static bool SCSI_Command_Inquiry(void) /* Succeed the command and update the bytes transferred counter */ CommandBlock.DataTransferLength -= BytesTransferred; - + return true; } @@ -188,12 +188,12 @@ static bool SCSI_Command_Request_Sense(void) { uint8_t AllocationLength = CommandBlock.SCSICommandData[4]; uint8_t BytesTransferred = (AllocationLength < sizeof(SenseData))? AllocationLength : sizeof(SenseData); - + /* Send the SENSE data - this indicates to the host the status of the last command */ Endpoint_Write_Stream_LE(&SenseData, BytesTransferred, StreamCallback_AbortOnMassStoreReset); - + uint8_t PadBytes[AllocationLength - BytesTransferred]; - + /* Pad out remaining bytes with 0x00 */ Endpoint_Write_Stream_LE(&PadBytes, sizeof(PadBytes), StreamCallback_AbortOnMassStoreReset); @@ -228,7 +228,7 @@ static bool SCSI_Command_Read_Capacity_10(void) /* Succeed the command and update the bytes transferred counter */ CommandBlock.DataTransferLength -= 8; - + return true; } @@ -250,21 +250,21 @@ static bool SCSI_Command_Send_Diagnostic(void) 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 */ CommandBlock.DataTransferLength = 0; - + return true; } @@ -296,7 +296,7 @@ static bool SCSI_Command_ReadWrite_10(const bool IsDataRead) /* Adjust the given block address to the real media address based on the selected LUN */ BlockAddress += ((uint32_t)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(BlockAddress, TotalBlocks); @@ -305,6 +305,7 @@ static bool SCSI_Command_ReadWrite_10(const bool IsDataRead) /* Update the bytes transferred counter and succeed the command */ CommandBlock.DataTransferLength -= ((uint32_t)TotalBlocks * VIRTUAL_MEMORY_BLOCK_SIZE); - + return true; } + diff --git a/Demos/Device/LowLevel/MassStorage/Lib/SCSI.h b/Demos/Device/LowLevel/MassStorage/Lib/SCSI.h index 0fc99b618..0c4869df4 100644 --- a/Demos/Device/LowLevel/MassStorage/Lib/SCSI.h +++ b/Demos/Device/LowLevel/MassStorage/Lib/SCSI.h @@ -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_ @@ -48,7 +48,7 @@ #include "Descriptors.h" #include "DataflashManager.h" #include "SCSI_Codes.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 @@ -70,7 +70,7 @@ /** 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 @@ -82,12 +82,12 @@ { unsigned char DeviceType : 5; unsigned char PeripheralQualifier : 3; - + unsigned char Reserved : 7; unsigned char Removable : 1; - + uint8_t Version; - + unsigned char ResponseDataFormat : 4; unsigned char Reserved2 : 1; unsigned char NormACA : 1; @@ -105,27 +105,27 @@ unsigned char WideBus16Bit : 1; unsigned char WideBus32Bit : 1; unsigned char RelAddr : 1; - + uint8_t VendorID[8]; uint8_t ProductID[16]; uint8_t RevisionID[4]; } SCSI_Inquiry_Response_t; - + /** Type define for a SCSI sense structure to a SCSI REQUEST SENSE command. For details of the * structure contents, refer to the SCSI specifications. */ typedef struct { uint8_t ResponseCode; - + uint8_t SegmentNumber; - + unsigned char SenseKey : 4; unsigned char Reserved : 1; unsigned char ILI : 1; unsigned char EOM : 1; unsigned char FileMark : 1; - + uint8_t Information[4]; uint8_t AdditionalLength; uint8_t CmdSpecificInformation[4]; @@ -134,10 +134,10 @@ uint8_t FieldReplaceableUnitCode; uint8_t SenseKeySpecific[3]; } SCSI_Request_Sense_Response_t; - + /* Function Prototypes: */ bool SCSI_DecodeSCSICommand(void); - + #if defined(INCLUDE_FROM_SCSI_C) static bool SCSI_Command_Inquiry(void); static bool SCSI_Command_Request_Sense(void); @@ -145,5 +145,6 @@ static bool SCSI_Command_Send_Diagnostic(void); static bool SCSI_Command_ReadWrite_10(const bool IsDataRead); #endif - + #endif + diff --git a/Demos/Device/LowLevel/MassStorage/Lib/SCSI_Codes.h b/Demos/Device/LowLevel/MassStorage/Lib/SCSI_Codes.h index a69aa56fe..6bcd5780f 100644 --- a/Demos/Device/LowLevel/MassStorage/Lib/SCSI_Codes.h +++ b/Demos/Device/LowLevel/MassStorage/Lib/SCSI_Codes.h @@ -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 @@ * the SCSI standard documentation for more information on each SCSI command and * the SENSE data. */ - + #ifndef _SCSI_CODES_H_ #define _SCSI_CODES_H_ @@ -84,3 +84,4 @@ #define SCSI_ASENSEQ_OPERATION_IN_PROGRESS 0x07 #endif + diff --git a/Demos/Device/LowLevel/MassStorage/MassStorage.c b/Demos/Device/LowLevel/MassStorage/MassStorage.c index 3bf2af16c..a168061f5 100644 --- a/Demos/Device/LowLevel/MassStorage/MassStorage.c +++ b/Demos/Device/LowLevel/MassStorage/MassStorage.c @@ -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 @@ -53,7 +53,7 @@ volatile bool IsMassStoreReset = false; int main(void) { SetupHardware(); - + LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); sei(); @@ -89,7 +89,7 @@ void EVENT_USB_Device_Connect(void) { /* Indicate USB enumerating */ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); - + /* Reset the MSReset flag upon connection */ IsMassStoreReset = false; } @@ -117,7 +117,7 @@ void EVENT_USB_Device_ConfigurationChanged(void) MASS_STORAGE_IO_EPSIZE, ENDPOINT_BANK_SINGLE); /* Indicate endpoint configuration success or failure */ - LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); + LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); } /** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific @@ -147,11 +147,11 @@ void EVENT_USB_Device_UnhandledControlRequest(void) /* Indicate to the host the number of supported LUNs (virtual disks) on the device */ Endpoint_Write_Byte(TOTAL_LUNS - 1); - - Endpoint_ClearIN(); + + Endpoint_ClearIN(); Endpoint_ClearStatusStage(); } - + break; } } @@ -176,14 +176,14 @@ void MassStorage_Task(void) Endpoint_SelectEndpoint(MASS_STORAGE_IN_EPNUM); /* Decode the received SCSI command, set returned status code */ - CommandStatus.Status = SCSI_DecodeSCSICommand() ? Command_Pass : Command_Fail; + CommandStatus.Status = SCSI_DecodeSCSICommand() ? Command_Pass : Command_Fail; /* Load in the CBW tag into the CSW to link them together */ CommandStatus.Tag = CommandBlock.Tag; /* Load in the data residue counter into the CSW */ CommandStatus.DataTransferResidue = CommandBlock.DataTransferLength; - + /* Stall the selected data pipe if command failed (if data is still to be transferred) */ if ((CommandStatus.Status == Command_Fail) && (CommandStatus.DataTransferResidue)) Endpoint_StallTransaction(); @@ -201,7 +201,7 @@ void MassStorage_Task(void) /* Reset the data endpoint banks */ Endpoint_ResetFIFO(MASS_STORAGE_OUT_EPNUM); Endpoint_ResetFIFO(MASS_STORAGE_IN_EPNUM); - + Endpoint_SelectEndpoint(MASS_STORAGE_OUT_EPNUM); Endpoint_ClearStall(); Endpoint_ResetDataToggle(); @@ -223,7 +223,7 @@ static bool ReadInCommandBlock(void) { /* Select the Data Out endpoint */ Endpoint_SelectEndpoint(MASS_STORAGE_OUT_EPNUM); - + /* Abort if no command has been sent from the host */ if (!(Endpoint_IsOUTReceived())) return false; @@ -247,7 +247,7 @@ static bool ReadInCommandBlock(void) Endpoint_StallTransaction(); Endpoint_SelectEndpoint(MASS_STORAGE_IN_EPNUM); Endpoint_StallTransaction(); - + return false; } @@ -255,14 +255,14 @@ static bool ReadInCommandBlock(void) Endpoint_Read_Stream_LE(&CommandBlock.SCSICommandData, CommandBlock.SCSICommandLength, StreamCallback_AbortOnMassStoreReset); - + /* Check if the current command is being aborted by the host */ if (IsMassStoreReset) return false; /* Finalize the stream transfer to send the last packet */ Endpoint_ClearOUT(); - + return true; } @@ -292,11 +292,11 @@ static void ReturnCommandStatus(void) if (IsMassStoreReset) return; } - + /* Write the CSW to the endpoint */ Endpoint_Write_Stream_LE(&CommandStatus, sizeof(CommandStatus), StreamCallback_AbortOnMassStoreReset); - + /* Check if the current command is being aborted by the host */ if (IsMassStoreReset) return; @@ -309,11 +309,12 @@ static void ReturnCommandStatus(void) * if a Mass Storage Reset request has been issued to the control endpoint. */ uint8_t StreamCallback_AbortOnMassStoreReset(void) -{ +{ /* Abort if a Mass Storage reset command was received */ if (IsMassStoreReset) return STREAMCALLBACK_Abort; - + /* Continue with the current stream operation */ return STREAMCALLBACK_Continue; } + diff --git a/Demos/Device/LowLevel/MassStorage/MassStorage.h b/Demos/Device/LowLevel/MassStorage/MassStorage.h index 5a5c5f800..d993a9a5d 100644 --- a/Demos/Device/LowLevel/MassStorage/MassStorage.h +++ b/Demos/Device/LowLevel/MassStorage/MassStorage.h @@ -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,14 +60,14 @@ #define REQ_GetMaxLUN 0xFE /** Maximum length of a SCSI command which can be issued by the device or host in a Mass Storage bulk wrapper. */ - #define MAX_SCSI_COMMAND_LENGTH 16 - + #define MAX_SCSI_COMMAND_LENGTH 16 + /** Magic signature for a Command Block Wrapper used in the Mass Storage Bulk-Only transport protocol. */ #define CBW_SIGNATURE 0x43425355UL /** Magic signature for a Command Status Wrapper used in the Mass Storage Bulk-Only transport protocol. */ #define CSW_SIGNATURE 0x53425355UL - + /** Mask for a Command Block Wrapper's flags attribute to specify a command with data sent from host-to-device. */ #define COMMAND_DIRECTION_DATA_OUT (0 << 7) @@ -88,7 +88,7 @@ /** LED mask for the library LED driver, to indicate that the USB interface is busy. */ #define LEDMASK_USB_BUSY LEDS_LED2 - + /* Type Defines: */ /** Type define for a Command Block Wrapper, used in the Mass Storage Bulk-Only Transport protocol. */ typedef struct @@ -101,7 +101,7 @@ uint8_t SCSICommandLength; /**< Length of the issued SCSI command within the SCSI command data array */ uint8_t SCSICommandData[MAX_SCSI_COMMAND_LENGTH]; /**< Issued SCSI command in the Command Block */ } CommandBlockWrapper_t; - + /** Type define for a Command Status Wrapper, used in the Mass Storage Bulk-Only Transport protocol. */ typedef struct { @@ -110,7 +110,7 @@ uint32_t DataTransferResidue; /**< Number of bytes of data not processed in the SCSI command */ uint8_t Status; /**< Status code of the issued command - a value from the MassStorage_CommandStatusCodes_t enum */ } CommandStatusWrapper_t; - + /* Enums: */ /** Enum for the possible command status wrapper return status codes. */ enum MassStorage_CommandStatusCodes_t @@ -119,16 +119,16 @@ Command_Fail = 1, /**< Command failed to complete - host may check the exact error via a SCSI REQUEST SENSE command */ Phase_Error = 2 /**< Command failed due to being invalid in the current phase */ }; - + /* Global Variables: */ extern CommandBlockWrapper_t CommandBlock; extern CommandStatusWrapper_t CommandStatus; extern volatile bool IsMassStoreReset; - + /* Function Prototypes: */ void SetupHardware(void); void MassStorage_Task(void); - + void EVENT_USB_Device_Connect(void); void EVENT_USB_Device_Disconnect(void); void EVENT_USB_Device_ConfigurationChanged(void); @@ -142,3 +142,4 @@ uint8_t StreamCallback_AbortOnMassStoreReset(void); #endif + diff --git a/Demos/Device/LowLevel/MassStorage/MassStorage.txt b/Demos/Device/LowLevel/MassStorage/MassStorage.txt index fe4089cb4..d72ad7656 100644 --- a/Demos/Device/LowLevel/MassStorage/MassStorage.txt +++ b/Demos/Device/LowLevel/MassStorage/MassStorage.txt @@ -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> */ + diff --git a/Demos/Device/LowLevel/MassStorage/makefile b/Demos/Device/LowLevel/MassStorage/makefile index 457e8b30b..d1c0d8198 100644 --- a/Demos/Device/LowLevel/MassStorage/makefile +++ b/Demos/Device/LowLevel/MassStorage/makefile @@ -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 + diff --git a/Demos/Device/LowLevel/Mouse/Descriptors.c b/Demos/Device/LowLevel/Mouse/Descriptors.c index 1d3708f60..d6caf51cd 100644 --- a/Demos/Device/LowLevel/Mouse/Descriptors.c +++ b/Demos/Device/LowLevel/Mouse/Descriptors.c @@ -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,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 = 0x01, .Protocol = 0x02, - + .InterfaceStrIndex = NO_DESCRIPTOR }, - .HID_MouseHID = + .HID_MouseHID = { .Header = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID}, - + .HIDSpec = VERSION_BCD(01.11), .CountryCode = 0x00, .TotalReportDescriptors = 1, @@ -149,15 +149,15 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor = .HIDReportLength = sizeof(MouseReport) }, - .HID_ReportINEndpoint = + .HID_ReportINEndpoint = { .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, - + .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | MOUSE_EPNUM), .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .EndpointSize = MOUSE_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(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 DTYPE_HID: + case DTYPE_HID: Address = &ConfigurationDescriptor.HID_MouseHID; Size = sizeof(USB_Descriptor_HID_t); break; - case DTYPE_Report: + case DTYPE_Report: Address = &MouseReport; Size = sizeof(MouseReport); break; } - - *DescriptorAddress = Address; + + *DescriptorAddress = Address; return Size; } diff --git a/Demos/Device/LowLevel/Mouse/Descriptors.h b/Demos/Device/LowLevel/Mouse/Descriptors.h index a4dc5d5d6..2d9a329d0 100644 --- a/Demos/Device/LowLevel/Mouse/Descriptors.h +++ b/Demos/Device/LowLevel/Mouse/Descriptors.h @@ -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_ @@ -48,10 +48,10 @@ typedef struct { USB_Descriptor_Header_t Header; - + uint16_t HIDSpec; uint8_t CountryCode; - + uint8_t TotalReportDescriptors; uint8_t HIDReportType; @@ -72,17 +72,17 @@ USB_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 /** Descriptor header type value, to indicate a HID class HID descriptor. */ #define DTYPE_HID 0x21 - + /** Descriptor header type value, to indicate a HID class HID report descriptor. */ #define DTYPE_Report 0x22 @@ -93,3 +93,4 @@ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); #endif + diff --git a/Demos/Device/LowLevel/Mouse/Mouse.c b/Demos/Device/LowLevel/Mouse/Mouse.c index 6aa258a00..23df2a610 100644 --- a/Demos/Device/LowLevel/Mouse/Mouse.c +++ b/Demos/Device/LowLevel/Mouse/Mouse.c @@ -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 @@ * Main source file for the Mouse demo. This file contains the main tasks of the demo and * is responsible for the initial application hardware configuration. */ - + #include "Mouse.h" /** Indicates what report mode the host has requested, true for normal HID reporting mode, false for special boot @@ -47,7 +47,7 @@ bool UsingReportProtocol = true; uint16_t IdleCount = HID_IDLE_CHANGESONLY; /** Current Idle period remaining. When the IdleCount value is set, this tracks the remaining number of idle - * milliseconds. This is separate to the IdleCount timer and is incremented and compared as the host may request + * milliseconds. This is separate to the IdleCount timer and is incremented and compared as the host may request * the current idle period via a Get Idle HID class request, thus its value must be preserved. */ uint16_t IdleMSRemaining = 0; @@ -59,7 +59,7 @@ uint16_t IdleMSRemaining = 0; int main(void) { SetupHardware(); - + LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); sei(); @@ -110,7 +110,7 @@ void EVENT_USB_Device_Disconnect(void) /** Event handler for the USB_ConfigurationChanged event. This is fired when the host sets the current configuration * of the USB device after enumeration - the device endpoints are configured and the mouse reporting task started. - */ + */ void EVENT_USB_Device_ConfigurationChanged(void) { bool ConfigSuccess = true; @@ -123,7 +123,7 @@ void EVENT_USB_Device_ConfigurationChanged(void) USB_Device_EnableSOFEvents(); /* Indicate endpoint configuration success or failure */ - LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); + LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); } /** Event handler for the USB_UnhandledControlRequest event. This is used to catch standard and class specific @@ -152,20 +152,20 @@ void EVENT_USB_Device_UnhandledControlRequest(void) /* Clear the report data afterwards */ memset(&MouseReportData, 0, sizeof(MouseReportData)); } - + break; case REQ_GetProtocol: if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) { Endpoint_ClearSETUP(); - + /* Write the current protocol flag to the host */ Endpoint_Write_Byte(UsingReportProtocol); - + Endpoint_ClearIN(); Endpoint_ClearStatusStage(); } - + break; case REQ_SetProtocol: if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) @@ -176,7 +176,7 @@ void EVENT_USB_Device_UnhandledControlRequest(void) /* Set or clear the flag depending on what the host indicates that the current Protocol should be */ UsingReportProtocol = (USB_ControlRequest.wValue != 0); } - + break; case REQ_SetIdle: if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) @@ -187,13 +187,13 @@ void EVENT_USB_Device_UnhandledControlRequest(void) /* Get idle period in MSB, must multiply by 4 to get the duration in milliseconds */ IdleCount = ((USB_ControlRequest.wValue & 0xFF00) >> 6); } - + break; case REQ_GetIdle: if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) - { + { Endpoint_ClearSETUP(); - + /* Write the current idle duration to the host, must be divided by 4 before sent to host */ Endpoint_Write_Byte(IdleCount >> 2); @@ -221,7 +221,7 @@ void CreateMouseReport(USB_MouseReport_Data_t* const ReportData) { uint8_t JoyStatus_LCL = Joystick_GetStatus(); uint8_t ButtonStatus_LCL = Buttons_GetStatus(); - + /* Clear the report contents */ memset(ReportData, 0, sizeof(USB_MouseReport_Data_t)); @@ -237,7 +237,7 @@ void CreateMouseReport(USB_MouseReport_Data_t* const ReportData) if (JoyStatus_LCL & JOY_PRESS) ReportData->Button = (1 << 0); - + if (ButtonStatus_LCL & BUTTONS_BUTTON1) ReportData->Button |= (1 << 1); } @@ -248,40 +248,40 @@ void SendNextReport(void) static USB_MouseReport_Data_t PrevMouseReportData; USB_MouseReport_Data_t MouseReportData; bool SendReport; - + /* Create the next mouse report for transmission to the host */ CreateMouseReport(&MouseReportData); - + /* Check to see if the report data has changed - if so a report MUST be sent */ SendReport = (memcmp(&PrevMouseReportData, &MouseReportData, sizeof(USB_MouseReport_Data_t)) != 0); - + /* Override the check if the Y or X values are non-zero - we want continuous movement while the joystick * is being held down (via continuous reports), otherwise the cursor will only move once per joystick toggle */ if ((MouseReportData.Y != 0) || (MouseReportData.X != 0)) SendReport = true; - + /* Check if the idle period is set and has elapsed */ if ((IdleCount != HID_IDLE_CHANGESONLY) && (!(IdleMSRemaining))) { /* Reset the idle time remaining counter */ IdleMSRemaining = IdleCount; - + /* Idle period is set and has elapsed, must send a report to the host */ SendReport = true; } - + /* Select the Mouse Report Endpoint */ Endpoint_SelectEndpoint(MOUSE_EPNUM); /* Check if Mouse Endpoint Ready for Read/Write and if we should send a new report */ if (Endpoint_IsReadWriteAllowed() && SendReport) - { + { /* Save the current report data for later comparison to check for changes */ PrevMouseReportData = MouseReportData; /* Write Mouse Report Data */ Endpoint_Write_Stream_LE(&MouseReportData, sizeof(MouseReportData)); - + /* Finalize the stream transfer to send the last packet */ Endpoint_ClearIN(); } @@ -293,7 +293,8 @@ void Mouse_Task(void) /* Device must be connected and configured for the task to run */ if (USB_DeviceState != DEVICE_STATE_Configured) return; - + /* Send the next mouse report to the host */ SendNextReport(); } + diff --git a/Demos/Device/LowLevel/Mouse/Mouse.h b/Demos/Device/LowLevel/Mouse/Mouse.h index 56766a6df..f551f5d6e 100644 --- a/Demos/Device/LowLevel/Mouse/Mouse.h +++ b/Demos/Device/LowLevel/Mouse/Mouse.h @@ -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 @@ -43,7 +43,7 @@ #include <avr/interrupt.h> #include <stdbool.h> #include <string.h> - + #include "Descriptors.h" #include <LUFA/Version.h> @@ -55,7 +55,7 @@ /* Macros: */ /** Idle period indicating that reports should be sent only when the inputs have changed */ #define HID_IDLE_CHANGESONLY 0 - + /** HID Class specific request to get the next HID report from the device. */ #define REQ_GetReport 0x01 @@ -85,7 +85,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) - + /* Type Defines: */ /** Type define for the mouse HID report structure, for creating and sending HID reports to the host PC. * This mirrors the layout described to the host in the HID report descriptor, in Descriptors.c. @@ -96,7 +96,7 @@ int8_t X; /**< Current mouse delta X movement, as a signed 8-bit integer */ int8_t Y; /**< Current mouse delta Y movement, as a signed 8-bit integer */ } USB_MouseReport_Data_t; - + /* Function Prototypes: */ void SetupHardware(void); void Mouse_Task(void); @@ -110,3 +110,4 @@ void CreateMouseReport(USB_MouseReport_Data_t* const ReportData); #endif + diff --git a/Demos/Device/LowLevel/Mouse/Mouse.txt b/Demos/Device/LowLevel/Mouse/Mouse.txt index 5fcdb4d04..f26df7468 100644 --- a/Demos/Device/LowLevel/Mouse/Mouse.txt +++ b/Demos/Device/LowLevel/Mouse/Mouse.txt @@ -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>N/A</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> */ + diff --git a/Demos/Device/LowLevel/Mouse/makefile b/Demos/Device/LowLevel/Mouse/makefile index 7e8d65ab5..4c5b510ea 100644 --- a/Demos/Device/LowLevel/Mouse/makefile +++ b/Demos/Device/LowLevel/Mouse/makefile @@ -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 + diff --git a/Demos/Device/LowLevel/RNDISEthernet/Descriptors.c b/Demos/Device/LowLevel/RNDISEthernet/Descriptors.c index 362406887..97da47e69 100644 --- a/Demos/Device/LowLevel/RNDISEthernet/Descriptors.c +++ b/Demos/Device/LowLevel/RNDISEthernet/Descriptors.c @@ -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_Descriptor_CDC_FunctionalHeader_t), .Type = DTYPE_CSInterface}, .Subtype = 0x00, - + .CDCSpecification = VERSION_BCD(01.10), }, - .CDC_Functional_ACM = + .CDC_Functional_ACM = { .Header = {.Size = sizeof(USB_Descriptor_CDC_FunctionalACM_t), .Type = DTYPE_CSInterface}, .Subtype = 0x02, - + .Capabilities = 0x00, }, - - .CDC_Functional_Union = + + .CDC_Functional_Union = { .Header = {.Size = sizeof(USB_Descriptor_CDC_FunctionalUnion_t), .Type = DTYPE_CSInterface}, .Subtype = 0x06, - + .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; } + diff --git a/Demos/Device/LowLevel/RNDISEthernet/Descriptors.h b/Demos/Device/LowLevel/RNDISEthernet/Descriptors.h index 5985d3473..34d64e007 100644 --- a/Demos/Device/LowLevel/RNDISEthernet/Descriptors.h +++ b/Demos/Device/LowLevel/RNDISEthernet/Descriptors.h @@ -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 @@ -43,10 +43,10 @@ /* Macros: */ /** 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 /** Endpoint number of the CDC device-to-host notification IN endpoint. */ #define CDC_NOTIFICATION_EPNUM 3 @@ -80,7 +80,7 @@ uint8_t Subtype; /**< Sub type value used to distinguish between CDC class-specific descriptors. */ uint8_t Capabilities; /**< Capabilities of the ACM interface, given as a bit mask. */ } USB_Descriptor_CDC_FunctionalACM_t; - + /** Type define for a CDC class-specific functional Union descriptor. This indicates to the host that specific * CDC control and data interfaces are related. See the CDC class specification for more details. */ @@ -116,3 +116,4 @@ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); #endif + diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/ARP.c b/Demos/Device/LowLevel/RNDISEthernet/Lib/ARP.c index 853d50542..ca66256e7 100644 --- a/Demos/Device/LowLevel/RNDISEthernet/Lib/ARP.c +++ b/Demos/Device/LowLevel/RNDISEthernet/Lib/ARP.c @@ -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; } + diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/ARP.h b/Demos/Device/LowLevel/RNDISEthernet/Lib/ARP.h index 8de76f3b6..d97761539 100644 --- a/Demos/Device/LowLevel/RNDISEthernet/Lib/ARP.h +++ b/Demos/Device/LowLevel/RNDISEthernet/Lib/ARP.h @@ -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 + diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/DHCP.c b/Demos/Device/LowLevel/RNDISEthernet/Lib/DHCP.c index 41265aa27..118f5e0b5 100644 --- a/Demos/Device/LowLevel/RNDISEthernet/Lib/DHCP.c +++ b/Demos/Device/LowLevel/RNDISEthernet/Lib/DHCP.c @@ -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; } + diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/DHCP.h b/Demos/Device/LowLevel/RNDISEthernet/Lib/DHCP.h index 3bfdb29be..a4dc00dbb 100644 --- a/Demos/Device/LowLevel/RNDISEthernet/Lib/DHCP.h +++ b/Demos/Device/LowLevel/RNDISEthernet/Lib/DHCP.h @@ -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 + diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/Ethernet.c b/Demos/Device/LowLevel/RNDISEthernet/Lib/Ethernet.c index 0b9563347..0b74d9cbc 100644 --- a/Demos/Device/LowLevel/RNDISEthernet/Lib/Ethernet.c +++ b/Demos/Device/LowLevel/RNDISEthernet/Lib/Ethernet.c @@ -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" /** Ethernet Frame buffer structure, to hold the incoming Ethernet frame from the host. */ @@ -69,9 +69,9 @@ void Ethernet_ProcessPacket(void) /* 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)) && @@ -83,13 +83,13 @@ void Ethernet_ProcessPacket(void) 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.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) { @@ -97,7 +97,7 @@ void Ethernet_ProcessPacket(void) 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; @@ -128,9 +128,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; } + diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/Ethernet.h b/Demos/Device/LowLevel/RNDISEthernet/Lib/Ethernet.h index 49c6b1c25..68fffb48f 100644 --- a/Demos/Device/LowLevel/RNDISEthernet/Lib/Ethernet.h +++ b/Demos/Device/LowLevel/RNDISEthernet/Lib/Ethernet.h @@ -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 Ethernet.c. */ - + #ifndef _ETHERNET_H_ #define _ETHERNET_H_ @@ -48,19 +48,19 @@ #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 * @@ -70,12 +70,12 @@ /** Maximum size of an incoming or outgoing Ethernet frame in bytes. */ #define ETHERNET_FRAME_SIZE_MAX 1500 - + /** 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 @@ -96,7 +96,7 @@ 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 Ethernet_Frame_Info_t FrameIN; extern Ethernet_Frame_Info_t FrameOUT; @@ -106,10 +106,11 @@ extern const MAC_Address_t BroadcastMACAddress; extern const IP_Address_t BroadcastIPAddress; extern const IP_Address_t ClientIPAddress; - + /* Function Prototypes: */ void Ethernet_ProcessPacket(void); uint16_t Ethernet_Checksum16(void* Data, uint16_t Bytes); - + #endif + diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/EthernetProtocols.h b/Demos/Device/LowLevel/RNDISEthernet/Lib/EthernetProtocols.h index 014a441cf..8f529d6b4 100644 --- a/Demos/Device/LowLevel/RNDISEthernet/Lib/EthernetProtocols.h +++ b/Demos/Device/LowLevel/RNDISEthernet/Lib/EthernetProtocols.h @@ -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 @@ -77,7 +77,7 @@ { uint8_t Octets[6]; /**< Individual bytes of a MAC address */ } MAC_Address_t; - + /** Type define for a protocol IP address of a device on a network. */ typedef struct { @@ -85,3 +85,4 @@ } IP_Address_t; #endif + diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/ICMP.c b/Demos/Device/LowLevel/RNDISEthernet/Lib/ICMP.c index 7e4be9c3d..3bf01cd4b 100644 --- a/Demos/Device/LowLevel/RNDISEthernet/Lib/ICMP.c +++ b/Demos/Device/LowLevel/RNDISEthernet/Lib/ICMP.c @@ -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 @@ -62,9 +62,9 @@ int16_t ICMP_ProcessICMPPacket(void* InDataStart, 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)], @@ -75,6 +75,7 @@ int16_t ICMP_ProcessICMPPacket(void* InDataStart, /* Return the size of the response so far */ return (DataSize + sizeof(ICMP_Header_t)); } - + return NO_RESPONSE; } + diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/ICMP.h b/Demos/Device/LowLevel/RNDISEthernet/Lib/ICMP.h index dcea1ada4..a0fb6eeee 100644 --- a/Demos/Device/LowLevel/RNDISEthernet/Lib/ICMP.h +++ b/Demos/Device/LowLevel/RNDISEthernet/Lib/ICMP.h @@ -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,9 +73,10 @@ 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(void* InDataStart, void* OutDataStart); #endif + diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/IP.c b/Demos/Device/LowLevel/RNDISEthernet/Lib/IP.c index 85ccf426e..731043f8f 100644 --- a/Demos/Device/LowLevel/RNDISEthernet/Lib/IP.c +++ b/Demos/Device/LowLevel/RNDISEthernet/Lib/IP.c @@ -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 @@ -65,7 +65,7 @@ int16_t IP_ProcessIPPacket(void* InDataStart, { return NO_RESPONSE; } - + /* Pass off the IP payload to the appropriate protocol processing routine */ switch (IPHeaderIN->Protocol) { @@ -76,15 +76,15 @@ int16_t IP_ProcessIPPacket(void* InDataStart, 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) { @@ -101,12 +101,13 @@ int16_t IP_ProcessIPPacket(void* InDataStart, 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; } + diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/IP.h b/Demos/Device/LowLevel/RNDISEthernet/Lib/IP.h index 8f45113be..c1b2817ca 100644 --- a/Demos/Device/LowLevel/RNDISEthernet/Lib/IP.h +++ b/Demos/Device/LowLevel/RNDISEthernet/Lib/IP.h @@ -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,13 +84,14 @@ 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(void* InDataStart, void* OutDataStart); #endif + diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/ProtocolDecoders.c b/Demos/Device/LowLevel/RNDISEthernet/Lib/ProtocolDecoders.c index 84e03e0ae..38df7eb64 100644 --- a/Demos/Device/LowLevel/RNDISEthernet/Lib/ProtocolDecoders.c +++ b/Demos/Device/LowLevel/RNDISEthernet/Lib/ProtocolDecoders.c @@ -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(void* InDataStart) { #if !defined(NO_DECODE_ETHERNET) Ethernet_Frame_Header_t* FrameHeader = (Ethernet_Frame_Header_t*)InDataStart; - + printf_P(PSTR("\r\n")); - + printf_P(PSTR(" ETHERNET\r\n")); printf_P(PSTR(" + Frame Size: %u\r\n"), FrameIN.FrameLength); @@ -98,7 +98,7 @@ void DecodeEthernetFrameHeader(void* InDataStart) 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,8 +272,9 @@ void DecodeDHCPHeader(void* InDataStart) break; } } - + DHCPOptions += ((DHCPOptions[0] == DHCP_OPTION_PAD) ? 1 : (DHCPOptions[1] + 2)); } #endif } + diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/ProtocolDecoders.h b/Demos/Device/LowLevel/RNDISEthernet/Lib/ProtocolDecoders.h index 4723bf472..8c124b427 100644 --- a/Demos/Device/LowLevel/RNDISEthernet/Lib/ProtocolDecoders.h +++ b/Demos/Device/LowLevel/RNDISEthernet/Lib/ProtocolDecoders.h @@ -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,12 +40,12 @@ #include <avr/io.h> #include <avr/pgmspace.h> #include <stdio.h> - + #include <LUFA/Drivers/Peripheral/SerialStream.h> - + #include "EthernetProtocols.h" #include "Ethernet.h" - + /* Function Prototypes: */ void DecodeEthernetFrameHeader(void* InDataStart); void DecodeARPHeader(void* InDataStart); @@ -56,3 +56,4 @@ void DecodeDHCPHeader(void* InDataStart); #endif + diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/RNDIS.c b/Demos/Device/LowLevel/RNDISEthernet/Lib/RNDIS.c index 3875f8801..520557003 100644 --- a/Demos/Device/LowLevel/RNDISEthernet/Lib/RNDIS.c +++ b/Demos/Device/LowLevel/RNDISEthernet/Lib/RNDIS.c @@ -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 @@ * RNDIS command handler functions. This handles RNDIS commands according to * the Microsoft RNDIS specification, creating a USB Ethernet network adapter. */ - + #define INCLUDE_FROM_RNDIS_C #include "RNDIS.h" @@ -93,7 +93,7 @@ bool ResponseReady = false; uint8_t CurrRNDISState = RNDIS_Uninitialized; /** Current Ethernet packet filter mask. This is non-zero when the adapter is initialized, or zero when disabled. */ -uint32_t CurrPacketFilter = 0; +uint32_t CurrPacketFilter = 0; /** Processes the RNDIS message received by the host and stored in the RNDISMessageBuffer global buffer. If a response is @@ -110,17 +110,17 @@ void ProcessRNDISControlMessage(void) /* Initialize the adapter - return information about the supported RNDIS version and buffer sizes */ ResponseReady = true; - + RNDIS_Initialize_Message_t* INITIALIZE_Message = (RNDIS_Initialize_Message_t*)&RNDISMessageBuffer; RNDIS_Initialize_Complete_t* INITIALIZE_Response = (RNDIS_Initialize_Complete_t*)&RNDISMessageBuffer; - + INITIALIZE_Response->MessageType = REMOTE_NDIS_INITIALIZE_CMPLT; INITIALIZE_Response->MessageLength = sizeof(RNDIS_Initialize_Complete_t); INITIALIZE_Response->RequestId = INITIALIZE_Message->RequestId; INITIALIZE_Response->Status = REMOTE_NDIS_STATUS_SUCCESS; - + INITIALIZE_Response->MajorVersion = REMOTE_NDIS_VERSION_MAJOR; - INITIALIZE_Response->MinorVersion = REMOTE_NDIS_VERSION_MINOR; + INITIALIZE_Response->MinorVersion = REMOTE_NDIS_VERSION_MINOR; INITIALIZE_Response->DeviceFlags = REMOTE_NDIS_DF_CONNECTIONLESS; INITIALIZE_Response->Medium = REMOTE_NDIS_MEDIUM_802_3; INITIALIZE_Response->MaxPacketsPerTransfer = 1; @@ -128,9 +128,9 @@ void ProcessRNDISControlMessage(void) INITIALIZE_Response->PacketAlignmentFactor = 0; INITIALIZE_Response->AFListOffset = 0; INITIALIZE_Response->AFListSize = 0; - + CurrRNDISState = RNDIS_Initialized; - + break; case REMOTE_NDIS_HALT_MSG: /* Halt the adapter, reset the adapter state - note that no response should be returned when completed */ @@ -145,42 +145,42 @@ void ProcessRNDISControlMessage(void) /* Request for information about a parameter about the adapter, specified as an OID token */ ResponseReady = true; - + RNDIS_Query_Message_t* QUERY_Message = (RNDIS_Query_Message_t*)&RNDISMessageBuffer; RNDIS_Query_Complete_t* QUERY_Response = (RNDIS_Query_Complete_t*)&RNDISMessageBuffer; uint32_t Query_Oid = QUERY_Message->Oid; - + void* QueryData = &RNDISMessageBuffer[sizeof(RNDIS_Message_Header_t) + QUERY_Message->InformationBufferOffset]; - void* ResponseData = &RNDISMessageBuffer[sizeof(RNDIS_Query_Complete_t)]; + void* ResponseData = &RNDISMessageBuffer[sizeof(RNDIS_Query_Complete_t)]; uint16_t ResponseSize; QUERY_Response->MessageType = REMOTE_NDIS_QUERY_CMPLT; QUERY_Response->MessageLength = sizeof(RNDIS_Query_Complete_t); - + if (ProcessNDISQuery(Query_Oid, QueryData, QUERY_Message->InformationBufferLength, ResponseData, &ResponseSize)) { QUERY_Response->Status = REMOTE_NDIS_STATUS_SUCCESS; QUERY_Response->MessageLength += ResponseSize; - + QUERY_Response->InformationBufferLength = ResponseSize; QUERY_Response->InformationBufferOffset = (sizeof(RNDIS_Query_Complete_t) - sizeof(RNDIS_Message_Header_t)); } else - { + { QUERY_Response->Status = REMOTE_NDIS_STATUS_NOT_SUPPORTED; QUERY_Response->InformationBufferLength = 0; QUERY_Response->InformationBufferOffset = 0; } - + break; case REMOTE_NDIS_SET_MSG: /* Request to set a parameter of the adapter, specified as an OID token */ - + ResponseReady = true; - + RNDIS_Set_Message_t* SET_Message = (RNDIS_Set_Message_t*)&RNDISMessageBuffer; RNDIS_Set_Complete_t* SET_Response = (RNDIS_Set_Complete_t*)&RNDISMessageBuffer; uint32_t SET_Oid = SET_Message->Oid; @@ -191,7 +191,7 @@ void ProcessRNDISControlMessage(void) void* SetData = &RNDISMessageBuffer[sizeof(RNDIS_Message_Header_t) + SET_Message->InformationBufferOffset]; - + if (ProcessNDISSet(SET_Oid, SetData, SET_Message->InformationBufferLength)) SET_Response->Status = REMOTE_NDIS_STATUS_SUCCESS; else @@ -200,9 +200,9 @@ void ProcessRNDISControlMessage(void) break; case REMOTE_NDIS_RESET_MSG: /* Soft reset the adapter */ - + ResponseReady = true; - + RNDIS_Reset_Complete_t* RESET_Response = (RNDIS_Reset_Complete_t*)&RNDISMessageBuffer; RESET_Response->MessageType = REMOTE_NDIS_RESET_CMPLT; @@ -213,9 +213,9 @@ void ProcessRNDISControlMessage(void) break; case REMOTE_NDIS_KEEPALIVE_MSG: /* Keep alive message sent to the adapter every 5 seconds when idle to ensure it is still responding */ - + ResponseReady = true; - + RNDIS_KeepAlive_Message_t* KEEPALIVE_Message = (RNDIS_KeepAlive_Message_t*)&RNDISMessageBuffer; RNDIS_KeepAlive_Complete_t* KEEPALIVE_Response = (RNDIS_KeepAlive_Complete_t*)&RNDISMessageBuffer; @@ -223,7 +223,7 @@ void ProcessRNDISControlMessage(void) KEEPALIVE_Response->MessageLength = sizeof(RNDIS_KeepAlive_Complete_t); KEEPALIVE_Response->RequestId = KEEPALIVE_Message->RequestId; KEEPALIVE_Response->Status = REMOTE_NDIS_STATUS_SUCCESS; - + break; } } @@ -248,66 +248,66 @@ static bool ProcessNDISQuery(const uint32_t OId, void* QueryData, uint16_t Query { case OID_GEN_SUPPORTED_LIST: *ResponseSize = sizeof(AdapterSupportedOIDList); - + /* Copy the list of supported NDIS OID tokens to the response buffer */ memcpy_P(ResponseData, AdapterSupportedOIDList, sizeof(AdapterSupportedOIDList)); - + return true; case OID_GEN_PHYSICAL_MEDIUM: *ResponseSize = sizeof(uint32_t); - + /* Indicate that the device is a true ethernet link */ *((uint32_t*)ResponseData) = 0; - + return true; case OID_GEN_HARDWARE_STATUS: *ResponseSize = sizeof(uint32_t); - + /* Always indicate hardware ready */ *((uint32_t*)ResponseData) = NdisHardwareStatusReady; - + return true; case OID_GEN_MEDIA_SUPPORTED: case OID_GEN_MEDIA_IN_USE: *ResponseSize = sizeof(uint32_t); - + /* Indicate 802.3 (Ethernet) supported by the adapter */ *((uint32_t*)ResponseData) = REMOTE_NDIS_MEDIUM_802_3; - + return true; case OID_GEN_VENDOR_ID: *ResponseSize = sizeof(uint32_t); - + /* Vendor ID 0x0xFFFFFF is reserved for vendors who have not purchased a NDIS VID */ *((uint32_t*)ResponseData) = 0x00FFFFFF; - + return true; case OID_GEN_MAXIMUM_FRAME_SIZE: case OID_GEN_TRANSMIT_BLOCK_SIZE: case OID_GEN_RECEIVE_BLOCK_SIZE: *ResponseSize = sizeof(uint32_t); - + /* Indicate that the maximum frame size is the size of the ethernet frame buffer */ *((uint32_t*)ResponseData) = ETHERNET_FRAME_SIZE_MAX; - + return true; case OID_GEN_VENDOR_DESCRIPTION: *ResponseSize = sizeof(AdapterVendorDescription); - + /* Copy vendor description string to the response buffer */ memcpy_P(ResponseData, AdapterVendorDescription, sizeof(AdapterVendorDescription)); - + return true; case OID_GEN_MEDIA_CONNECT_STATUS: *ResponseSize = sizeof(uint32_t); - + /* Always indicate that the adapter is connected to a network */ *((uint32_t*)ResponseData) = REMOTE_NDIS_MEDIA_STATE_CONNECTED; - + return true; case OID_GEN_LINK_SPEED: *ResponseSize = sizeof(uint32_t); - + /* Indicate 10Mb/s link speed */ *((uint32_t*)ResponseData) = 100000; @@ -315,25 +315,25 @@ static bool ProcessNDISQuery(const uint32_t OId, void* QueryData, uint16_t Query case OID_802_3_PERMANENT_ADDRESS: case OID_802_3_CURRENT_ADDRESS: *ResponseSize = sizeof(MAC_Address_t); - + /* Copy over the fixed adapter MAC to the response buffer */ memcpy_P(ResponseData, &AdapterMACAddress, sizeof(MAC_Address_t)); return true; case OID_802_3_MAXIMUM_LIST_SIZE: *ResponseSize = sizeof(uint32_t); - + /* Indicate only one multicast address supported */ *((uint32_t*)ResponseData) = 1; - + return true; case OID_GEN_CURRENT_PACKET_FILTER: *ResponseSize = sizeof(uint32_t); - + /* Indicate the current packet filter mask */ *((uint32_t*)ResponseData) = CurrPacketFilter; - - return true; + + return true; case OID_GEN_XMIT_OK: case OID_GEN_RCV_OK: case OID_GEN_XMIT_ERROR: @@ -343,24 +343,24 @@ static bool ProcessNDISQuery(const uint32_t OId, void* QueryData, uint16_t Query case OID_802_3_XMIT_ONE_COLLISION: case OID_802_3_XMIT_MORE_COLLISIONS: *ResponseSize = sizeof(uint32_t); - + /* Unused statistic OIDs - always return 0 for each */ *((uint32_t*)ResponseData) = 0; - + return true; case OID_GEN_MAXIMUM_TOTAL_SIZE: *ResponseSize = sizeof(uint32_t); - + /* Indicate maximum overall buffer (Ethernet frame and RNDIS header) the adapter can handle */ *((uint32_t*)ResponseData) = (sizeof(RNDISMessageBuffer) + ETHERNET_FRAME_SIZE_MAX); - + return true; default: return false; } } -/** Processes RNDIS set commands, setting adapter parameters to values given by the host. The requested parameter is given +/** Processes RNDIS set commands, setting adapter parameters to values given by the host. The requested parameter is given * as an OID value. * * \param[in] OId OId value of the parameter being set @@ -378,16 +378,17 @@ static bool ProcessNDISSet(uint32_t OId, void* SetData, uint16_t SetSize) case OID_GEN_CURRENT_PACKET_FILTER: /* Save the packet filter mask in case the host queries it again later */ CurrPacketFilter = *((uint32_t*)SetData); - + /* Set the RNDIS state to initialized if the packet filter is non-zero */ CurrRNDISState = ((CurrPacketFilter) ? RNDIS_Data_Initialized : RNDIS_Data_Initialized); - + return true; case OID_802_3_MULTICAST_LIST: /* Do nothing - throw away the value from the host as it is unused */ - + return true; default: return false; } } + diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/RNDIS.h b/Demos/Device/LowLevel/RNDISEthernet/Lib/RNDIS.h index 17a34ace7..ed35b3546 100644 --- a/Demos/Device/LowLevel/RNDISEthernet/Lib/RNDIS.h +++ b/Demos/Device/LowLevel/RNDISEthernet/Lib/RNDIS.h @@ -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 <avr/io.h> #include <stdbool.h> - + #include "RNDISEthernet.h" #include "RNDISConstants.h" #include "Ethernet.h" @@ -50,13 +50,13 @@ /** Implemented RNDIS Version Minor. */ #define REMOTE_NDIS_VERSION_MINOR 0x00 - + /** RNDIS request to issue a host-to-device NDIS command. */ #define REQ_SendEncapsulatedCommand 0x00 /** RNDIS request to issue a device-to-host NDIS response. */ #define REQ_GetEncapsulatedResponse 0x01 - + /* Enums: */ /** Enum for the possible NDIS adapter states. */ enum RNDIS_States_t @@ -99,19 +99,19 @@ uint32_t VcHandle; uint32_t Reserved; } RNDIS_Packet_Message_t; - + /** Type define for a RNDIS Initialize command message. */ typedef struct { uint32_t MessageType; uint32_t MessageLength; uint32_t RequestId; - + uint32_t MajorVersion; uint32_t MinorVersion; uint32_t MaxTransferSize; } RNDIS_Initialize_Message_t; - + /** Type define for a RNDIS Initialize complete response message. */ typedef struct { @@ -119,7 +119,7 @@ uint32_t MessageLength; uint32_t RequestId; uint32_t Status; - + uint32_t MajorVersion; uint32_t MinorVersion; uint32_t DeviceFlags; @@ -130,7 +130,7 @@ uint32_t AFListOffset; uint32_t AFListSize; } RNDIS_Initialize_Complete_t; - + /** Type define for a RNDIS Keep-alive command message. */ typedef struct { @@ -157,14 +157,14 @@ uint32_t AddressingReset; } RNDIS_Reset_Complete_t; - + /** Type define for a RNDIS Set command message. */ typedef struct { uint32_t MessageType; uint32_t MessageLength; uint32_t RequestId; - + uint32_t Oid; uint32_t InformationBufferLength; uint32_t InformationBufferOffset; @@ -179,20 +179,20 @@ uint32_t RequestId; uint32_t Status; } RNDIS_Set_Complete_t; - + /** Type define for a RNDIS Query command message. */ typedef struct { uint32_t MessageType; uint32_t MessageLength; uint32_t RequestId; - + uint32_t Oid; uint32_t InformationBufferLength; uint32_t InformationBufferOffset; uint32_t DeviceVcHandle; } RNDIS_Query_Message_t; - + /** Type define for a RNDIS Query complete response message. */ typedef struct { @@ -200,11 +200,11 @@ uint32_t MessageLength; uint32_t RequestId; uint32_t Status; - + uint32_t InformationBufferLength; uint32_t InformationBufferOffset; } RNDIS_Query_Complete_t; - + /* External Variables: */ extern uint8_t RNDISMessageBuffer[]; extern RNDIS_Message_Header_t* MessageHeader; @@ -222,7 +222,8 @@ uint16_t* ResponseSize); static bool ProcessNDISSet(const uint32_t OId, void* SetData, - uint16_t SetSize); + uint16_t SetSize); #endif - + #endif + diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/RNDISConstants.h b/Demos/Device/LowLevel/RNDISEthernet/Lib/RNDISConstants.h index efe22b699..273fdb81e 100644 --- a/Demos/Device/LowLevel/RNDISEthernet/Lib/RNDISConstants.h +++ b/Demos/Device/LowLevel/RNDISEthernet/Lib/RNDISConstants.h @@ -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 @@ * RNDIS specification related constants. For more information on these * constants, please refer to the Microsoft RNDIS specification. */ - + #ifndef _RNDIS_CONSTANTS_DEVICE_H_ #define _RNDIS_CONSTANTS_DEVICE_H_ @@ -52,19 +52,19 @@ #define REMOTE_NDIS_SET_CMPLT 0x80000005UL #define REMOTE_NDIS_RESET_CMPLT 0x80000006UL #define REMOTE_NDIS_KEEPALIVE_CMPLT 0x80000008UL - + #define REMOTE_NDIS_STATUS_SUCCESS 0x00000000UL #define REMOTE_NDIS_STATUS_FAILURE 0xC0000001UL #define REMOTE_NDIS_STATUS_INVALID_DATA 0xC0010015UL #define REMOTE_NDIS_STATUS_NOT_SUPPORTED 0xC00000BBUL #define REMOTE_NDIS_STATUS_MEDIA_CONNECT 0x4001000BUL #define REMOTE_NDIS_STATUS_MEDIA_DISCONNECT 0x4001000CUL - + #define REMOTE_NDIS_MEDIA_STATE_CONNECTED 0x00000000UL #define REMOTE_NDIS_MEDIA_STATE_DISCONNECTED 0x00000001UL - + #define REMOTE_NDIS_MEDIUM_802_3 0x00000000UL - + #define REMOTE_NDIS_DF_CONNECTIONLESS 0x00000001UL #define REMOTE_NDIS_DF_CONNECTION_ORIENTED 0x00000002UL @@ -79,8 +79,8 @@ #define REMOTE_NDIS_PACKET_GROUP 0x00001000UL #define REMOTE_NDIS_PACKET_ALL_FUNCTIONAL 0x00002000UL #define REMOTE_NDIS_PACKET_FUNCTIONAL 0x00004000UL - #define REMOTE_NDIS_PACKET_MAC_FRAME 0x00008000UL - + #define REMOTE_NDIS_PACKET_MAC_FRAME 0x00008000UL + #define OID_GEN_SUPPORTED_LIST 0x00010101UL #define OID_GEN_HARDWARE_STATUS 0x00010102UL #define OID_GEN_MEDIA_SUPPORTED 0x00010103UL @@ -110,3 +110,4 @@ #define OID_802_3_XMIT_MORE_COLLISIONS 0x01020103UL #endif + diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/TCP.c b/Demos/Device/LowLevel/RNDISEthernet/Lib/TCP.c index a159f35d1..fe8716890 100644 --- a/Demos/Device/LowLevel/RNDISEthernet/Lib/TCP.c +++ b/Demos/Device/LowLevel/RNDISEthernet/Lib/TCP.c @@ -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_Task(void) 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,11 +72,11 @@ void TCP_Task(void) } } } - + /* 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++) { @@ -108,7 +108,7 @@ void TCP_Task(void) TCPHeaderOUT->Reserved = 0; memcpy(TCPDataOUT, ConnectionStateTable[CSTableEntry].Info.Buffer.Data, PacketSize); - + ConnectionStateTable[CSTableEntry].Info.SequenceNumberOut += PacketSize; TCPHeaderOUT->Checksum = TCP_Checksum16(TCPHeaderOUT, ServerIPAddress, @@ -130,11 +130,11 @@ void TCP_Task(void) 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}}; @@ -145,9 +145,9 @@ void TCP_Task(void) /* 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; } } @@ -207,7 +207,7 @@ bool TCP_SetPortState(const uint16_t Port, return true; } } - + /* Port not in table and no room to add it, return failure */ return false; } @@ -234,7 +234,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; } @@ -267,20 +267,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; } @@ -304,12 +304,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; } @@ -337,7 +337,7 @@ TCP_ConnectionInfo_t* TCP_GetConnectionInfo(const uint16_t Port, return &ConnectionStateTable[CSTableEntry].Info; } } - + return NULL; } @@ -361,11 +361,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) { @@ -379,8 +379,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 @@ -395,7 +395,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); @@ -407,10 +407,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) @@ -422,19 +422,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); @@ -449,14 +449,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)) @@ -472,7 +472,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)) { @@ -489,7 +489,7 @@ int16_t TCP_ProcessTCPPacket(void* IPHeaderInStart, return NO_PROCESS; } } - + break; case TCP_Connection_Closing: ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress, @@ -497,9 +497,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); @@ -515,7 +515,7 @@ int16_t TCP_ProcessTCPPacket(void* IPHeaderInStart, ConnectionInfo->SequenceNumberIn++; ConnectionInfo->SequenceNumberOut++; - + TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress, TCPHeaderIN->SourcePort, TCP_Connection_Closed); } @@ -524,7 +524,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)) @@ -537,11 +537,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) @@ -549,7 +549,7 @@ int16_t TCP_ProcessTCPPacket(void* IPHeaderInStart, TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress, TCPHeaderIN->SourcePort, TCP_Connection_Closed); } - + break; } } @@ -557,10 +557,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) { @@ -572,7 +572,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 @@ -581,11 +581,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)); + IPHeaderIN->SourceAddress, sizeof(TCP_Header_t)); - return sizeof(TCP_Header_t); + return sizeof(TCP_Header_t); } return NO_RESPONSE; @@ -607,10 +607,10 @@ static uint16_t TCP_Checksum16(void* TCPHeaderOutStart, 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]; @@ -620,12 +620,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; } + diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/TCP.h b/Demos/Device/LowLevel/RNDISEthernet/Lib/TCP.h index 838e0134b..0b1160dee 100644 --- a/Demos/Device/LowLevel/RNDISEthernet/Lib/TCP.h +++ b/Demos/Device/LowLevel/RNDISEthernet/Lib/TCP.h @@ -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 @@ -139,7 +139,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 @@ -153,7 +153,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 { @@ -167,9 +167,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 @@ -186,7 +186,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; @@ -215,15 +215,15 @@ { 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; @@ -257,3 +257,4 @@ #endif #endif + diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/UDP.c b/Demos/Device/LowLevel/RNDISEthernet/Lib/UDP.c index 15b065656..9637bebcb 100644 --- a/Demos/Device/LowLevel/RNDISEthernet/Lib/UDP.c +++ b/Demos/Device/LowLevel/RNDISEthernet/Lib/UDP.c @@ -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; } + diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/UDP.h b/Demos/Device/LowLevel/RNDISEthernet/Lib/UDP.h index 42d7925a3..32861a420 100644 --- a/Demos/Device/LowLevel/RNDISEthernet/Lib/UDP.h +++ b/Demos/Device/LowLevel/RNDISEthernet/Lib/UDP.h @@ -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 @@ -63,10 +63,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 + diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/Webserver.c b/Demos/Device/LowLevel/RNDISEthernet/Lib/Webserver.c index bc42ef395..bca8673ca 100644 --- a/Demos/Device/LowLevel/RNDISEthernet/Lib/Webserver.c +++ b/Demos/Device/LowLevel/RNDISEthernet/Lib/Webserver.c @@ -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 @@ -43,7 +43,7 @@ char PROGMEM HTTP200Header[] = "HTTP/1.1 200 OK\r\n" "Server: LUFA RNDIS\r\n" "Content-type: text/html\r\n" "Connection: close\r\n\r\n"; - + /** HTTP server response header, for transmission before a resource not found error. This indicates to the host that the given * given URL is invalid, and gives extra error information. */ @@ -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); } } } + diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/Webserver.h b/Demos/Device/LowLevel/RNDISEthernet/Lib/Webserver.h index 87fe1c91d..7abd6adc9 100644 --- a/Demos/Device/LowLevel/RNDISEthernet/Lib/Webserver.h +++ b/Demos/Device/LowLevel/RNDISEthernet/Lib/Webserver.h @@ -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 + diff --git a/Demos/Device/LowLevel/RNDISEthernet/RNDISEthernet.c b/Demos/Device/LowLevel/RNDISEthernet/RNDISEthernet.c index 8a8d2142a..e8eda4ccd 100644 --- a/Demos/Device/LowLevel/RNDISEthernet/RNDISEthernet.c +++ b/Demos/Device/LowLevel/RNDISEthernet/RNDISEthernet.c @@ -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 @@ -49,7 +49,7 @@ int main(void) LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); sei(); - + for (;;) { Ethernet_Task(); @@ -125,7 +125,7 @@ void EVENT_USB_Device_UnhandledControlRequest(void) if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) { Endpoint_ClearSETUP(); - + /* Read in the RNDIS message into the message buffer */ Endpoint_Read_Control_Stream_LE(RNDISMessageBuffer, USB_ControlRequest.wLength); Endpoint_ClearIN(); @@ -133,7 +133,7 @@ void EVENT_USB_Device_UnhandledControlRequest(void) /* Process the RNDIS message */ ProcessRNDISControlMessage(); } - + break; case REQ_GetEncapsulatedResponse: if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) @@ -147,7 +147,7 @@ void EVENT_USB_Device_UnhandledControlRequest(void) } Endpoint_ClearSETUP(); - + /* Write the message response data to the endpoint */ Endpoint_Write_Control_Stream_LE(RNDISMessageBuffer, MessageHeader->MessageLength); Endpoint_ClearOUT(); @@ -155,7 +155,7 @@ void EVENT_USB_Device_UnhandledControlRequest(void) /* Reset the message header once again after transmission */ MessageHeader->MessageLength = 0; } - + break; } } @@ -180,7 +180,7 @@ void RNDIS_Task(void) .wIndex = 0, .wLength = 0, }; - + /* Indicate that a message response is ready for the host */ Endpoint_Write_Stream_LE(&Notification, sizeof(Notification)); @@ -190,7 +190,7 @@ void RNDIS_Task(void) /* Indicate a response is no longer ready */ ResponseReady = false; } - + /* Don't process the data endpoints until the system is in the data initialized state, and the buffer is free */ if ((CurrRNDISState == RNDIS_Data_Initialized) && !(MessageHeader->MessageLength)) { @@ -199,7 +199,7 @@ void RNDIS_Task(void) /* Select the data OUT endpoint */ Endpoint_SelectEndpoint(CDC_RX_EPNUM); - + /* Check if the data OUT endpoint contains data, and that the IN buffer is empty */ if (Endpoint_IsOUTReceived() && !(FrameIN.FrameInBuffer)) { @@ -212,23 +212,23 @@ void RNDIS_Task(void) Endpoint_StallTransaction(); return; } - + /* Read in the Ethernet frame into the buffer */ Endpoint_Read_Stream_LE(FrameIN.FrameData, RNDISPacketHeader.DataLength); /* Finalize the stream transfer to send the last packet */ Endpoint_ClearOUT(); - + /* Store the size of the Ethernet frame */ FrameIN.FrameLength = RNDISPacketHeader.DataLength; /* Indicate Ethernet IN buffer full */ FrameIN.FrameInBuffer = true; } - + /* Select the data IN endpoint */ Endpoint_SelectEndpoint(CDC_TX_EPNUM); - + /* Check if the data IN endpoint is ready for more data, and that the IN buffer is full */ if (Endpoint_IsINReady() && FrameOUT.FrameInBuffer) { @@ -246,10 +246,10 @@ void RNDIS_Task(void) /* Send the Ethernet frame data to the host */ Endpoint_Write_Stream_LE(FrameOUT.FrameData, RNDISPacketHeader.DataLength); - + /* Finalize the stream transfer to send the last packet */ Endpoint_ClearIN(); - + /* Indicate Ethernet OUT buffer no longer full */ FrameOUT.FrameInBuffer = false; } @@ -282,3 +282,4 @@ void Ethernet_Task(void) LEDs_SetAllLEDs(LEDMASK_USB_READY); } } + diff --git a/Demos/Device/LowLevel/RNDISEthernet/RNDISEthernet.h b/Demos/Device/LowLevel/RNDISEthernet/RNDISEthernet.h index 0caf953d2..fb1a8d314 100644 --- a/Demos/Device/LowLevel/RNDISEthernet/RNDISEthernet.h +++ b/Demos/Device/LowLevel/RNDISEthernet/RNDISEthernet.h @@ -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_ @@ -55,7 +55,7 @@ #include <LUFA/Drivers/USB/USB.h> #include <LUFA/Drivers/Board/LEDs.h> #include <LUFA/Drivers/Peripheral/SerialStream.h> - + /* Macros: */ /** Notification value to indicate that a frame is ready to be read by the host. */ #define NOTIF_RESPONSE_AVAILABLE 0x01 @@ -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 - + /* Type Defines: */ /** Type define for a RNDIS notification message, for transmission to the RNDIS host via the notification * Endpoint. @@ -87,7 +87,7 @@ uint16_t wIndex; /**< Two byte notification index parameter */ uint16_t wLength; /**< Size of data payload following the notification header */ } USB_Notification_t; - + /* Function Prototypes: */ void SetupHardware(void); void RNDIS_Task(void); @@ -97,5 +97,6 @@ void EVENT_USB_Device_Disconnect(void); void EVENT_USB_Device_ConfigurationChanged(void); void EVENT_USB_Device_UnhandledControlRequest(void); - + #endif + diff --git a/Demos/Device/LowLevel/RNDISEthernet/RNDISEthernet.txt b/Demos/Device/LowLevel/RNDISEthernet/RNDISEthernet.txt index f9cd651d0..906ea0101 100644 --- a/Demos/Device/LowLevel/RNDISEthernet/RNDISEthernet.txt +++ b/Demos/Device/LowLevel/RNDISEthernet/RNDISEthernet.txt @@ -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> */ + diff --git a/Demos/Device/LowLevel/RNDISEthernet/makefile b/Demos/Device/LowLevel/RNDISEthernet/makefile index 4f8deac96..9695916c5 100644 --- a/Demos/Device/LowLevel/RNDISEthernet/makefile +++ b/Demos/Device/LowLevel/RNDISEthernet/makefile @@ -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 @@ -155,7 +155,7 @@ SRC = $(TARGET).c \ # List C++ source files here. (C dependencies are automatically generated.) -CPPSRC = +CPPSRC = # List Assembler source files here. @@ -168,7 +168,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 @@ -282,7 +282,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 @@ -295,7 +295,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) @@ -307,7 +307,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) @@ -319,7 +319,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 = @@ -342,7 +342,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)) @@ -376,7 +376,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 @@ -410,7 +410,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 @@ -439,7 +439,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: @@ -458,10 +458,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. @@ -526,11 +526,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) @@ -557,9 +557,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) @@ -657,14 +657,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. @@ -686,7 +686,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. @@ -729,4 +729,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
\ No newline at end of file +debug gdb-config diff --git a/Demos/Device/LowLevel/VirtualSerial/Descriptors.c b/Demos/Device/LowLevel/VirtualSerial/Descriptors.c index 5ca446667..9b3aea4b8 100644 --- a/Demos/Device/LowLevel/VirtualSerial/Descriptors.c +++ b/Demos/Device/LowLevel/VirtualSerial/Descriptors.c @@ -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 = 0x02, .SubClass = 0x00, .Protocol = 0x00, - + .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, - + .VendorID = 0x03EB, .ProductID = 0x2044, .ReleaseNumber = VERSION_BCD(00.01), - + .ManufacturerStrIndex = 0x01, .ProductStrIndex = 0x02, .SerialNumStrIndex = USE_INTERNAL_SERIAL, - + .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS }; @@ -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_Descriptor_CDC_FunctionalHeader_t), .Type = DTYPE_CSInterface}, .Subtype = 0x00, - + .CDCSpecification = VERSION_BCD(01.10), }, - .CDC_Functional_ACM = + .CDC_Functional_ACM = { .Header = {.Size = sizeof(USB_Descriptor_CDC_FunctionalACM_t), .Type = DTYPE_CSInterface}, .Subtype = 0x02, - + .Capabilities = 0x06, }, - - .CDC_Functional_Union = + + .CDC_Functional_Union = { .Header = {.Size = sizeof(USB_Descriptor_CDC_FunctionalUnion_t), .Type = DTYPE_CSInterface}, .Subtype = 0x06, - + .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, @@ -193,7 +193,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} }; @@ -204,7 +204,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" }; @@ -215,7 +215,7 @@ USB_Descriptor_String_t PROGMEM ManufacturerString = USB_Descriptor_String_t PROGMEM ProductString = { .Header = {.Size = USB_STRING_LEN(13), .Type = DTYPE_String}, - + .UnicodeString = L"LUFA CDC Demo" }; @@ -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; + + *DescriptorAddress = Address; return Size; } + diff --git a/Demos/Device/LowLevel/VirtualSerial/Descriptors.h b/Demos/Device/LowLevel/VirtualSerial/Descriptors.h index 44cf084b6..7a8da898e 100644 --- a/Demos/Device/LowLevel/VirtualSerial/Descriptors.h +++ b/Demos/Device/LowLevel/VirtualSerial/Descriptors.h @@ -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_ @@ -40,22 +40,22 @@ #include <LUFA/Drivers/USB/USB.h> #include <avr/pgmspace.h> - + /* Macros: */ /** Endpoint number of the CDC device-to-host notification IN endpoint. */ #define CDC_NOTIFICATION_EPNUM 2 /** Endpoint number of the CDC device-to-host data IN endpoint. */ - #define CDC_TX_EPNUM 3 + #define CDC_TX_EPNUM 3 /** Endpoint number of the CDC host-to-device data OUT endpoint. */ - #define CDC_RX_EPNUM 4 + #define CDC_RX_EPNUM 4 /** Size in bytes of the CDC device-to-host notification IN endpoint. */ #define CDC_NOTIFICATION_EPSIZE 8 /** Size in bytes of the CDC data IN and OUT endpoints. */ - #define CDC_TXRX_EPSIZE 16 + #define CDC_TXRX_EPSIZE 16 /* Type Defines: */ /** Type define for a CDC class-specific functional header descriptor. This indicates to the host that the device @@ -80,7 +80,7 @@ uint8_t Subtype; /**< Sub type value used to distinguish between CDC class-specific descriptors. */ uint8_t Capabilities; /**< Capabilities of the ACM interface, given as a bit mask. */ } USB_Descriptor_CDC_FunctionalACM_t; - + /** Type define for a CDC class-specific functional Union descriptor. This indicates to the host that specific * CDC control and data interfaces are related. See the CDC class specification for more details. */ @@ -116,3 +116,4 @@ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); #endif + diff --git a/Demos/Device/LowLevel/VirtualSerial/VirtualSerial.c b/Demos/Device/LowLevel/VirtualSerial/VirtualSerial.c index 9189ef3e7..22d65ffe7 100644 --- a/Demos/Device/LowLevel/VirtualSerial/VirtualSerial.c +++ b/Demos/Device/LowLevel/VirtualSerial/VirtualSerial.c @@ -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 @@ -55,7 +55,7 @@ CDC_Line_Coding_t LineEncoding = { .BaudRateBPS = 0, int main(void) { SetupHardware(); - + LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); sei(); @@ -119,7 +119,7 @@ void EVENT_USB_Device_ConfigurationChanged(void) LineEncoding.BaudRateBPS = 0; /* Indicate endpoint configuration success or failure */ - LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); + LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); } /** Event handler for the USB_UnhandledControlRequest event. This is used to catch standard and class specific @@ -133,14 +133,14 @@ void EVENT_USB_Device_UnhandledControlRequest(void) { case REQ_GetLineEncoding: if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) - { + { Endpoint_ClearSETUP(); /* Write the line coding data to the control endpoint */ Endpoint_Write_Control_Stream_LE(&LineEncoding, sizeof(CDC_Line_Coding_t)); Endpoint_ClearOUT(); } - + break; case REQ_SetLineEncoding: if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) @@ -151,7 +151,7 @@ void EVENT_USB_Device_UnhandledControlRequest(void) Endpoint_Read_Control_Stream_LE(&LineEncoding, sizeof(CDC_Line_Coding_t)); Endpoint_ClearIN(); } - + break; case REQ_SetControlLineState: if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) @@ -164,7 +164,7 @@ void EVENT_USB_Device_UnhandledControlRequest(void) CONTROL_LINE_OUT_* masks to determine the RTS and DTR line states using the following code: */ } - + break; } } @@ -175,11 +175,11 @@ void CDC_Task(void) char* ReportString = NULL; uint8_t JoyStatus_LCL = Joystick_GetStatus(); static bool ActionSent = false; - + /* Device must be connected and configured for the task to run */ if (USB_DeviceState != DEVICE_STATE_Configured) return; - + #if 0 /* NOTE: Here you can use the notification endpoint to send back line state changes to the host, for the special RS-232 * handshake signal lines (and some error states), via the CONTROL_LINE_IN_* masks and the following code: @@ -192,11 +192,11 @@ void CDC_Task(void) .wIndex = 0, .wLength = sizeof(uint16_t), }; - + uint16_t LineStateMask; - + // Set LineStateMask here to a mask of CONTROL_LINE_IN_* masks to set the input handshake line states to send to the host - + Endpoint_SelectEndpoint(CDC_NOTIFICATION_EPNUM); Endpoint_Write_Stream_LE(&Notification, sizeof(Notification)); Endpoint_Write_Stream_LE(&LineStateMask, sizeof(LineStateMask)); @@ -227,20 +227,20 @@ void CDC_Task(void) /* Write the String to the Endpoint */ Endpoint_Write_Stream_LE(ReportString, strlen(ReportString)); - + /* Remember if the packet to send completely fills the endpoint */ bool IsFull = (Endpoint_BytesInEndpoint() == CDC_TXRX_EPSIZE); /* Finalize the stream transfer to send the last packet */ Endpoint_ClearIN(); - /* If the last packet filled the endpoint, send an empty packet to release the buffer on + /* If the last packet filled the endpoint, send an empty packet to release the buffer on * the receiver (otherwise all data will be cached until a non-full packet is received) */ if (IsFull) { /* Wait until the endpoint is ready for another packet */ Endpoint_WaitUntilReady(); - + /* Send an empty packet to ensure that the host does not buffer data sent to it */ Endpoint_ClearIN(); } @@ -248,8 +248,9 @@ void CDC_Task(void) /* Select the Serial Rx Endpoint */ Endpoint_SelectEndpoint(CDC_RX_EPNUM); - + /* Throw away any received data from the host */ if (Endpoint_IsOUTReceived()) Endpoint_ClearOUT(); } + diff --git a/Demos/Device/LowLevel/VirtualSerial/VirtualSerial.h b/Demos/Device/LowLevel/VirtualSerial/VirtualSerial.h index 650874c96..b95939b53 100644 --- a/Demos/Device/LowLevel/VirtualSerial/VirtualSerial.h +++ b/Demos/Device/LowLevel/VirtualSerial/VirtualSerial.h @@ -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 @@ -59,9 +59,9 @@ /** CDC Class specific request to set the current virtual serial port handshake line states. */ #define REQ_SetControlLineState 0x22 - + /** Notification type constant for a change in the virtual serial port handshake line states, for - * use with a USB_Notification_Header_t notification structure when sent to the host via the CDC + * use with a USB_Notification_Header_t notification structure when sent to the host via the CDC * notification endpoint. */ #define NOTIF_SerialState 0x20 @@ -75,7 +75,7 @@ * from the host, to indicate that theRTS line state should be high. */ #define CONTROL_LINE_OUT_RTS (1 << 1) - + /** Mask for the DCD handshake line for use with the a NOTIF_SerialState class specific notification * from the device to the host, to indicate that the DCD line state is currently high. */ @@ -110,7 +110,7 @@ * to indicate that a data overrun error has occurred on the virtual serial port. */ #define CONTROL_LINE_IN_OVERRUNERROR (1 << 6) - + /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */ #define LEDMASK_USB_NOTREADY LEDS_LED1 @@ -138,7 +138,7 @@ */ uint8_t DataBits; /**< Bits of data per character of the virtual serial port */ } CDC_Line_Coding_t; - + /** Type define for a CDC notification, sent to the host via the CDC notification endpoint to indicate a * change in the device state asynchronously. */ @@ -152,7 +152,7 @@ uint16_t wIndex; /**< Notification wIndex, notification-specific */ uint16_t wLength; /**< Notification wLength, notification-specific */ } USB_Notification_Header_t; - + /* Enums: */ /** Enum for the possible line encoding formats of a virtual serial port. */ enum CDCDevice_CDC_LineCodingFormats_t @@ -161,7 +161,7 @@ OneAndAHalfStopBits = 1, /**< Each frame contains one and a half stop bits */ TwoStopBits = 2, /**< Each frame contains two stop bits */ }; - + /** Enum for the possible line encoding parity settings of a virtual serial port. */ enum CDCDevice_LineCodingParity_t { @@ -171,14 +171,15 @@ Parity_Mark = 3, /**< Mark parity bit mode on each frame */ Parity_Space = 4, /**< Space parity bit mode on each frame */ }; - + /* Function Prototypes: */ void SetupHardware(void); void CDC_Task(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 + diff --git a/Demos/Device/LowLevel/VirtualSerial/VirtualSerial.txt b/Demos/Device/LowLevel/VirtualSerial/VirtualSerial.txt index 571168948..4190c2f7d 100644 --- a/Demos/Device/LowLevel/VirtualSerial/VirtualSerial.txt +++ b/Demos/Device/LowLevel/VirtualSerial/VirtualSerial.txt @@ -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 Communications Device Class (Virtual Serial Port) Demo * * \section SSec_Compat Demo Compatibility: @@ -28,7 +28,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> @@ -42,14 +42,14 @@ * </tr> * </table> * - * \section SSec_Description Project Description: + * \section SSec_Description Project Description: * * Communications Device Class demonstration application. * This gives a simple reference application for implementing * a CDC device acting as a virtual serial port. Joystick * actions are transmitted to the host as strings. The device * does not respond to serial 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 @@ -70,3 +70,4 @@ * </tr> * </table> */ + diff --git a/Demos/Device/LowLevel/VirtualSerial/makefile b/Demos/Device/LowLevel/VirtualSerial/makefile index 18a1e61fd..b556a3b78 100644 --- a/Demos/Device/LowLevel/VirtualSerial/makefile +++ b/Demos/Device/LowLevel/VirtualSerial/makefile @@ -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 + diff --git a/Demos/Device/LowLevel/makefile b/Demos/Device/LowLevel/makefile index ed0dc3f36..11594e9f3 100644 --- a/Demos/Device/LowLevel/makefile +++ b/Demos/Device/LowLevel/makefile @@ -1,7 +1,7 @@ # # LUFA Library # Copyright (C) Dean Camera, 2010. -# +# # dean [at] fourwalledcubicle [dot] com # www.fourwalledcubicle.com # @@ -63,3 +63,4 @@ all: $(MAKE) -C Mouse $@ $(MAKE) -C RNDISEthernet $@ $(MAKE) -C VirtualSerial $@ + |