From a67bd74e3e8aad87dcee8cf0c0eaaccbe7d00552 Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Thu, 4 Jun 2009 02:55:30 +0000 Subject: [PATCH] Minor documentation page updates. Redocumented all device demos, now that they have changed over to the new USB class drivers. Added C linkage to class drivers for C++ support. Added prefixes to most of the class driver constants to prevent name clashes. --- Bootloaders/CDC/makefile | 1 - Bootloaders/DFU/makefile | 1 - Bootloaders/TeensyHID/makefile | 1 - Demos/Device/AudioInput/AudioInput.c | 29 +++++++-- Demos/Device/AudioInput/AudioInput.h | 13 +++- Demos/Device/AudioInput/Descriptors.c | 2 +- Demos/Device/AudioOutput/AudioOutput.c | 71 ++++++++++++--------- Demos/Device/AudioOutput/AudioOutput.h | 7 ++ Demos/Device/AudioOutput/Descriptors.c | 2 +- Demos/Device/CDC/CDC.c | 21 +++++- Demos/Device/CDC/CDC.h | 7 ++ Demos/Device/DualCDC/DualCDC.c | 33 +++++++++- Demos/Device/DualCDC/DualCDC.h | 7 ++ Demos/Device/GenericHID/GenericHID.c | 32 ++++++++++ Demos/Device/GenericHID/GenericHID.h | 7 ++ Demos/Device/Joystick/Joystick.c | 32 ++++++++++ Demos/Device/Joystick/Joystick.h | 7 ++ Demos/Device/Keyboard/Keyboard.c | 34 +++++++++- Demos/Device/Keyboard/Keyboard.h | 7 ++ Demos/Device/KeyboardMouse/KeyboardMouse.c | 46 +++++++++++-- Demos/Device/KeyboardMouse/KeyboardMouse.h | 7 ++ Demos/Device/MIDI/Descriptors.c | 8 +-- Demos/Device/MIDI/MIDI.c | 30 +++++++-- Demos/Device/MIDI/MIDI.h | 7 ++ Demos/Device/MassStorage/MassStorage.c | 22 +++++++ Demos/Device/MassStorage/MassStorage.h | 12 +++- Demos/Device/Mouse/Mouse.c | 38 ++++++++++- Demos/Device/Mouse/Mouse.h | 7 ++ Demos/Device/RNDISEthernet/RNDISEthernet.c | 31 +++++++-- Demos/Device/RNDISEthernet/RNDISEthernet.h | 11 +++- Demos/Device/USBtoSerial/USBtoSerial.c | 34 +++++++++- Demos/Device/USBtoSerial/USBtoSerial.h | 7 ++ LUFA/ChangeLog.txt | 4 +- LUFA/CompileTimeTokens.txt | 13 ---- LUFA/Drivers/USB/Class/Device/Audio.c | 2 +- LUFA/Drivers/USB/Class/Device/Audio.h | 15 ++++- LUFA/Drivers/USB/Class/Device/CDC.h | 53 ++++++++------- LUFA/Drivers/USB/Class/Device/HID.h | 10 +++ LUFA/Drivers/USB/Class/Device/MIDI.h | 16 ++++- LUFA/Drivers/USB/Class/Device/MassStorage.c | 14 ++-- LUFA/Drivers/USB/Class/Device/MassStorage.h | 31 +++++---- LUFA/Drivers/USB/Class/Device/RNDIS.h | 12 +++- LUFA/Drivers/USB/HighLevel/Events.h | 4 +- LUFA/MainPage.txt | 12 ++-- LUFA/MigrationInformation.txt | 4 +- LUFA/VIDAndPIDValues.txt | 4 +- Projects/Magstripe/Magstripe.c | 36 +++++++++++ 47 files changed, 652 insertions(+), 152 deletions(-) diff --git a/Bootloaders/CDC/makefile b/Bootloaders/CDC/makefile index e3d8e5c513..cf7030d456 100644 --- a/Bootloaders/CDC/makefile +++ b/Bootloaders/CDC/makefile @@ -113,7 +113,6 @@ LUFA_PATH = ../.. # List C source files here. (C dependencies are automatically generated.) SRC = $(TARGET).c \ Descriptors.c \ - $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c \ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \ diff --git a/Bootloaders/DFU/makefile b/Bootloaders/DFU/makefile index b3eb1b0a1d..f9f8f65633 100644 --- a/Bootloaders/DFU/makefile +++ b/Bootloaders/DFU/makefile @@ -113,7 +113,6 @@ LUFA_PATH = ../.. # List C source files here. (C dependencies are automatically generated.) SRC = $(TARGET).c \ Descriptors.c \ - $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c \ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \ diff --git a/Bootloaders/TeensyHID/makefile b/Bootloaders/TeensyHID/makefile index 68b0160221..91d3ada0aa 100644 --- a/Bootloaders/TeensyHID/makefile +++ b/Bootloaders/TeensyHID/makefile @@ -113,7 +113,6 @@ LUFA_PATH = ../.. # List C source files here. (C dependencies are automatically generated.) SRC = $(TARGET).c \ Descriptors.c \ - $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c \ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \ $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \ diff --git a/Demos/Device/AudioInput/AudioInput.c b/Demos/Device/AudioInput/AudioInput.c index bcfb04be1b..31b3159e01 100644 --- a/Demos/Device/AudioInput/AudioInput.c +++ b/Demos/Device/AudioInput/AudioInput.c @@ -28,16 +28,29 @@ this software. */ +/** \file + * + * Main source file for the AudioInput demo. This file contains the main tasks of + * the demo and is responsible for the initial application hardware configuration. + */ + #include "AudioInput.h" +/** LUFA Audio Class driver interface configuration and state information. This structure is + * passed to all Audio Class driver functions, so that multiple instances of the same class + * within a device can be differentiated from one another. + */ USB_ClassInfo_Audio_t Microphone_Audio_Interface = { - .InterfaceNumber = 0, + .StreamingInterfaceNumber = 1, - .DataINEndpointNumber = AUDIO_STREAM_EPNUM, - .DataINEndpointSize = AUDIO_STREAM_EPSIZE, + .DataINEndpointNumber = AUDIO_STREAM_EPNUM, + .DataINEndpointSize = AUDIO_STREAM_EPSIZE, }; - + +/** Main program entry point. This routine contains the overall program flow, including initial + * setup of all components and the main program loop. + */ int main(void) { SetupHardware(); @@ -53,6 +66,7 @@ int main(void) } } +/** Configures the board hardware and chip peripherals for the demo's functionality. */ void SetupHardware(void) { /* Disable watchdog if enabled by bootloader/fuses */ @@ -72,6 +86,9 @@ void SetupHardware(void) ADC_StartReading(ADC_REFERENCE_AVCC | ADC_RIGHT_ADJUSTED | MIC_IN_ADC_CHANNEL); } +/** Processes the next audio sample by reading the last ADC conversion and writing it to the audio + * interface, each time the sample reload timer period elapses to give a constant sample rate. + */ void ProcessNextSample(void) { if ((TIFR0 & (1 << OCF0A)) && USB_Audio_IsReadyForNextSample(&Microphone_Audio_Interface)) @@ -90,6 +107,7 @@ void ProcessNextSample(void) } } +/** Event handler for the library USB Connection event. */ void EVENT_USB_Connect(void) { LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); @@ -100,6 +118,7 @@ void EVENT_USB_Connect(void) TCCR0B = (1 << CS00); // Fcpu speed } +/** Event handler for the library USB Disconnection event. */ void EVENT_USB_Disconnect(void) { /* Stop the sample reload timer */ @@ -108,6 +127,7 @@ void EVENT_USB_Disconnect(void) LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); } +/** Event handler for the library USB Configuration Changed event. */ void EVENT_USB_ConfigurationChanged(void) { LEDs_SetAllLEDs(LEDMASK_USB_READY); @@ -116,6 +136,7 @@ void EVENT_USB_ConfigurationChanged(void) LEDs_SetAllLEDs(LEDMASK_USB_ERROR); } +/** Event handler for the library USB Unhandled Control Packet event. */ void EVENT_USB_UnhandledControlPacket(void) { USB_Audio_ProcessControlPacket(&Microphone_Audio_Interface); diff --git a/Demos/Device/AudioInput/AudioInput.h b/Demos/Device/AudioInput/AudioInput.h index e9f56b30a6..e4dd7fe660 100644 --- a/Demos/Device/AudioInput/AudioInput.h +++ b/Demos/Device/AudioInput/AudioInput.h @@ -52,18 +52,25 @@ /* Macros: */ /** ADC channel number for the microphone input. */ - #define MIC_IN_ADC_CHANNEL 2 + #define MIC_IN_ADC_CHANNEL 2 /** Maximum ADC sample value for the microphone input. */ - #define SAMPLE_MAX_RANGE 0xFFFF + #define SAMPLE_MAX_RANGE 0xFFFF /** Maximum ADC range for the microphone input. */ - #define ADC_MAX_RANGE 0x3FF + #define ADC_MAX_RANGE 0x3FF /* Macros: */ + /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */ #define LEDMASK_USB_NOTREADY LEDS_LED1 + + /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */ #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3) + + /** LED mask for the library LED driver, to indicate that the USB interface is ready. */ #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4) + + /** 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: */ diff --git a/Demos/Device/AudioInput/Descriptors.c b/Demos/Device/AudioInput/Descriptors.c index b8de373d6c..6697cfe1dc 100644 --- a/Demos/Device/AudioInput/Descriptors.c +++ b/Demos/Device/AudioInput/Descriptors.c @@ -201,7 +201,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor = .BitResolution = 16, .SampleFrequencyType = (sizeof(ConfigurationDescriptor.AudioFormat.SampleFrequencies) / sizeof(AudioSampleFreq_t)), - .SampleFrequencies = {SAMPLE_FREQ(AUDIO_SAMPLE_FREQUENCY)} + .SampleFrequencies = {AUDIO_SAMPLE_FREQ(AUDIO_SAMPLE_FREQUENCY)} }, .AudioEndpoint = diff --git a/Demos/Device/AudioOutput/AudioOutput.c b/Demos/Device/AudioOutput/AudioOutput.c index 0f193567a3..4ff2e7453f 100644 --- a/Demos/Device/AudioOutput/AudioOutput.c +++ b/Demos/Device/AudioOutput/AudioOutput.c @@ -28,16 +28,29 @@ this software. */ +/** \file + * + * 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" +/** LUFA Audio Class driver interface configuration and state information. This structure is + * passed to all Audio Class driver functions, so that multiple instances of the same class + * within a device can be differentiated from one another. + */ USB_ClassInfo_Audio_t Speaker_Audio_Interface = { - .InterfaceNumber = 0, + .StreamingInterfaceNumber = 1, - .DataOUTEndpointNumber = AUDIO_STREAM_EPNUM, - .DataOUTEndpointSize = AUDIO_STREAM_EPSIZE, + .DataOUTEndpointNumber = AUDIO_STREAM_EPNUM, + .DataOUTEndpointSize = AUDIO_STREAM_EPSIZE, }; +/** Main program entry point. This routine contains the overall program flow, including initial + * setup of all components and the main program loop. + */ int main(void) { SetupHardware(); @@ -53,6 +66,7 @@ int main(void) } } +/** Configures the board hardware and chip peripherals for the demo's functionality. */ void SetupHardware(void) { /* Disable watchdog if enabled by bootloader/fuses */ @@ -67,6 +81,9 @@ void SetupHardware(void) USB_Init(); } +/** Processes the next audio sample by reading the last ADC conversion and writing it to the audio + * interface, each time the sample reload timer period elapses to give a constant sample rate. + */ void ProcessNextSample(void) { if ((TIFR0 & (1 << OCF0A)) && USB_Audio_IsSampleReceived(&Speaker_Audio_Interface)) @@ -82,10 +99,10 @@ void ProcessNextSample(void) int8_t LeftSample_8Bit = (LeftSample_16Bit >> 8); int8_t RightSample_8Bit = (RightSample_16Bit >> 8); -#if defined(AUDIO_OUT_MONO) /* Mix the two channels together to produce a mono, 8-bit sample */ int8_t MixedSample_8Bit = (((int16_t)LeftSample_8Bit + (int16_t)RightSample_8Bit) >> 1); +#if defined(AUDIO_OUT_MONO) /* Load the sample into the PWM timer channel */ OCRxA = ((uint8_t)MixedSample_8Bit ^ (1 << 7)); #elif defined(AUDIO_OUT_STEREO) @@ -93,42 +110,32 @@ void ProcessNextSample(void) OCRxA = ((uint8_t)LeftSample_8Bit ^ (1 << 7)); OCRxB = ((uint8_t)RightSample_8Bit ^ (1 << 7)); #elif defined(AUDIO_OUT_PORTC) - /* Mix the two channels together to produce a mono, 8-bit sample */ - int8_t MixedSample_8Bit = (((int16_t)LeftSample_8Bit + (int16_t)RightSample_8Bit) >> 1); - PORTC = MixedSample_8Bit; #else uint8_t LEDMask = LEDS_NO_LEDS; - /* Make left channel positive (absolute) */ - if (LeftSample_8Bit < 0) - LeftSample_8Bit = -LeftSample_8Bit; - - /* Make right channel positive (absolute) */ - if (RightSample_8Bit < 0) - RightSample_8Bit = -RightSample_8Bit; + /* Make mixed sample value positive (absolute) */ + if (MixedSample_8Bit < 0) + MixedSample_8Bit = -MixedSample_8Bit; - /* Set first LED based on sample value */ - if (LeftSample_8Bit < ((128 / 8) * 1)) - LEDMask |= LEDS_LED2; - else if (LeftSample_8Bit < ((128 / 8) * 3)) - LEDMask |= (LEDS_LED1 | LEDS_LED2); - else + if (MixedSample_8Bit > ((128 / 8) * 1)) LEDMask |= LEDS_LED1; + + if (MixedSample_8Bit > ((128 / 8) * 2)) + LEDMask |= LEDS_LED2; + + if (MixedSample_8Bit > ((128 / 8) * 3)) + LEDMask |= LEDS_LED3; - /* Set second LED based on sample value */ - if (RightSample_8Bit < ((128 / 8) * 1)) + if (MixedSample_8Bit > ((128 / 8) * 4)) LEDMask |= LEDS_LED4; - else if (RightSample_8Bit < ((128 / 8) * 3)) - LEDMask |= (LEDS_LED3 | LEDS_LED4); - else - LEDMask |= LEDS_LED3; - + LEDs_SetAllLEDs(LEDMask); #endif } } +/** Event handler for the library USB Connection event. */ void EVENT_USB_Connect(void) { LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); @@ -157,16 +164,16 @@ void EVENT_USB_Connect(void) #endif } -/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via - * the status LEDs, disables the sample update and PWM output timers and stops the USB and Audio management tasks. - */ +/** Event handler for the library USB Disconnection event. */ void EVENT_USB_Disconnect(void) { LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); - /* Stop the timers */ + /* Stop the sample reload timer */ TCCR0B = 0; + #if (defined(AUDIO_OUT_MONO) || defined(AUDIO_OUT_STEREO)) + /* Stop the PWM generation timer */ TCCRxB = 0; #endif @@ -182,6 +189,7 @@ void EVENT_USB_Disconnect(void) #endif } +/** Event handler for the library USB Configuration Changed event. */ void EVENT_USB_ConfigurationChanged(void) { LEDs_SetAllLEDs(LEDMASK_USB_READY); @@ -190,6 +198,7 @@ void EVENT_USB_ConfigurationChanged(void) LEDs_SetAllLEDs(LEDMASK_USB_ERROR); } +/** Event handler for the library USB Unhandled Control Packet event. */ void EVENT_USB_UnhandledControlPacket(void) { USB_Audio_ProcessControlPacket(&Speaker_Audio_Interface); diff --git a/Demos/Device/AudioOutput/AudioOutput.h b/Demos/Device/AudioOutput/AudioOutput.h index 7d112db88a..e8435e3adf 100644 --- a/Demos/Device/AudioOutput/AudioOutput.h +++ b/Demos/Device/AudioOutput/AudioOutput.h @@ -99,9 +99,16 @@ #endif /* Macros: */ + /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */ #define LEDMASK_USB_NOTREADY LEDS_LED1 + + /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */ #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3) + + /** LED mask for the library LED driver, to indicate that the USB interface is ready. */ #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4) + + /** 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: */ diff --git a/Demos/Device/AudioOutput/Descriptors.c b/Demos/Device/AudioOutput/Descriptors.c index 92d7e0d57b..0039c2ba88 100644 --- a/Demos/Device/AudioOutput/Descriptors.c +++ b/Demos/Device/AudioOutput/Descriptors.c @@ -201,7 +201,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor = .BitResolution = 16, .SampleFrequencyType = (sizeof(ConfigurationDescriptor.AudioFormat.SampleFrequencies) / sizeof(AudioSampleFreq_t)), - .SampleFrequencies = {SAMPLE_FREQ(AUDIO_SAMPLE_FREQUENCY)} + .SampleFrequencies = {AUDIO_SAMPLE_FREQ(AUDIO_SAMPLE_FREQUENCY)} }, .AudioEndpoint = diff --git a/Demos/Device/CDC/CDC.c b/Demos/Device/CDC/CDC.c index e6bc1a455f..6f15393348 100644 --- a/Demos/Device/CDC/CDC.c +++ b/Demos/Device/CDC/CDC.c @@ -28,8 +28,18 @@ this software. */ +/** \file + * + * Main source file for the CDC demo. This file contains the main tasks of + * the demo and is responsible for the initial application hardware configuration. + */ + #include "CDC.h" +/** LUFA CDC Class driver interface configuration and state information. This structure is + * passed to all CDC Class driver functions, so that multiple instances of the same class + * within a device can be differentiated from one another. + */ USB_ClassInfo_CDC_t VirtualSerial_CDC_Interface = { .ControlInterfaceNumber = 0, @@ -44,6 +54,9 @@ USB_ClassInfo_CDC_t VirtualSerial_CDC_Interface = .NotificationEndpointSize = CDC_NOTIFICATION_EPSIZE, }; +/** Main program entry point. This routine contains the overall program flow, including initial + * setup of all components and the main program loop. + */ int main(void) { SetupHardware(); @@ -63,6 +76,7 @@ int main(void) } } +/** Configures the board hardware and chip peripherals for the demo's functionality. */ void SetupHardware(void) { /* Disable watchdog if enabled by bootloader/fuses */ @@ -78,11 +92,12 @@ void SetupHardware(void) USB_Init(); } +/** Checks for changes in the position of the board joystick, sending strings to the host upon each change. */ void CheckJoystickMovement(void) { uint8_t JoyStatus_LCL = Joystick_GetStatus(); char* ReportString = NULL; - static bool ActionSent = false; + static bool ActionSent = false; char* JoystickStrings[] = { @@ -114,16 +129,19 @@ void CheckJoystickMovement(void) } } +/** Event handler for the library USB Connection event. */ void EVENT_USB_Connect(void) { LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); } +/** Event handler for the library USB Disconnection event. */ void EVENT_USB_Disconnect(void) { LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); } +/** Event handler for the library USB Configuration Changed event. */ void EVENT_USB_ConfigurationChanged(void) { LEDs_SetAllLEDs(LEDMASK_USB_READY); @@ -132,6 +150,7 @@ void EVENT_USB_ConfigurationChanged(void) LEDs_SetAllLEDs(LEDMASK_USB_ERROR); } +/** Event handler for the library USB Unhandled Control Packet event. */ void EVENT_USB_UnhandledControlPacket(void) { USB_CDC_ProcessControlPacket(&VirtualSerial_CDC_Interface); diff --git a/Demos/Device/CDC/CDC.h b/Demos/Device/CDC/CDC.h index dc4033448f..23072d683e 100644 --- a/Demos/Device/CDC/CDC.h +++ b/Demos/Device/CDC/CDC.h @@ -51,9 +51,16 @@ #include /* Macros: */ + /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */ #define LEDMASK_USB_NOTREADY LEDS_LED1 + + /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */ #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3) + + /** LED mask for the library LED driver, to indicate that the USB interface is ready. */ #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4) + + /** 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: */ diff --git a/Demos/Device/DualCDC/DualCDC.c b/Demos/Device/DualCDC/DualCDC.c index 26947f433f..216902c672 100644 --- a/Demos/Device/DualCDC/DualCDC.c +++ b/Demos/Device/DualCDC/DualCDC.c @@ -27,9 +27,20 @@ arising out of or in connection with the use or performance of this software. */ - + +/** \file + * + * Main source file for the DualCDC demo. This file contains the main tasks of + * the demo and is responsible for the initial application hardware configuration. + */ + #include "DualCDC.h" +/** LUFA CDC Class driver interface configuration and state information. This structure is + * passed to all CDC Class driver functions, so that multiple instances of the same class + * within a device can be differentiated from one another. This is for the first CDC interface, + * which sends strings to the host for each joystick movement. + */ USB_ClassInfo_CDC_t VirtualSerial1_CDC_Interface = { .ControlInterfaceNumber = 0, @@ -44,9 +55,14 @@ USB_ClassInfo_CDC_t VirtualSerial1_CDC_Interface = .NotificationEndpointSize = CDC_NOTIFICATION_EPSIZE, }; +/** LUFA CDC Class driver interface configuration and state information. This structure is + * passed to all CDC Class driver functions, so that multiple instances of the same class + * within a device can be differentiated from one another. This is for the second CDC interface, + * which echos back all received data from the host. + */ USB_ClassInfo_CDC_t VirtualSerial2_CDC_Interface = { - .ControlInterfaceNumber = 0, + .ControlInterfaceNumber = 2, .DataINEndpointNumber = CDC2_TX_EPNUM, .DataINEndpointSize = CDC_TXRX_EPSIZE, @@ -58,6 +74,9 @@ USB_ClassInfo_CDC_t VirtualSerial2_CDC_Interface = .NotificationEndpointSize = CDC_NOTIFICATION_EPSIZE, }; +/** Main program entry point. This routine contains the overall program flow, including initial + * setup of all components and the main program loop. + */ int main(void) { SetupHardware(); @@ -68,10 +87,12 @@ int main(void) { CheckJoystickMovement(); + /* Discard all received data on the first CDC interface */ uint16_t BytesToDiscard = USB_CDC_BytesReceived(&VirtualSerial1_CDC_Interface); while (BytesToDiscard--) USB_CDC_ReceiveByte(&VirtualSerial1_CDC_Interface); + /* Echo all received data on the second CDC interface */ uint16_t BytesToEcho = USB_CDC_BytesReceived(&VirtualSerial2_CDC_Interface); while (BytesToEcho--) USB_CDC_SendByte(&VirtualSerial2_CDC_Interface, USB_CDC_ReceiveByte(&VirtualSerial2_CDC_Interface)); @@ -82,6 +103,7 @@ int main(void) } } +/** Configures the board hardware and chip peripherals for the demo's functionality. */ void SetupHardware(void) { /* Disable watchdog if enabled by bootloader/fuses */ @@ -97,6 +119,9 @@ void SetupHardware(void) USB_Init(); } +/** Checks for changes in the position of the board joystick, sending strings to the host upon each change + * through the first of the CDC interfaces. + */ void CheckJoystickMovement(void) { uint8_t JoyStatus_LCL = Joystick_GetStatus(); @@ -133,16 +158,19 @@ void CheckJoystickMovement(void) } } +/** Event handler for the library USB Connection event. */ void EVENT_USB_Connect(void) { LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); } +/** Event handler for the library USB Disconnection event. */ void EVENT_USB_Disconnect(void) { LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); } +/** Event handler for the library USB Configuration Changed event. */ void EVENT_USB_ConfigurationChanged(void) { LEDs_SetAllLEDs(LEDMASK_USB_READY); @@ -154,6 +182,7 @@ void EVENT_USB_ConfigurationChanged(void) LEDs_SetAllLEDs(LEDMASK_USB_ERROR); } +/** Event handler for the library USB Unhandled Control Packet event. */ void EVENT_USB_UnhandledControlPacket(void) { USB_CDC_ProcessControlPacket(&VirtualSerial1_CDC_Interface); diff --git a/Demos/Device/DualCDC/DualCDC.h b/Demos/Device/DualCDC/DualCDC.h index fc782ee5ad..93b785d31c 100644 --- a/Demos/Device/DualCDC/DualCDC.h +++ b/Demos/Device/DualCDC/DualCDC.h @@ -51,9 +51,16 @@ #include /* Macros: */ + /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */ #define LEDMASK_USB_NOTREADY LEDS_LED1 + + /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */ #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3) + + /** LED mask for the library LED driver, to indicate that the USB interface is ready. */ #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4) + + /** 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: */ diff --git a/Demos/Device/GenericHID/GenericHID.c b/Demos/Device/GenericHID/GenericHID.c index 9c8023a5c9..b933e4506b 100644 --- a/Demos/Device/GenericHID/GenericHID.c +++ b/Demos/Device/GenericHID/GenericHID.c @@ -28,8 +28,18 @@ this software. */ +/** \file + * + * Main source file for the GenericHID demo. This file contains the main tasks of + * the demo and is responsible for the initial application hardware configuration. + */ + #include "GenericHID.h" +/** LUFA HID Class driver interface configuration and state information. This structure is + * passed to all HID Class driver functions, so that multiple instances of the same class + * within a device can be differentiated from one another. + */ USB_ClassInfo_HID_t Generic_HID_Interface = { .InterfaceNumber = 0, @@ -45,6 +55,9 @@ USB_ClassInfo_HID_t Generic_HID_Interface = .UsingReportProtocol = true, }; +/** Main program entry point. This routine contains the overall program flow, including initial + * setup of all components and the main program loop. + */ int main(void) { SetupHardware(); @@ -58,6 +71,7 @@ int main(void) } } +/** Configures the board hardware and chip peripherals for the demo's functionality. */ void SetupHardware(void) { /* Disable watchdog if enabled by bootloader/fuses */ @@ -78,16 +92,19 @@ void SetupHardware(void) TIMSK0 = (1 << OCIE0A); } +/** Event handler for the library USB Connection event. */ void EVENT_USB_Connect(void) { LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); } +/** Event handler for the library USB Disconnection event. */ void EVENT_USB_Disconnect(void) { LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); } +/** Event handler for the library USB Configuration Changed event. */ void EVENT_USB_ConfigurationChanged(void) { LEDs_SetAllLEDs(LEDMASK_USB_READY); @@ -96,17 +113,26 @@ void EVENT_USB_ConfigurationChanged(void) LEDs_SetAllLEDs(LEDMASK_USB_ERROR); } +/** Event handler for the library USB Unhandled Control Packet event. */ void EVENT_USB_UnhandledControlPacket(void) { USB_HID_ProcessControlPacket(&Generic_HID_Interface); } +/** ISR to keep track of each millisecond interrupt, for determining the HID class idle period remaining when set. */ ISR(TIMER0_COMPA_vect, ISR_BLOCK) { if (Generic_HID_Interface.IdleMSRemaining) Generic_HID_Interface.IdleMSRemaining--; } +/** HID class driver callback function for the creation of HID reports to the host. + * + * \param HIDInterfaceInfo Pointer to the HID class interface configuration structure being referenced + * \param ReportData Pointer to a buffer where the created report should be stored + * + * \return Number of bytes written in the report (or zero if no report is to be sent + */ uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData) { // Create generic HID report here @@ -114,6 +140,12 @@ uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceI return 0; } +/** HID class driver callback function for the processing of HID reports from the host. + * + * \param HIDInterfaceInfo Pointer to the HID class interface configuration structure being referenced + * \param ReportData Pointer to a buffer where the created report has been stored + * \param ReportSize Size in bytes of the received HID report + */ void CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData, uint16_t ReportSize) { // Process received generic HID report here diff --git a/Demos/Device/GenericHID/GenericHID.h b/Demos/Device/GenericHID/GenericHID.h index 94a09af932..b68dc4c24c 100644 --- a/Demos/Device/GenericHID/GenericHID.h +++ b/Demos/Device/GenericHID/GenericHID.h @@ -52,9 +52,16 @@ #include /* Macros: */ + /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */ #define LEDMASK_USB_NOTREADY LEDS_LED1 + + /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */ #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3) + + /** LED mask for the library LED driver, to indicate that the USB interface is ready. */ #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4) + + /** 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: */ diff --git a/Demos/Device/Joystick/Joystick.c b/Demos/Device/Joystick/Joystick.c index d5c20737d9..66cb808d0f 100644 --- a/Demos/Device/Joystick/Joystick.c +++ b/Demos/Device/Joystick/Joystick.c @@ -28,8 +28,18 @@ this software. */ +/** \file + * + * Main source file for the Joystick demo. This file contains the main tasks of + * the demo and is responsible for the initial application hardware configuration. + */ + #include "Joystick.h" +/** LUFA HID Class driver interface configuration and state information. This structure is + * passed to all HID Class driver functions, so that multiple instances of the same class + * within a device can be differentiated from one another. + */ USB_ClassInfo_HID_t Joystick_HID_Interface = { .InterfaceNumber = 0, @@ -42,6 +52,9 @@ USB_ClassInfo_HID_t Joystick_HID_Interface = .UsingReportProtocol = true, }; +/** Main program entry point. This routine contains the overall program flow, including initial + * setup of all components and the main program loop. + */ int main(void) { SetupHardware(); @@ -55,6 +68,7 @@ int main(void) } } +/** Configures the board hardware and chip peripherals for the demo's functionality. */ void SetupHardware(void) { /* Disable watchdog if enabled by bootloader/fuses */ @@ -77,16 +91,19 @@ void SetupHardware(void) TIMSK0 = (1 << OCIE0A); } +/** Event handler for the library USB Connection event. */ void EVENT_USB_Connect(void) { LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); } +/** Event handler for the library USB Disconnection event. */ void EVENT_USB_Disconnect(void) { LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); } +/** Event handler for the library USB Configuration Changed event. */ void EVENT_USB_ConfigurationChanged(void) { LEDs_SetAllLEDs(LEDMASK_USB_READY); @@ -95,17 +112,26 @@ void EVENT_USB_ConfigurationChanged(void) LEDs_SetAllLEDs(LEDMASK_USB_ERROR); } +/** Event handler for the library USB Unhandled Control Packet event. */ void EVENT_USB_UnhandledControlPacket(void) { USB_HID_ProcessControlPacket(&Joystick_HID_Interface); } +/** ISR to keep track of each millisecond interrupt, for determining the HID class idle period remaining when set. */ ISR(TIMER0_COMPA_vect, ISR_BLOCK) { if (Joystick_HID_Interface.IdleMSRemaining) Joystick_HID_Interface.IdleMSRemaining--; } +/** HID class driver callback function for the creation of HID reports to the host. + * + * \param HIDInterfaceInfo Pointer to the HID class interface configuration structure being referenced + * \param ReportData Pointer to a buffer where the created report should be stored + * + * \return Number of bytes written in the report (or zero if no report is to be sent + */ uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData) { USB_JoystickReport_Data_t* JoystickReport = (USB_JoystickReport_Data_t*)ReportData; @@ -132,6 +158,12 @@ uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceI return sizeof(USB_JoystickReport_Data_t); } +/** HID class driver callback function for the processing of HID reports from the host. + * + * \param HIDInterfaceInfo Pointer to the HID class interface configuration structure being referenced + * \param ReportData Pointer to a buffer where the created report has been stored + * \param ReportSize Size in bytes of the received HID report + */ void CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData, uint16_t ReportSize) { // Unused (but mandatory for the HID class driver) in this demo, since there are no Host->Device reports diff --git a/Demos/Device/Joystick/Joystick.h b/Demos/Device/Joystick/Joystick.h index 164c58ea25..9db357b403 100644 --- a/Demos/Device/Joystick/Joystick.h +++ b/Demos/Device/Joystick/Joystick.h @@ -63,9 +63,16 @@ } USB_JoystickReport_Data_t; /* Macros: */ + /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */ #define LEDMASK_USB_NOTREADY LEDS_LED1 + + /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */ #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3) + + /** LED mask for the library LED driver, to indicate that the USB interface is ready. */ #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4) + + /** 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: */ diff --git a/Demos/Device/Keyboard/Keyboard.c b/Demos/Device/Keyboard/Keyboard.c index d506657a63..923dd71769 100644 --- a/Demos/Device/Keyboard/Keyboard.c +++ b/Demos/Device/Keyboard/Keyboard.c @@ -28,9 +28,19 @@ arising out of or in connection with the use or performance of this software. */ - + +/** \file + * + * 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" +/** LUFA HID Class driver interface configuration and state information. This structure is + * passed to all HID Class driver functions, so that multiple instances of the same class + * within a device can be differentiated from one another. + */ USB_ClassInfo_HID_t Keyboard_HID_Interface = { .InterfaceNumber = 0, @@ -46,6 +56,9 @@ USB_ClassInfo_HID_t Keyboard_HID_Interface = .IdleCount = 500, }; +/** Main program entry point. This routine contains the overall program flow, including initial + * setup of all components and the main program loop. + */ int main(void) { SetupHardware(); @@ -59,6 +72,7 @@ int main(void) } } +/** Configures the board hardware and chip peripherals for the demo's functionality. */ void SetupHardware() { /* Disable watchdog if enabled by bootloader/fuses */ @@ -81,16 +95,19 @@ void SetupHardware() TIMSK0 = (1 << OCIE0A); } +/** Event handler for the library USB Connection event. */ void EVENT_USB_Connect(void) { LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); } +/** Event handler for the library USB Disconnection event. */ void EVENT_USB_Disconnect(void) { LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); } +/** Event handler for the library USB Configuration Changed event. */ void EVENT_USB_ConfigurationChanged(void) { LEDs_SetAllLEDs(LEDMASK_USB_READY); @@ -99,17 +116,26 @@ void EVENT_USB_ConfigurationChanged(void) LEDs_SetAllLEDs(LEDMASK_USB_ERROR); } +/** Event handler for the library USB Unhandled Control Packet event. */ void EVENT_USB_UnhandledControlPacket(void) { USB_HID_ProcessControlPacket(&Keyboard_HID_Interface); } +/** ISR to keep track of each millisecond interrupt, for determining the HID class idle period remaining when set. */ ISR(TIMER0_COMPA_vect, ISR_BLOCK) { if (Keyboard_HID_Interface.IdleMSRemaining) Keyboard_HID_Interface.IdleMSRemaining--; } +/** HID class driver callback function for the creation of HID reports to the host. + * + * \param HIDInterfaceInfo Pointer to the HID class interface configuration structure being referenced + * \param ReportData Pointer to a buffer where the created report should be stored + * + * \return Number of bytes written in the report (or zero if no report is to be sent + */ uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData) { USB_KeyboardReport_Data_t* KeyboardReport = (USB_KeyboardReport_Data_t*)ReportData; @@ -136,6 +162,12 @@ uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceI return sizeof(USB_KeyboardReport_Data_t); } +/** HID class driver callback function for the processing of HID reports from the host. + * + * \param HIDInterfaceInfo Pointer to the HID class interface configuration structure being referenced + * \param ReportData Pointer to a buffer where the created report has been stored + * \param ReportSize Size in bytes of the received HID report + */ void CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData, uint16_t ReportSize) { uint8_t LEDMask = LEDS_NO_LEDS; diff --git a/Demos/Device/Keyboard/Keyboard.h b/Demos/Device/Keyboard/Keyboard.h index 9cfc9aba42..e04ae9e340 100644 --- a/Demos/Device/Keyboard/Keyboard.h +++ b/Demos/Device/Keyboard/Keyboard.h @@ -66,9 +66,16 @@ } USB_KeyboardReport_Data_t; /* Macros: */ + /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */ #define LEDMASK_USB_NOTREADY LEDS_LED1 + + /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */ #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3) + + /** LED mask for the library LED driver, to indicate that the USB interface is ready. */ #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4) + + /** 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: */ diff --git a/Demos/Device/KeyboardMouse/KeyboardMouse.c b/Demos/Device/KeyboardMouse/KeyboardMouse.c index 71a8375aa6..e68a247938 100644 --- a/Demos/Device/KeyboardMouse/KeyboardMouse.c +++ b/Demos/Device/KeyboardMouse/KeyboardMouse.c @@ -28,9 +28,20 @@ arising out of or in connection with the use or performance of this software. */ - + +/** \file + * + * 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" +/** LUFA HID Class driver interface configuration and state information. This structure is + * passed to all HID Class driver functions, so that multiple instances of the same class + * within a device can be differentiated from one another. This is for the keyboard HID + * interface within the device. + */ USB_ClassInfo_HID_t Keyboard_HID_Interface = { .InterfaceNumber = 0, @@ -46,6 +57,11 @@ USB_ClassInfo_HID_t Keyboard_HID_Interface = .IdleCount = 500, }; +/** LUFA HID Class driver interface configuration and state information. This structure is + * passed to all HID Class driver functions, so that multiple instances of the same class + * within a device can be differentiated from one another. This is for the mouse HID + * interface within the device. + */ USB_ClassInfo_HID_t Mouse_HID_Interface = { .InterfaceNumber = 0, @@ -58,7 +74,10 @@ USB_ClassInfo_HID_t Mouse_HID_Interface = .ReportOUTEndpointNumber = 0, .ReportOUTEndpointSize = 0, }; - + +/** Main program entry point. This routine contains the overall program flow, including initial + * setup of all components and the main program loop. + */ int main(void) { SetupHardware(); @@ -73,6 +92,7 @@ int main(void) } } +/** Configures the board hardware and chip peripherals for the demo's functionality. */ void SetupHardware() { /* Disable watchdog if enabled by bootloader/fuses */ @@ -94,16 +114,19 @@ void SetupHardware() TIMSK0 = (1 << OCIE0A); } +/** Event handler for the library USB Connection event. */ void EVENT_USB_Connect(void) { - LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); + LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); } +/** Event handler for the library USB Disconnection event. */ void EVENT_USB_Disconnect(void) { - LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); + LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); } +/** Event handler for the library USB Configuration Changed event. */ void EVENT_USB_ConfigurationChanged(void) { LEDs_SetAllLEDs(LEDMASK_USB_READY); @@ -115,12 +138,14 @@ void EVENT_USB_ConfigurationChanged(void) LEDs_SetAllLEDs(LEDMASK_USB_ERROR); } +/** Event handler for the library USB Unhandled Control Packet event. */ void EVENT_USB_UnhandledControlPacket(void) { USB_HID_ProcessControlPacket(&Keyboard_HID_Interface); USB_HID_ProcessControlPacket(&Mouse_HID_Interface); } +/** ISR to keep track of each millisecond interrupt, for determining the HID class idle period remaining when set. */ ISR(TIMER0_COMPA_vect, ISR_BLOCK) { if (Keyboard_HID_Interface.IdleMSRemaining) @@ -130,6 +155,13 @@ ISR(TIMER0_COMPA_vect, ISR_BLOCK) Mouse_HID_Interface.IdleMSRemaining--; } +/** HID class driver callback function for the creation of HID reports to the host. + * + * \param HIDInterfaceInfo Pointer to the HID class interface configuration structure being referenced + * \param ReportData Pointer to a buffer where the created report should be stored + * + * \return Number of bytes written in the report (or zero if no report is to be sent + */ uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData) { uint8_t JoyStatus_LCL = Joystick_GetStatus(); @@ -183,6 +215,12 @@ uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceI } } +/** HID class driver callback function for the processing of HID reports from the host. + * + * \param HIDInterfaceInfo Pointer to the HID class interface configuration structure being referenced + * \param ReportData Pointer to a buffer where the created report has been stored + * \param ReportSize Size in bytes of the received HID report + */ void CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData, uint16_t ReportSize) { if (HIDInterfaceInfo == &Keyboard_HID_Interface) diff --git a/Demos/Device/KeyboardMouse/KeyboardMouse.h b/Demos/Device/KeyboardMouse/KeyboardMouse.h index c18c6e1af4..9afe7646bc 100644 --- a/Demos/Device/KeyboardMouse/KeyboardMouse.h +++ b/Demos/Device/KeyboardMouse/KeyboardMouse.h @@ -49,9 +49,16 @@ #include /* Macros: */ + /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */ #define LEDMASK_USB_NOTREADY LEDS_LED1 + + /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */ #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3) + + /** LED mask for the library LED driver, to indicate that the USB interface is ready. */ #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4) + + /** 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: */ diff --git a/Demos/Device/MIDI/Descriptors.c b/Demos/Device/MIDI/Descriptors.c index 2007858dd3..6973a4caa0 100644 --- a/Demos/Device/MIDI/Descriptors.c +++ b/Demos/Device/MIDI/Descriptors.c @@ -145,7 +145,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor = .Header = {.Size = sizeof(USB_MIDI_In_Jack_t), .Type = DTYPE_AudioInterface}, .Subtype = DSUBTYPE_InputJack, - .JackType = JACKTYPE_EMBEDDED, + .JackType = MIDI_JACKTYPE_EMBEDDED, .JackID = 0x01, .JackStrIndex = NO_DESCRIPTOR @@ -156,7 +156,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor = .Header = {.Size = sizeof(USB_MIDI_In_Jack_t), .Type = DTYPE_AudioInterface}, .Subtype = DSUBTYPE_InputJack, - .JackType = JACKTYPE_EXTERNAL, + .JackType = MIDI_JACKTYPE_EXTERNAL, .JackID = 0x02, .JackStrIndex = NO_DESCRIPTOR @@ -167,7 +167,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor = .Header = {.Size = sizeof(USB_MIDI_Out_Jack_t), .Type = DTYPE_AudioInterface}, .Subtype = DSUBTYPE_OutputJack, - .JackType = JACKTYPE_EMBEDDED, + .JackType = MIDI_JACKTYPE_EMBEDDED, .JackID = 0x03, .NumberOfPins = 1, @@ -182,7 +182,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor = .Header = {.Size = sizeof(USB_MIDI_Out_Jack_t), .Type = DTYPE_AudioInterface}, .Subtype = DSUBTYPE_OutputJack, - .JackType = JACKTYPE_EXTERNAL, + .JackType = MIDI_JACKTYPE_EXTERNAL, .JackID = 0x04, .NumberOfPins = 1, diff --git a/Demos/Device/MIDI/MIDI.c b/Demos/Device/MIDI/MIDI.c index 1fee34705e..4fef047541 100644 --- a/Demos/Device/MIDI/MIDI.c +++ b/Demos/Device/MIDI/MIDI.c @@ -28,19 +28,32 @@ this software. */ +/** \file + * + * Main source file for the MIDI demo. This file contains the main tasks of + * the demo and is responsible for the initial application hardware configuration. + */ + #include "MIDI.h" +/** LUFA MIDI Class driver interface configuration and state information. This structure is + * passed to all MIDI Class driver functions, so that multiple instances of the same class + * within a device can be differentiated from one another. + */ USB_ClassInfo_MIDI_t Keyboard_MIDI_Interface = { - .InterfaceNumber = 0, + .StreamingInterfaceNumber = 1, - .DataINEndpointNumber = MIDI_STREAM_IN_EPNUM, - .DataINEndpointSize = MIDI_STREAM_EPSIZE, + .DataINEndpointNumber = MIDI_STREAM_IN_EPNUM, + .DataINEndpointSize = MIDI_STREAM_EPSIZE, - .DataOUTEndpointNumber = MIDI_STREAM_OUT_EPNUM, - .DataOUTEndpointSize = MIDI_STREAM_EPSIZE, + .DataOUTEndpointNumber = MIDI_STREAM_OUT_EPNUM, + .DataOUTEndpointSize = MIDI_STREAM_EPSIZE, }; - + +/** Main program entry point. This routine contains the overall program flow, including initial + * setup of all components and the main program loop. + */ int main(void) { SetupHardware(); @@ -55,6 +68,7 @@ int main(void) } } +/** Configures the board hardware and chip peripherals for the demo's functionality. */ void SetupHardware(void) { /* Disable watchdog if enabled by bootloader/fuses */ @@ -71,6 +85,7 @@ void SetupHardware(void) USB_Init(); } +/** Checks for changes in the position of the board joystick, sending MIDI events to the host upon each change. */ void CheckJoystickMovement(void) { static uint8_t PrevJoystickStatus; @@ -133,16 +148,19 @@ void CheckJoystickMovement(void) PrevJoystickStatus = JoystickStatus; } +/** Event handler for the library USB Connection event. */ void EVENT_USB_Connect(void) { LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); } +/** Event handler for the library USB Disconnection event. */ void EVENT_USB_Disconnect(void) { LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); } +/** Event handler for the library USB Configuration Changed event. */ void EVENT_USB_ConfigurationChanged(void) { LEDs_SetAllLEDs(LEDMASK_USB_READY); diff --git a/Demos/Device/MIDI/MIDI.h b/Demos/Device/MIDI/MIDI.h index 10d8d3366f..913b318f73 100644 --- a/Demos/Device/MIDI/MIDI.h +++ b/Demos/Device/MIDI/MIDI.h @@ -53,9 +53,16 @@ #include /* Macros: */ + /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */ #define LEDMASK_USB_NOTREADY LEDS_LED1 + + /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */ #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3) + + /** LED mask for the library LED driver, to indicate that the USB interface is ready. */ #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4) + + /** 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: */ diff --git a/Demos/Device/MassStorage/MassStorage.c b/Demos/Device/MassStorage/MassStorage.c index 8e2b9f4500..5dbc4a2cc3 100644 --- a/Demos/Device/MassStorage/MassStorage.c +++ b/Demos/Device/MassStorage/MassStorage.c @@ -28,8 +28,18 @@ this software. */ +/** \file + * + * Main source file for the MassStorage demo. This file contains the main tasks of + * the demo and is responsible for the initial application hardware configuration. + */ + #include "MassStorage.h" +/** LUFA Mass Storage Class driver interface configuration and state information. This structure is + * passed to all Mass Storage Class driver functions, so that multiple instances of the same class + * within a device can be differentiated from one another. + */ USB_ClassInfo_MS_t Disk_MS_Interface = { .InterfaceNumber = 0, @@ -43,6 +53,9 @@ USB_ClassInfo_MS_t Disk_MS_Interface = .TotalLUNs = TOTAL_LUNS, }; +/** Main program entry point. This routine contains the overall program flow, including initial + * setup of all components and the main program loop. + */ int main(void) { SetupHardware(); @@ -56,6 +69,7 @@ int main(void) } } +/** Configures the board hardware and chip peripherals for the demo's functionality. */ void SetupHardware(void) { /* Disable watchdog if enabled by bootloader/fuses */ @@ -74,16 +88,19 @@ void SetupHardware(void) DataflashManager_ResetDataflashProtections(); } +/** Event handler for the library USB Connection event. */ void EVENT_USB_Connect(void) { LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); } +/** Event handler for the library USB Disconnection event. */ void EVENT_USB_Disconnect(void) { LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); } +/** Event handler for the library USB Configuration Changed event. */ void EVENT_USB_ConfigurationChanged(void) { LEDs_SetAllLEDs(LEDMASK_USB_READY); @@ -92,11 +109,16 @@ void EVENT_USB_ConfigurationChanged(void) LEDs_SetAllLEDs(LEDMASK_USB_ERROR); } +/** Event handler for the library USB Unhandled Control Packet event. */ void EVENT_USB_UnhandledControlPacket(void) { USB_MS_ProcessControlPacket(&Disk_MS_Interface); } +/** Mass Storage class driver callback function the reception of SCSI commands from the host, which must be processed. + * + * \param MSInterfaceInfo Pointer to the Mass Storage class interface configuration structure being referenced + */ bool CALLBACK_USB_MS_SCSICommandReceived(USB_ClassInfo_MS_t* MSInterfaceInfo) { bool CommandSuccess; diff --git a/Demos/Device/MassStorage/MassStorage.h b/Demos/Device/MassStorage/MassStorage.h index a50edac990..50a77250d7 100644 --- a/Demos/Device/MassStorage/MassStorage.h +++ b/Demos/Device/MassStorage/MassStorage.h @@ -54,12 +54,22 @@ #include /* Macros: */ + /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */ #define LEDMASK_USB_NOTREADY LEDS_LED1 + + /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */ #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3) + + /** LED mask for the library LED driver, to indicate that the USB interface is ready. */ #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4) + + /** 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) - #define LEDMASK_USB_BUSY LEDS_LED2 + + /** LED mask for the library LED driver, to indicate that the USB interface is busy. */ + #define LEDMASK_USB_BUSY (LEDS_LED2) + /** Total number of logical drives within the device - must be non-zero. */ #define TOTAL_LUNS 2 /** Blocks in each LUN, calculated from the total capacity divided by the total number of Logical Units in the device. */ diff --git a/Demos/Device/Mouse/Mouse.c b/Demos/Device/Mouse/Mouse.c index 01ead0012d..1bc62dac69 100644 --- a/Demos/Device/Mouse/Mouse.c +++ b/Demos/Device/Mouse/Mouse.c @@ -27,9 +27,19 @@ arising out of or in connection with the use or performance of this software. */ - + +/** \file + * + * 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" +/** LUFA HID Class driver interface configuration and state information. This structure is + * passed to all HID Class driver functions, so that multiple instances of the same class + * within a device can be differentiated from one another. + */ USB_ClassInfo_HID_t Mouse_HID_Interface = { .InterfaceNumber = 0, @@ -40,6 +50,9 @@ USB_ClassInfo_HID_t Mouse_HID_Interface = .ReportINBufferSize = sizeof(USB_MouseReport_Data_t), }; +/** Main program entry point. This routine contains the overall program flow, including initial + * setup of all components and the main program loop. + */ int main(void) { SetupHardware(); @@ -53,6 +66,7 @@ int main(void) } } +/** Configures the board hardware and chip peripherals for the demo's functionality. */ void SetupHardware(void) { /* Disable watchdog if enabled by bootloader/fuses */ @@ -75,16 +89,19 @@ void SetupHardware(void) TIMSK0 = (1 << OCIE0A); } +/** Event handler for the library USB Connection event. */ void EVENT_USB_Connect(void) { - LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); + LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); } +/** Event handler for the library USB Disconnection event. */ void EVENT_USB_Disconnect(void) { - LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); + LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); } +/** Event handler for the library USB Configuration Changed event. */ void EVENT_USB_ConfigurationChanged(void) { LEDs_SetAllLEDs(LEDMASK_USB_READY); @@ -93,17 +110,26 @@ void EVENT_USB_ConfigurationChanged(void) LEDs_SetAllLEDs(LEDMASK_USB_ERROR); } +/** Event handler for the library USB Unhandled Control Packet event. */ void EVENT_USB_UnhandledControlPacket(void) { USB_HID_ProcessControlPacket(&Mouse_HID_Interface); } +/** ISR to keep track of each millisecond interrupt, for determining the HID class idle period remaining when set. */ ISR(TIMER0_COMPA_vect, ISR_BLOCK) { if (Mouse_HID_Interface.IdleMSRemaining) Mouse_HID_Interface.IdleMSRemaining--; } +/** HID class driver callback function for the creation of HID reports to the host. + * + * \param HIDInterfaceInfo Pointer to the HID class interface configuration structure being referenced + * \param ReportData Pointer to a buffer where the created report should be stored + * + * \return Number of bytes written in the report (or zero if no report is to be sent + */ uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData) { USB_MouseReport_Data_t* MouseReport = (USB_MouseReport_Data_t*)ReportData; @@ -130,6 +156,12 @@ uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceI return sizeof(USB_MouseReport_Data_t); } +/** HID class driver callback function for the processing of HID reports from the host. + * + * \param HIDInterfaceInfo Pointer to the HID class interface configuration structure being referenced + * \param ReportData Pointer to a buffer where the created report has been stored + * \param ReportSize Size in bytes of the received HID report + */ void CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData, uint16_t ReportSize) { // Unused (but mandatory for the HID class driver) in this demo, since there are no Host->Device reports diff --git a/Demos/Device/Mouse/Mouse.h b/Demos/Device/Mouse/Mouse.h index 9134e6772a..62d6d83236 100644 --- a/Demos/Device/Mouse/Mouse.h +++ b/Demos/Device/Mouse/Mouse.h @@ -65,9 +65,16 @@ } USB_MouseReport_Data_t; /* Macros: */ + /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */ #define LEDMASK_USB_NOTREADY LEDS_LED1 + + /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */ #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3) + + /** LED mask for the library LED driver, to indicate that the USB interface is ready. */ #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4) + + /** 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: */ diff --git a/Demos/Device/RNDISEthernet/RNDISEthernet.c b/Demos/Device/RNDISEthernet/RNDISEthernet.c index 3246cd8bc8..7c857197fc 100644 --- a/Demos/Device/RNDISEthernet/RNDISEthernet.c +++ b/Demos/Device/RNDISEthernet/RNDISEthernet.c @@ -28,8 +28,18 @@ this software. */ +/** \file + * + * Main source file for the RNDISEthernet demo. This file contains the main tasks of + * the demo and is responsible for the initial application hardware configuration. + */ + #include "RNDISEthernet.h" +/** LUFA RNDIS Class driver interface configuration and state information. This structure is + * passed to all RNDIS Class driver functions, so that multiple instances of the same class + * within a device can be differentiated from one another. + */ USB_ClassInfo_RNDIS_t Ethernet_RNDIS_Interface = { .ControlInterfaceNumber = 0, @@ -46,13 +56,19 @@ USB_ClassInfo_RNDIS_t Ethernet_RNDIS_Interface = .AdapterVendorDescription = "LUFA RNDIS Demo Adapter", .AdapterMACAddress = {ADAPTER_MAC_ADDRESS}, }; - + +/** Main program entry point. This routine contains the overall program flow, including initial + * setup of all components and the main program loop. + */ int main(void) { SetupHardware(); LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); + TCP_Init(); + Webserver_Init(); + printf_P(PSTR("\r\n\r\n****** RNDIS Demo running. ******\r\n")); for (;;) @@ -71,6 +87,7 @@ int main(void) } } +/** Configures the board hardware and chip peripherals for the demo's functionality. */ void SetupHardware(void) { /* Disable watchdog if enabled by bootloader/fuses */ @@ -84,22 +101,21 @@ void SetupHardware(void) LEDs_Init(); SerialStream_Init(9600, false); USB_Init(); - - /* Initialize TCP and Webserver modules */ - TCP_Init(); - Webserver_Init(); } +/** Event handler for the library USB Connection event. */ void EVENT_USB_Connect(void) { - LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); + LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); } +/** Event handler for the library USB Disconnection event. */ void EVENT_USB_Disconnect(void) { - LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); + LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); } +/** Event handler for the library USB Configuration Changed event. */ void EVENT_USB_ConfigurationChanged(void) { LEDs_SetAllLEDs(LEDMASK_USB_READY); @@ -108,6 +124,7 @@ void EVENT_USB_ConfigurationChanged(void) LEDs_SetAllLEDs(LEDMASK_USB_ERROR); } +/** Event handler for the library USB Unhandled Control Packet event. */ void EVENT_USB_UnhandledControlPacket(void) { USB_RNDIS_ProcessControlPacket(&Ethernet_RNDIS_Interface); diff --git a/Demos/Device/RNDISEthernet/RNDISEthernet.h b/Demos/Device/RNDISEthernet/RNDISEthernet.h index f0247ce810..f0ba75a3d1 100644 --- a/Demos/Device/RNDISEthernet/RNDISEthernet.h +++ b/Demos/Device/RNDISEthernet/RNDISEthernet.h @@ -58,11 +58,20 @@ #include /* Macros: */ + /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */ #define LEDMASK_USB_NOTREADY LEDS_LED1 + + /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */ #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3) + + /** LED mask for the library LED driver, to indicate that the USB interface is ready. */ #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4) + + /** 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) - #define LEDMASK_USB_BUSY LEDS_LED2 + + /** LED mask for the library LED driver, to indicate that the USB interface is busy. */ + #define LEDMASK_USB_BUSY (LEDS_LED2) /* Function Prototypes: */ void SetupHardware(void); diff --git a/Demos/Device/USBtoSerial/USBtoSerial.c b/Demos/Device/USBtoSerial/USBtoSerial.c index 7c89278ef7..85826c2b34 100644 --- a/Demos/Device/USBtoSerial/USBtoSerial.c +++ b/Demos/Device/USBtoSerial/USBtoSerial.c @@ -28,11 +28,24 @@ this software. */ +/** \file + * + * Main source file for the USBtoSerial demo. This file contains the main tasks of + * the demo and is responsible for the initial application hardware configuration. + */ + #include "USBtoSerial.h" +/** Circular buffer to hold data from the host before it is sent to the device via the serial port. */ RingBuff_t Rx_Buffer; + +/** Circular buffer to hold data from the serial port before it is sent to the host. */ RingBuff_t Tx_Buffer; +/** LUFA CDC Class driver interface configuration and state information. This structure is + * passed to all CDC Class driver functions, so that multiple instances of the same class + * within a device can be differentiated from one another. + */ USB_ClassInfo_CDC_t VirtualSerial_CDC_Interface = { .ControlInterfaceNumber = 0, @@ -47,6 +60,9 @@ USB_ClassInfo_CDC_t VirtualSerial_CDC_Interface = .NotificationEndpointSize = CDC_NOTIFICATION_EPSIZE, }; +/** Main program entry point. This routine contains the overall program flow, including initial + * setup of all components and the main program loop. + */ int main(void) { SetupHardware(); @@ -77,6 +93,7 @@ int main(void) } } +/** Configures the board hardware and chip peripherals for the demo's functionality. */ void SetupHardware(void) { /* Disable watchdog if enabled by bootloader/fuses */ @@ -92,16 +109,19 @@ void SetupHardware(void) USB_Init(); } +/** Event handler for the library USB Connection event. */ void EVENT_USB_Connect(void) { LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); } +/** Event handler for the library USB Disconnection event. */ void EVENT_USB_Disconnect(void) { LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); } +/** Event handler for the library USB Configuration Changed event. */ void EVENT_USB_ConfigurationChanged(void) { LEDs_SetAllLEDs(LEDMASK_USB_READY); @@ -110,27 +130,35 @@ void EVENT_USB_ConfigurationChanged(void) LEDs_SetAllLEDs(LEDMASK_USB_ERROR); } +/** Event handler for the library USB Unhandled Control Packet event. */ void EVENT_USB_UnhandledControlPacket(void) { USB_CDC_ProcessControlPacket(&VirtualSerial_CDC_Interface); } +/** ISR to manage the reception of data from the serial port, placing received bytes into a circular buffer + * for later transmission to the host. + */ ISR(USART1_RX_vect, ISR_BLOCK) { if (USB_IsConnected) Buffer_StoreElement(&Tx_Buffer, UDR1); } +/** Event handler for the CDC Class driver Line Encoding Changed event. + * + * \param CDCInterfaceInfo Pointer to the CDC class interface configuration structure being referenced + */ void EVENT_USB_CDC_LineEncodingChanged(USB_ClassInfo_CDC_t* CDCInterfaceInfo) { uint8_t ConfigMask = 0; - if (CDCInterfaceInfo->LineEncoding.ParityType == Parity_Odd) + if (CDCInterfaceInfo->LineEncoding.ParityType == CDC_PARITY_Odd) ConfigMask = ((1 << UPM11) | (1 << UPM10)); - else if (CDCInterfaceInfo->LineEncoding.ParityType == Parity_Even) + else if (CDCInterfaceInfo->LineEncoding.ParityType == CDC_PARITY_Even) ConfigMask = (1 << UPM11); - if (CDCInterfaceInfo->LineEncoding.CharFormat == TwoStopBits) + if (CDCInterfaceInfo->LineEncoding.CharFormat == CDC_LINEENCODING_TwoStopBits) ConfigMask |= (1 << USBS1); if (CDCInterfaceInfo->LineEncoding.DataBits == 6) diff --git a/Demos/Device/USBtoSerial/USBtoSerial.h b/Demos/Device/USBtoSerial/USBtoSerial.h index bc8d983988..9660381bb0 100644 --- a/Demos/Device/USBtoSerial/USBtoSerial.h +++ b/Demos/Device/USBtoSerial/USBtoSerial.h @@ -54,9 +54,16 @@ #include /* Macros: */ + /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */ #define LEDMASK_USB_NOTREADY LEDS_LED1 + + /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */ #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3) + + /** LED mask for the library LED driver, to indicate that the USB interface is ready. */ #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4) + + /** 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: */ diff --git a/LUFA/ChangeLog.txt b/LUFA/ChangeLog.txt index 67f88b9a3c..529cac40c8 100644 --- a/LUFA/ChangeLog.txt +++ b/LUFA/ChangeLog.txt @@ -6,10 +6,10 @@ ========== TODO: =========== - Document new class drivers - - Re-document all demos now that they have changed - Add standardized descriptor names to class driver structures, controlled by USE_NONSTANDARD_DESCRIPTOR_NAMES - - Add C++ compatibility to class drivers - Disable JTAG in demos + - Convert Host mode demos to class drivers + - Remake AVRStudio projects to reflect file structure changes ============================ /** \page Page_ChangeLog Project Changelog diff --git a/LUFA/CompileTimeTokens.txt b/LUFA/CompileTimeTokens.txt index 718fa8f530..dcb5816de5 100644 --- a/LUFA/CompileTimeTokens.txt +++ b/LUFA/CompileTimeTokens.txt @@ -20,19 +20,6 @@ * this token is defined, all ANSI control codes in the application code from the TerminalCodes.h header are removed from * the source code at compile time. * - * NUM_BLOCKS - ( \ref Group_MemoryAllocator ) \n - * Sets the number of allocable blocks in the pseudo-heap of the dynamic memory allocation driver. This should be - * defined as a constant larger than zero. - * - * BLOCK_SIZE - ( \ref Group_MemoryAllocator ) \n - * Sets the size of each allocable block in the pseudo-heap of the dynamic memory allocation driver. This should be - * defined as a constant larger than zero. - * - * NUM_HANDLES - ( \ref Group_MemoryAllocator ) \n - * Sets the maximum number of managed memory handles which can be handed out by the dynamic memory allocation driver - * simultaneously, before a handle (and its associated allocated memory) must be freed. - * - * * \section Sec_SummaryUSBClassTokens USB Class Driver Related Tokens * This section describes compile tokens which affect USB class-specific drivers in the LUFA library. * diff --git a/LUFA/Drivers/USB/Class/Device/Audio.c b/LUFA/Drivers/USB/Class/Device/Audio.c index d9162ff2d2..acd9f6956a 100644 --- a/LUFA/Drivers/USB/Class/Device/Audio.c +++ b/LUFA/Drivers/USB/Class/Device/Audio.c @@ -35,7 +35,7 @@ void USB_Audio_ProcessControlPacket(USB_ClassInfo_Audio_t* AudioInterfaceInfo) if (!(Endpoint_IsSETUPReceived())) return; - if (USB_ControlRequest.wIndex != AudioInterfaceInfo->InterfaceNumber) + if (USB_ControlRequest.wIndex != AudioInterfaceInfo->StreamingInterfaceNumber) return; switch (USB_ControlRequest.bRequest) diff --git a/LUFA/Drivers/USB/Class/Device/Audio.h b/LUFA/Drivers/USB/Class/Device/Audio.h index 0ea74864a4..f92b9ab91e 100644 --- a/LUFA/Drivers/USB/Class/Device/Audio.h +++ b/LUFA/Drivers/USB/Class/Device/Audio.h @@ -36,6 +36,11 @@ #include + /* Enable C linkage for C++ Compilers: */ + #if defined(__cplusplus) + extern "C" { + #endif + /* Macros: */ /** Descriptor header constant to indicate a Audio class interface descriptor. */ #define DTYPE_AudioInterface 0x24 @@ -120,7 +125,7 @@ * * \param freq Required audio sampling frequency in HZ */ - #define SAMPLE_FREQ(freq) {LowWord: ((uint32_t)freq & 0x00FFFF), HighByte: (((uint32_t)freq >> 16) & 0x0000FF)} + #define AUDIO_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. @@ -277,7 +282,7 @@ typedef struct { - uint8_t InterfaceNumber; + uint8_t StreamingInterfaceNumber; uint8_t DataINEndpointNumber; uint16_t DataINEndpointSize; @@ -301,4 +306,10 @@ void USB_Audio_WriteSample24(int32_t Sample); bool USB_Audio_IsSampleReceived(USB_ClassInfo_Audio_t* AudioInterfaceInfo); bool USB_Audio_IsReadyForNextSample(USB_ClassInfo_Audio_t* AudioInterfaceInfo); + + /* Disable C linkage for C++ Compilers: */ + #if defined(__cplusplus) + } + #endif + #endif diff --git a/LUFA/Drivers/USB/Class/Device/CDC.h b/LUFA/Drivers/USB/Class/Device/CDC.h index bbe1c9838d..b1d7c6dda8 100644 --- a/LUFA/Drivers/USB/Class/Device/CDC.h +++ b/LUFA/Drivers/USB/Class/Device/CDC.h @@ -36,66 +36,71 @@ #include + /* Enable C linkage for C++ Compilers: */ + #if defined(__cplusplus) + extern "C" { + #endif + /* Macros: */ /** CDC Class specific request to get the current virtual serial port configuration settings. */ - #define REQ_GetLineEncoding 0x21 + #define REQ_GetLineEncoding 0x21 /** CDC Class specific request to set the current virtual serial port configuration settings. */ - #define REQ_SetLineEncoding 0x20 + #define REQ_SetLineEncoding 0x20 /** CDC Class specific request to set the current virtual serial port handshake line states. */ - #define REQ_SetControlLineState 0x22 + #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 * notification endpoint. */ - #define NOTIF_SerialState 0x20 + #define NOTIF_SerialState 0x20 /** Mask for the DTR handshake line for use with the REQ_SetControlLineState class specific request * from the host, to indicate that the DTR line state should be high. */ - #define CONTROL_LINE_OUT_DTR (1 << 0) + #define CDC_CONTROL_LINE_OUT_DTR (1 << 0) /** Mask for the RTS handshake line for use with the REQ_SetControlLineState class specific request * from the host, to indicate that theRTS line state should be high. */ - #define CONTROL_LINE_OUT_RTS (1 << 1) + #define CDC_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. */ - #define CONTROL_LINE_IN_DCD (1 << 0) + #define CDC_CONTROL_LINE_IN_DCD (1 << 0) /** Mask for the DSR handshake line for use with the a NOTIF_SerialState class specific notification * from the device to the host, to indicate that the DSR line state is currently high. */ - #define CONTROL_LINE_IN_DSR (1 << 1) + #define CDC_CONTROL_LINE_IN_DSR (1 << 1) /** Mask for the BREAK handshake line for use with the a NOTIF_SerialState class specific notification * from the device to the host, to indicate that the BREAK line state is currently high. */ - #define CONTROL_LINE_IN_BREAK (1 << 2) + #define CDC_CONTROL_LINE_IN_BREAK (1 << 2) /** Mask for the RING handshake line for use with the a NOTIF_SerialState class specific notification * from the device to the host, to indicate that the RING line state is currently high. */ - #define CONTROL_LINE_IN_RING (1 << 3) + #define CDC_CONTROL_LINE_IN_RING (1 << 3) /** Mask for use with the a NOTIF_SerialState class specific notification from the device to the host, * to indicate that a framing error has occurred on the virtual serial port. */ - #define CONTROL_LINE_IN_FRAMEERROR (1 << 4) + #define CDC_CONTROL_LINE_IN_FRAMEERROR (1 << 4) /** Mask for use with the a NOTIF_SerialState class specific notification from the device to the host, * to indicate that a parity error has occurred on the virtual serial port. */ - #define CONTROL_LINE_IN_PARITYERROR (1 << 5) + #define CDC_CONTROL_LINE_IN_PARITYERROR (1 << 5) /** Mask for use with the a NOTIF_SerialState class specific notification from the device to the host, * to indicate that a data overrun error has occurred on the virtual serial port. */ - #define CONTROL_LINE_IN_OVERRUNERROR (1 << 6) + #define CDC_CONTROL_LINE_IN_OVERRUNERROR (1 << 6) /** Macro to define a CDC class-specific functional descriptor. CDC functional descriptors have a * uniform structure but variable sized data payloads, thus cannot be represented accurately by @@ -116,19 +121,19 @@ /** Enum for the possible line encoding formats of a virtual serial port. */ enum CDCDevice_CDC_LineCodingFormats_t { - OneStopBit = 0, /**< Each frame contains one stop bit */ - OneAndAHalfStopBits = 1, /**< Each frame contains one and a half stop bits */ - TwoStopBits = 2, /**< Each frame contains two stop bits */ + CDC_LINEENCODING_OneStopBit = 0, /**< Each frame contains one stop bit */ + CDC_LINEENCODING_OneAndAHalfStopBits = 1, /**< Each frame contains one and a half stop bits */ + CDC_LINEENCODING_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 { - Parity_None = 0, /**< No parity bit mode on each frame */ - Parity_Odd = 1, /**< Odd parity bit mode on each frame */ - Parity_Even = 2, /**< Even parity bit mode on each frame */ - Parity_Mark = 3, /**< Mark parity bit mode on each frame */ - Parity_Space = 4, /**< Space parity bit mode on each frame */ + CDC_PARITY_None = 0, /**< No parity bit mode on each frame */ + CDC_PARITY_Odd = 1, /**< Odd parity bit mode on each frame */ + CDC_PARITY_Even = 2, /**< Even parity bit mode on each frame */ + CDC_PARITY_Mark = 3, /**< Mark parity bit mode on each frame */ + CDC_PARITY_Space = 4, /**< Space parity bit mode on each frame */ }; /* Type Defines: */ @@ -171,7 +176,6 @@ void EVENT_USB_CDC_ControLineStateChanged(void) ATTR_WEAK ATTR_ALIAS(USB_CDC_Event_Stub);; #endif - void USB_CDC_USBTask(USB_ClassInfo_CDC_t* CDCInterfaceInfo); bool USB_CDC_ConfigureEndpoints(USB_ClassInfo_CDC_t* CDCInterfaceInfo); void USB_CDC_ProcessControlPacket(USB_ClassInfo_CDC_t* CDCInterfaceInfo); void USB_CDC_USBTask(USB_ClassInfo_CDC_t* CDCInterfaceInfo); @@ -184,5 +188,10 @@ uint16_t USB_CDC_BytesReceived(USB_ClassInfo_CDC_t* CDCInterfaceInfo); uint8_t USB_CDC_ReceiveByte(USB_ClassInfo_CDC_t* CDCInterfaceInfo); void USB_CDC_SendSerialLineStateChanged(USB_ClassInfo_CDC_t* CDCInterfaceInfo, uint16_t LineStateMask); + + /* Disable C linkage for C++ Compilers: */ + #if defined(__cplusplus) + } + #endif #endif diff --git a/LUFA/Drivers/USB/Class/Device/HID.h b/LUFA/Drivers/USB/Class/Device/HID.h index 4501fcb1c6..9a2f803a4a 100644 --- a/LUFA/Drivers/USB/Class/Device/HID.h +++ b/LUFA/Drivers/USB/Class/Device/HID.h @@ -36,6 +36,11 @@ #include + /* Enable C linkage for C++ Compilers: */ + #if defined(__cplusplus) + extern "C" { + #endif + /* Macros: */ /** HID Class Specific Request to get the current HID report from the device. */ #define REQ_GetReport 0x01 @@ -111,4 +116,9 @@ uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData); void CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData, uint16_t ReportSize); + /* Disable C linkage for C++ Compilers: */ + #if defined(__cplusplus) + } + #endif + #endif diff --git a/LUFA/Drivers/USB/Class/Device/MIDI.h b/LUFA/Drivers/USB/Class/Device/MIDI.h index 17823938c0..890d3bb55a 100644 --- a/LUFA/Drivers/USB/Class/Device/MIDI.h +++ b/LUFA/Drivers/USB/Class/Device/MIDI.h @@ -37,6 +37,11 @@ #include + /* Enable C linkage for C++ Compilers: */ + #if defined(__cplusplus) + extern "C" { + #endif + /* Macros: */ /** Audio class descriptor subtype value for a Audio class specific MIDI input jack descriptor. */ #define DSUBTYPE_InputJack 0x02 @@ -45,10 +50,10 @@ #define DSUBTYPE_OutputJack 0x03 /** Audio class descriptor jack type value for an embedded (logical) MIDI input or output jack. */ - #define JACKTYPE_EMBEDDED 0x01 + #define MIDI_JACKTYPE_EMBEDDED 0x01 /** Audio class descriptor jack type value for an external (physical) MIDI input or output jack. */ - #define JACKTYPE_EXTERNAL 0x02 + #define MIDI_JACKTYPE_EXTERNAL 0x02 /** MIDI command for a note on (activation) event */ #define MIDI_COMMAND_NOTE_ON 0x09 @@ -137,7 +142,7 @@ typedef struct { - uint8_t InterfaceNumber; + uint8_t StreamingInterfaceNumber; uint8_t DataINEndpointNumber; uint16_t DataINEndpointSize; @@ -155,4 +160,9 @@ void USB_MIDI_SendEventPacket(USB_ClassInfo_MIDI_t* MIDIInterfaceInfo, USB_MIDI_EventPacket_t* Event); bool USB_MIDI_ReceiveEventPacket(USB_ClassInfo_MIDI_t* MIDIInterfaceInfo, USB_MIDI_EventPacket_t* Event); + /* Disable C linkage for C++ Compilers: */ + #if defined(__cplusplus) + } + #endif + #endif diff --git a/LUFA/Drivers/USB/Class/Device/MassStorage.c b/LUFA/Drivers/USB/Class/Device/MassStorage.c index 1c41f6046d..62c5f04079 100644 --- a/LUFA/Drivers/USB/Class/Device/MassStorage.c +++ b/LUFA/Drivers/USB/Class/Device/MassStorage.c @@ -102,16 +102,16 @@ void USB_MS_USBTask(USB_ClassInfo_MS_t* MSInterfaceInfo) { if (USB_MS_ReadInCommandBlock(MSInterfaceInfo)) { - if (MSInterfaceInfo->CommandBlock.Flags & COMMAND_DIRECTION_DATA_IN) + if (MSInterfaceInfo->CommandBlock.Flags & MS_COMMAND_DIR_DATA_IN) Endpoint_SelectEndpoint(MSInterfaceInfo->DataINEndpointNumber); MSInterfaceInfo->CommandStatus.Status = CALLBACK_USB_MS_SCSICommandReceived(MSInterfaceInfo) ? - Command_Pass : Command_Fail; - MSInterfaceInfo->CommandStatus.Signature = CSW_SIGNATURE; + SCSI_Command_Pass : SCSI_Command_Fail; + MSInterfaceInfo->CommandStatus.Signature = MS_CSW_SIGNATURE; MSInterfaceInfo->CommandStatus.Tag = MSInterfaceInfo->CommandBlock.Tag; MSInterfaceInfo->CommandStatus.DataTransferResidue = MSInterfaceInfo->CommandBlock.DataTransferLength; - if ((MSInterfaceInfo->CommandStatus.Status == Command_Fail) && (MSInterfaceInfo->CommandStatus.DataTransferResidue)) + if ((MSInterfaceInfo->CommandStatus.Status == SCSI_Command_Fail) && (MSInterfaceInfo->CommandStatus.DataTransferResidue)) Endpoint_StallTransaction(); USB_MS_ReturnCommandStatus(MSInterfaceInfo); @@ -138,12 +138,12 @@ static bool USB_MS_ReadInCommandBlock(USB_ClassInfo_MS_t* MSInterfaceInfo) CallbackMSInterfaceInfo = MSInterfaceInfo; Endpoint_Read_Stream_LE(&MSInterfaceInfo->CommandBlock, - (sizeof(CommandBlockWrapper_t) - MAX_SCSI_COMMAND_LENGTH), + (sizeof(CommandBlockWrapper_t) - 16), StreamCallback_AbortOnMassStoreReset); - if ((MSInterfaceInfo->CommandBlock.Signature != CBW_SIGNATURE) || + if ((MSInterfaceInfo->CommandBlock.Signature != MS_CBW_SIGNATURE) || (MSInterfaceInfo->CommandBlock.LUN >= MSInterfaceInfo->TotalLUNs) || - (MSInterfaceInfo->CommandBlock.SCSICommandLength > MAX_SCSI_COMMAND_LENGTH)) + (MSInterfaceInfo->CommandBlock.SCSICommandLength > 16)) { Endpoint_StallTransaction(); Endpoint_SelectEndpoint(MSInterfaceInfo->DataINEndpointNumber); diff --git a/LUFA/Drivers/USB/Class/Device/MassStorage.h b/LUFA/Drivers/USB/Class/Device/MassStorage.h index c1874b218e..cf2b5749ab 100644 --- a/LUFA/Drivers/USB/Class/Device/MassStorage.h +++ b/LUFA/Drivers/USB/Class/Device/MassStorage.h @@ -36,27 +36,29 @@ #include + /* Enable C linkage for C++ Compilers: */ + #if defined(__cplusplus) + extern "C" { + #endif + /* Macros: */ /** Mass Storage Class specific request to reset the Mass Storage interface, ready for the next command. */ #define REQ_MassStorageReset 0xFF /** Mass Storage Class specific request to retrieve the total number of Logical Units (drives) in the SCSI device. */ #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 /** Magic signature for a Command Block Wrapper used in the Mass Storage Bulk-Only transport protocol. */ - #define CBW_SIGNATURE 0x43425355UL + #define MS_CBW_SIGNATURE 0x43425355UL /** Magic signature for a Command Status Wrapper used in the Mass Storage Bulk-Only transport protocol. */ - #define CSW_SIGNATURE 0x53425355UL + #define MS_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) + #define MS_COMMAND_DIR_DATA_OUT (0 << 7) /** Mask for a Command Block Wrapper's flags attribute to specify a command with data sent from device-to-host. */ - #define COMMAND_DIRECTION_DATA_IN (1 << 7) + #define MS_COMMAND_DIR_DATA_IN (1 << 7) /* Type defines: */ /** Type define for a Command Block Wrapper, used in the Mass Storage Bulk-Only Transport protocol. */ @@ -68,7 +70,7 @@ uint8_t Flags; /**< Command block flags, indicating command data direction */ uint8_t LUN; /**< Logical Unit number this command is issued to */ 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 */ + uint8_t SCSICommandData[16]; /**< 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. */ @@ -84,9 +86,9 @@ /** Enum for the possible command status wrapper return status codes. */ enum MassStorage_CommandStatusCodes_t { - Command_Pass = 0, /**< Command completed with no error */ - 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 */ + SCSI_Command_Pass = 0, /**< Command completed with no error */ + SCSI_Command_Fail = 1, /**< Command failed to complete - host may check the exact error via a SCSI REQUEST SENSE command */ + SCSI_Phase_Error = 2 /**< Command failed due to being invalid in the current phase */ }; /* Type Defines: */ @@ -118,10 +120,15 @@ static uint8_t StreamCallback_AbortOnMassStoreReset(void); #endif - void USB_MS_USBTask(USB_ClassInfo_MS_t* MSInterfaceInfo); bool USB_MS_ConfigureEndpoints(USB_ClassInfo_MS_t* MSInterfaceInfo); void USB_MS_ProcessControlPacket(USB_ClassInfo_MS_t* MSInterfaceInfo); + void USB_MS_USBTask(USB_ClassInfo_MS_t* MSInterfaceInfo); bool CALLBACK_USB_MS_SCSICommandReceived(USB_ClassInfo_MS_t* MSInterfaceInfo); + /* Disable C linkage for C++ Compilers: */ + #if defined(__cplusplus) + } + #endif + #endif diff --git a/LUFA/Drivers/USB/Class/Device/RNDIS.h b/LUFA/Drivers/USB/Class/Device/RNDIS.h index 708f57d34d..09d48c31ea 100644 --- a/LUFA/Drivers/USB/Class/Device/RNDIS.h +++ b/LUFA/Drivers/USB/Class/Device/RNDIS.h @@ -37,6 +37,11 @@ #include "../../USB.h" #include "RNDISConstants.h" + /* Enable C linkage for C++ Compilers: */ + #if defined(__cplusplus) + extern "C" { + #endif + /* Macros: */ /** Implemented RNDIS Version Major */ #define REMOTE_NDIS_VERSION_MAJOR 0x01 @@ -252,8 +257,13 @@ void* SetData, uint16_t SetSize); #endif - void USB_RNDIS_USBTask(USB_ClassInfo_RNDIS_t* RNDISInterfaceInfo); bool USB_RNDIS_ConfigureEndpoints(USB_ClassInfo_RNDIS_t* RNDISInterfaceInfo); void USB_RNDIS_ProcessControlPacket(USB_ClassInfo_RNDIS_t* RNDISInterfaceInfo); + void USB_RNDIS_USBTask(USB_ClassInfo_RNDIS_t* RNDISInterfaceInfo); + + /* Disable C linkage for C++ Compilers: */ + #if defined(__cplusplus) + } + #endif #endif diff --git a/LUFA/Drivers/USB/HighLevel/Events.h b/LUFA/Drivers/USB/HighLevel/Events.h index e6d2beaa77..80ace8720b 100644 --- a/LUFA/Drivers/USB/HighLevel/Events.h +++ b/LUFA/Drivers/USB/HighLevel/Events.h @@ -165,7 +165,7 @@ * \note This event does not exist if the USB_DEVICE_ONLY token is supplied to the compiler (see * \ref Group_USBManagement documentation). * - * \see \ref TASK(USB_USBTask) for more information on the USB management task and reducing CPU usage. + * \see \ref USB_USBTask() for more information on the USB management task and reducing CPU usage. */ void EVENT_USB_DeviceAttached(void); @@ -178,7 +178,7 @@ * \note This event does not exist if the USB_DEVICE_ONLY token is supplied to the compiler (see * \ref Group_USBManagement documentation). * - * \see \ref TASK(USB_USBTask) for more information on the USB management task and reducing CPU usage. + * \see \ref USB_USBTask() for more information on the USB management task and reducing CPU usage. */ void EVENT_USB_DeviceUnattached(void); diff --git a/LUFA/MainPage.txt b/LUFA/MainPage.txt index 030fdba9d9..2ff8b0c650 100644 --- a/LUFA/MainPage.txt +++ b/LUFA/MainPage.txt @@ -19,11 +19,11 @@ * - AT90USB1287 (USB Host and Device) * - AT90USB646 (USB Device Only) * - AT90USB647 (USB Host and Device) - * - AT90USB162 (USB Device Only) * - AT90USB82 (USB Device Only) + * - AT90USB162 (USB Device Only) * - ATMEGA16U4 (USB Device Only) - * - ATMEGA32U6 (USB Device Only) * - ATMEGA32U4 (USB Device Only) + * - ATMEGA32U6 (USB Device Only) * * Currently supported Atmel boards: * - AT90USBKEY @@ -95,9 +95,9 @@ * * * \section Sec_Donations Donate - * I am a 20 year old University student studying for a double degree in Computer Science and Electronics - * Engineering. This leaves little time for any sort of work or leisure. Please consider donating a small amount - * to myself to support this and my future Open Source projects. You can donate any amount via PayPal on my - * website, http://www.fourwalledcubicle.com . All donations are greatly appreciated. + * I am a 20 year old University student studying for a double degree in Computer Science and Electronics Engineering. + * The development and support of this library requires much effort from myself. Please consider donating a small amount + * to myself to support this and my future Open Source projects. You can donate any amount via PayPal on my website, + * http://www.fourwalledcubicle.com . All donations are greatly appreciated. */ diff --git a/LUFA/MigrationInformation.txt b/LUFA/MigrationInformation.txt index 2ee452c863..eed15c4f43 100644 --- a/LUFA/MigrationInformation.txt +++ b/LUFA/MigrationInformation.txt @@ -16,7 +16,6 @@ * - Support for non-control data endpoint interrupts has been dropped due to many issues in the implementation. All existing * projects using interrupts on non-control endpoints should switch to polling. For control interrupts, the library can * manage the control endpoint via interrupts automatically by compiling with the INTERRUPT_CONTROL_ENDPOINT token defined. - * - The Endpoint_ClearEndpointInterrupt() macro has been deleted and references to it should be removed. * - The DESCRIPTOR_ADDRESS() macro has been removed. User applications should use normal casts to obtain a descriptor's memory * address. * - The library events system has been rewritten, so that all macros have been removed to allow for clearer user code. See @@ -32,13 +31,12 @@ * Host Mode * - Support for non-control data pipe interrupts has been dropped due to many issues in the implementation. All existing * projects using interrupts on non-control pipes should switch to polling. - * - The Pipe_ClearPipeInterrupt() macro has been deleted and references to it should be removed. * - The library events system has been rewritten, so that all macros have been removed to allow for clearer user code. See * \ref Group_Events for new API details. * - The STREAM_CALLBACK() macro has been removed. User applications should replace all instances of the macro with regular * function signatures of a function accepting no arguments and returning a uint8_t value. * - The DESCRIPTOR_COMPARATOR() macro has been removed. User applications should replace all instances of the macro with - * regular function signatures of a function accepting a pointer to the descriptor to test, and returning a uint8_t value. + * regular function signatures of a function accepting a void pointer to the descriptor to test, and returning a uint8_t value. * * * \section Sec_Migration090510 Migrating from 090401 to 090510 diff --git a/LUFA/VIDAndPIDValues.txt b/LUFA/VIDAndPIDValues.txt index 441875c849..296098fc51 100644 --- a/LUFA/VIDAndPIDValues.txt +++ b/LUFA/VIDAndPIDValues.txt @@ -48,7 +48,7 @@ * 0x2041 * * - * Mouse Demo Application (and derivatives) + * Mouse Demo Application * * * @@ -60,7 +60,7 @@ * 0x2042 * * - * Keyboard Demo Application (and derivatives) + * Keyboard Demo Application * * * diff --git a/Projects/Magstripe/Magstripe.c b/Projects/Magstripe/Magstripe.c index 871db28c31..e32397c8bb 100644 --- a/Projects/Magstripe/Magstripe.c +++ b/Projects/Magstripe/Magstripe.c @@ -29,10 +29,23 @@ this software. */ +/** \file + * + * Main source file for the MagStripe reader program. This file contains the main tasks of + * the project and is responsible for the initial application hardware configuration. + */ + #include "Magstripe.h" +/** Bit buffers to hold the read bits for each of the three magnetic card tracks before they are transmitted + * to the host as keyboard presses. + */ BitBuffer_t TrackDataBuffers[3]; +/** LUFA HID Class driver interface configuration and state information. This structure is + * passed to all HID Class driver functions, so that multiple instances of the same class + * within a device can be differentiated from one another. + */ USB_ClassInfo_HID_t Keyboard_HID_Interface = { .InterfaceNumber = 0, @@ -43,6 +56,9 @@ USB_ClassInfo_HID_t Keyboard_HID_Interface = .ReportINBufferSize = sizeof(USB_KeyboardReport_Data_t), }; +/** Main program entry point. This routine contains the overall program flow, including initial + * setup of all components and the main program loop. + */ int main(void) { SetupHardware(); @@ -60,6 +76,7 @@ int main(void) } } +/** Configures the board hardware and chip peripherals for the demo's functionality. */ void SetupHardware(void) { /* Disable watchdog if enabled by bootloader/fuses */ @@ -80,6 +97,9 @@ void SetupHardware(void) TIMSK0 = (1 << OCIE0A); } +/** Determines if a card has been inserted, and if so reads in each track's contents into the bit buffers + * until they are read out to the host as a series of keyboard presses. + */ void ReadMagstripeData(void) { /* Arrays to hold the buffer pointers, clock and data bit masks for the separate card tracks */ @@ -111,22 +131,32 @@ void ReadMagstripeData(void) } } +/** Event handler for the library USB Configuration Changed event. */ void EVENT_USB_ConfigurationChanged(void) { USB_HID_ConfigureEndpoints(&Keyboard_HID_Interface); } +/** Event handler for the library USB Unhandled Control Packet event. */ void EVENT_USB_UnhandledControlPacket(void) { USB_HID_ProcessControlPacket(&Keyboard_HID_Interface); } +/** Timer 0 CTC ISR, firing once each millisecond to keep track of elapsed idle time in the HID interface. */ ISR(TIMER0_COMPA_vect, ISR_BLOCK) { if (Keyboard_HID_Interface.IdleMSRemaining) Keyboard_HID_Interface.IdleMSRemaining--; } +/** HID Class driver callback function for the creation of a HID report for the host. + * + * \param HIDInterfaceInfo Pointer to the HID interface structure for the HID interface being referenced + * \param ReportData Pointer to the preallocated report buffer where the created report should be stored + * + * \return Number of bytes in the created report + */ uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData) { static bool IsKeyReleaseReport; @@ -168,6 +198,12 @@ uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceI return sizeof(USB_KeyboardReport_Data_t); } +/** HID Class driver callback function for the processing of a received HID report from the host. + * + * \param HIDInterfaceInfo Pointer to the HID interface structure for the HID interface being referenced + * \param ReportData Pointer to the report buffer where the received report is stored + * \param ReportSize Size in bytes of the report received from the host + */ void CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData, uint16_t ReportSize) { // Unused (but mandatory for the HID class driver) in this demo, since there are no Host->Device reports