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.
This commit is contained in:
parent
7c5444b89a
commit
a67bd74e3e
47 changed files with 653 additions and 153 deletions
|
@ -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);
|
||||
|
|
|
@ -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: */
|
||||
|
|
|
@ -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 =
|
||||
|
|
|
@ -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 mixed sample value positive (absolute) */
|
||||
if (MixedSample_8Bit < 0)
|
||||
MixedSample_8Bit = -MixedSample_8Bit;
|
||||
|
||||
/* Make right channel positive (absolute) */
|
||||
if (RightSample_8Bit < 0)
|
||||
RightSample_8Bit = -RightSample_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;
|
||||
|
||||
/* Set second LED based on sample value */
|
||||
if (RightSample_8Bit < ((128 / 8) * 1))
|
||||
LEDMask |= LEDS_LED4;
|
||||
else if (RightSample_8Bit < ((128 / 8) * 3))
|
||||
LEDMask |= (LEDS_LED3 | LEDS_LED4);
|
||||
else
|
||||
LEDMask |= LEDS_LED3;
|
||||
|
||||
if (MixedSample_8Bit > ((128 / 8) * 2))
|
||||
LEDMask |= LEDS_LED2;
|
||||
|
||||
if (MixedSample_8Bit > ((128 / 8) * 3))
|
||||
LEDMask |= LEDS_LED3;
|
||||
|
||||
if (MixedSample_8Bit > ((128 / 8) * 4))
|
||||
LEDMask |= LEDS_LED4;
|
||||
|
||||
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);
|
||||
|
|
|
@ -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: */
|
||||
|
|
|
@ -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 =
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -51,9 +51,16 @@
|
|||
#include <LUFA/Drivers/USB/Class/Device/CDC.h>
|
||||
|
||||
/* 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: */
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -51,9 +51,16 @@
|
|||
#include <LUFA/Drivers/USB/Class/Device/CDC.h>
|
||||
|
||||
/* 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: */
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -52,9 +52,16 @@
|
|||
#include <LUFA/Drivers/USB/Class/Device/HID.h>
|
||||
|
||||
/* Macros: */
|
||||
/** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
|
||||
#define LEDMASK_USB_NOTREADY LEDS_LED1
|
||||
|
||||
/** 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: */
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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: */
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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: */
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -49,9 +49,16 @@
|
|||
#include <LUFA/Drivers/USB/Class/Device/HID.h>
|
||||
|
||||
/* Macros: */
|
||||
/** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
|
||||
#define LEDMASK_USB_NOTREADY LEDS_LED1
|
||||
|
||||
/** 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: */
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -53,9 +53,16 @@
|
|||
#include <LUFA/Drivers/USB/Class/Device/MIDI.h>
|
||||
|
||||
/* 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: */
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -54,12 +54,22 @@
|
|||
#include <LUFA/Drivers/USB/Class/Device/MassStorage.h>
|
||||
|
||||
/* 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. */
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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: */
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -58,11 +58,20 @@
|
|||
#include <LUFA/Drivers/USB/Class/Device/RNDIS.h>
|
||||
|
||||
/* 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);
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -54,9 +54,16 @@
|
|||
#include <LUFA/Drivers/USB/Class/Device/CDC.h>
|
||||
|
||||
/* 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: */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue