forked from mfulz_github/qmk_firmware
Fixed EVENT_USB_CDC_ControLineStateChanged() event not taking the CDC interface structure as a parameter.
Converted TestApp demo over to the new demo structure. More class driver documentation improvements.
This commit is contained in:
parent
dc42c5eb6b
commit
7665bf323e
|
@ -36,19 +36,30 @@
|
||||||
|
|
||||||
#include "TestApp.h"
|
#include "TestApp.h"
|
||||||
|
|
||||||
/* Scheduler Task List */
|
|
||||||
TASK_LIST
|
|
||||||
{
|
|
||||||
{ .Task = TestApp_CheckJoystick, .TaskStatus = TASK_RUN },
|
|
||||||
{ .Task = TestApp_CheckButton , .TaskStatus = TASK_RUN },
|
|
||||||
{ .Task = TestApp_CheckTemp , .TaskStatus = TASK_RUN },
|
|
||||||
{ .Task = USB_USBTask , .TaskStatus = TASK_RUN },
|
|
||||||
};
|
|
||||||
|
|
||||||
/** Main program entry point. This routine configures the hardware required by the application, then
|
/** Main program entry point. This routine configures the hardware required by the application, then
|
||||||
* starts the scheduler to run the application tasks.
|
* starts the scheduler to run the application tasks.
|
||||||
*/
|
*/
|
||||||
int main(void)
|
int main(void)
|
||||||
|
{
|
||||||
|
SetupHardware();
|
||||||
|
|
||||||
|
puts_P(PSTR(ESC_RESET ESC_BG_WHITE ESC_INVERSE_ON ESC_ERASE_DISPLAY
|
||||||
|
"LUFA Demo running.\r\n" ESC_INVERSE_OFF));
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
CheckJoystick();
|
||||||
|
CheckButton();
|
||||||
|
CheckTemperature();
|
||||||
|
|
||||||
|
/* Clear output-compare flag (logic 1 clears the flag) */
|
||||||
|
TIFR0 |= (1 << OCF0A);
|
||||||
|
|
||||||
|
USB_USBTask();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetupHardware(void)
|
||||||
{
|
{
|
||||||
/* Disable watchdog if enabled by bootloader/fuses */
|
/* Disable watchdog if enabled by bootloader/fuses */
|
||||||
MCUSR &= ~(1 << WDRF);
|
MCUSR &= ~(1 << WDRF);
|
||||||
|
@ -65,41 +76,20 @@ int main(void)
|
||||||
LEDs_Init();
|
LEDs_Init();
|
||||||
Buttons_Init();
|
Buttons_Init();
|
||||||
|
|
||||||
/* Millisecond timer initialization, with output compare interrupt enabled */
|
/* Millisecond timer initialization */
|
||||||
OCR0A = 0x7D;
|
OCR0A = 0x7D;
|
||||||
TCCR0A = (1 << WGM01);
|
TCCR0A = (1 << WGM01);
|
||||||
TCCR0B = ((1 << CS01) | (1 << CS00));
|
TCCR0B = ((1 << CS01) | (1 << CS00));
|
||||||
TIMSK0 = (1 << OCIE0A);
|
|
||||||
|
|
||||||
/* Turn on interrupts */
|
|
||||||
sei();
|
|
||||||
|
|
||||||
/* Start-up message via USART */
|
|
||||||
puts_P(PSTR(ESC_RESET ESC_BG_WHITE ESC_INVERSE_ON ESC_ERASE_DISPLAY
|
|
||||||
"LUFA Demo running.\r\n" ESC_INVERSE_OFF));
|
|
||||||
|
|
||||||
/* Scheduling - routine never returns, so put this last in the main function */
|
|
||||||
Scheduler_Start();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** ISR for the timer 0 compare vector. This ISR fires once each millisecond, and increments the
|
|
||||||
* scheduler tick counter.
|
|
||||||
*/
|
|
||||||
ISR(TIMER0_COMPA_vect, ISR_BLOCK)
|
|
||||||
{
|
|
||||||
/* Scheduler test - increment scheduler tick counter once each millisecond */
|
|
||||||
Scheduler_TickCounter++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Task responsible for checking the joystick position, and displaying the joystick position onto the
|
/** Task responsible for checking the joystick position, and displaying the joystick position onto the
|
||||||
* board LEDs.
|
* board LEDs.
|
||||||
*/
|
*/
|
||||||
TASK(TestApp_CheckJoystick)
|
void CheckJoystick(void)
|
||||||
{
|
{
|
||||||
uint8_t JoyStatus_LCL = Joystick_GetStatus();
|
uint8_t JoyStatus_LCL = Joystick_GetStatus();
|
||||||
uint8_t LEDMask = 0;
|
uint8_t LEDMask = LEDS_NO_LEDS;
|
||||||
|
|
||||||
/* Test of the Joystick - change a mask in response to joystick */
|
|
||||||
if (JoyStatus_LCL & JOY_UP)
|
if (JoyStatus_LCL & JOY_UP)
|
||||||
LEDMask |= LEDS_LED1;
|
LEDMask |= LEDS_LED1;
|
||||||
|
|
||||||
|
@ -115,78 +105,61 @@ TASK(TestApp_CheckJoystick)
|
||||||
if (JoyStatus_LCL & JOY_PRESS)
|
if (JoyStatus_LCL & JOY_PRESS)
|
||||||
LEDMask = LEDS_ALL_LEDS;
|
LEDMask = LEDS_ALL_LEDS;
|
||||||
|
|
||||||
/* Test of LEDs - light up in response to joystick */
|
|
||||||
LEDs_SetAllLEDs(LEDMask);
|
LEDs_SetAllLEDs(LEDMask);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Task responsible for checking the current temperature via the temperature sensor mounted on the
|
/** Task responsible for checking the current temperature via the temperature sensor mounted on the
|
||||||
* board, and displaying it through the serial USART.
|
* board, and displaying it through the serial USART.
|
||||||
*/
|
*/
|
||||||
TASK(TestApp_CheckTemp)
|
void CheckTemperature(void)
|
||||||
{
|
{
|
||||||
static SchedulerDelayCounter_t DelayCounter = 10000; // Force immediate run on start-up
|
static uint16_t MSElapsed = 0;
|
||||||
|
|
||||||
|
if (TIFR0 & (1 << OCF0A))
|
||||||
|
MSElapsed++;
|
||||||
|
|
||||||
/* Task runs every 10000 ticks, 10 seconds for this demo */
|
/* Task runs every 10000 ticks, 10 seconds for this demo */
|
||||||
if (Scheduler_HasDelayElapsed(10000, &DelayCounter))
|
if (MSElapsed == 1000)
|
||||||
{
|
{
|
||||||
printf_P(PSTR("Current temperature: %d Degrees Celcius\r\n\r\n"),
|
printf_P(PSTR("Current temperature: %d Degrees Celcius\r\n\r\n"),
|
||||||
(int8_t)Temperature_GetTemperature());
|
(int8_t)Temperature_GetTemperature());
|
||||||
|
|
||||||
/* Reset the delay counter, ready to count another 10000 tick interval */
|
MSElapsed = 0;
|
||||||
Scheduler_ResetDelay(&DelayCounter);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Task responsible for checking the board's first button' position, and start-stopping other tasks and the USB
|
/** Task responsible for checking the board's first button' position, and start-stopping other tasks and the USB
|
||||||
* interface in response to user joystick movements.
|
* interface in response to user joystick movements.
|
||||||
*/
|
*/
|
||||||
TASK(TestApp_CheckButton)
|
void CheckButton(void)
|
||||||
{
|
{
|
||||||
static SchedulerDelayCounter_t DelayCounter = 0;
|
static uint16_t DebounceMSElapsed = 0;
|
||||||
static bool IsPressed;
|
static bool IsPressed;
|
||||||
static bool BlockingJoystickTask;
|
|
||||||
|
|
||||||
/* Check if board button pressed (start USB) */
|
if (TIFR0 & (1 << OCF0A))
|
||||||
|
DebounceMSElapsed++;
|
||||||
|
|
||||||
if (Buttons_GetStatus() & BUTTONS_BUTTON1)
|
if (Buttons_GetStatus() & BUTTONS_BUTTON1)
|
||||||
{
|
{
|
||||||
/* Debounce - check 100 ticks later to see if button is still being pressed */
|
if (!(IsPressed) && (DebounceMSElapsed == 100))
|
||||||
if ((IsPressed == false) && (Scheduler_HasDelayElapsed(100, &DelayCounter)))
|
|
||||||
{
|
{
|
||||||
/* Set flag, indicating that current pressed state has been handled */
|
|
||||||
IsPressed = true;
|
IsPressed = true;
|
||||||
|
|
||||||
/* First start of the USB interface permanently blocks the joystick task */
|
|
||||||
if (BlockingJoystickTask == false)
|
|
||||||
{
|
|
||||||
Scheduler_SetTaskMode(TestApp_CheckJoystick, TASK_STOP);
|
|
||||||
BlockingJoystickTask = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Toggle USB interface */
|
|
||||||
if (USB_IsInitialized == true)
|
if (USB_IsInitialized == true)
|
||||||
{
|
{
|
||||||
USB_ShutDown();
|
USB_ShutDown();
|
||||||
|
|
||||||
LEDs_SetAllLEDs(LEDS_LED1);
|
|
||||||
puts_P(PSTR(ESC_BG_WHITE "USB Power Off.\r\n"));
|
puts_P(PSTR(ESC_BG_WHITE "USB Power Off.\r\n"));
|
||||||
|
|
||||||
Scheduler_SetTaskMode(TestApp_CheckTemp, TASK_RUN);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Scheduler_SetTaskMode(TestApp_CheckTemp, TASK_STOP);
|
puts_P(PSTR(ESC_BG_YELLOW "USB Power On.\r\n"));
|
||||||
|
|
||||||
LEDs_SetAllLEDs(LEDS_LED2 | LEDS_LED3);
|
|
||||||
puts_P(PSTR(ESC_BG_YELLOW "USB Power On.\r\n"));
|
|
||||||
|
|
||||||
USB_Init(USB_MODE_UID, USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL);
|
USB_Init(USB_MODE_UID, USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Board button not pressed - reset debounce interval counter and press handled flag */
|
DebounceMSElapsed = 0;
|
||||||
Scheduler_ResetDelay(&DelayCounter);
|
|
||||||
IsPressed = false;
|
IsPressed = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,20 +42,21 @@
|
||||||
#include <avr/wdt.h>
|
#include <avr/wdt.h>
|
||||||
#include <avr/power.h>
|
#include <avr/power.h>
|
||||||
|
|
||||||
#include <LUFA/Version.h> // Library Version Information
|
#include <LUFA/Version.h>
|
||||||
#include <LUFA/Drivers/USB/USB.h> // USB Functionality
|
#include <LUFA/Drivers/USB/USB.h>
|
||||||
#include <LUFA/Scheduler/Scheduler.h> // Simple scheduler for task management
|
#include <LUFA/Drivers/Misc/TerminalCodes.h>
|
||||||
#include <LUFA/Drivers/Misc/TerminalCodes.h> // ANSI Terminal Escape Codes
|
#include <LUFA/Drivers/Peripheral/ADC.h>
|
||||||
#include <LUFA/Drivers/Peripheral/ADC.h> // ADC driver
|
#include <LUFA/Drivers/Peripheral/SerialStream.h>
|
||||||
#include <LUFA/Drivers/Peripheral/SerialStream.h> // USART Stream driver
|
#include <LUFA/Drivers/Board/Joystick.h>
|
||||||
#include <LUFA/Drivers/Board/Joystick.h> // Joystick driver
|
#include <LUFA/Drivers/Board/LEDs.h>
|
||||||
#include <LUFA/Drivers/Board/LEDs.h> // LED driver
|
#include <LUFA/Drivers/Board/Buttons.h>
|
||||||
#include <LUFA/Drivers/Board/Buttons.h> // Board Buttons driver
|
#include <LUFA/Drivers/Board/Temperature.h>
|
||||||
#include <LUFA/Drivers/Board/Temperature.h> // Temperature sensor driver
|
|
||||||
|
|
||||||
/* Task Definitions: */
|
/* Function Prototypes: */
|
||||||
TASK(TestApp_CheckJoystick);
|
void SetupHardware(void);
|
||||||
TASK(TestApp_CheckButton);
|
|
||||||
TASK(TestApp_CheckTemp);
|
void CheckJoystick(void);
|
||||||
|
void CheckButton(void);
|
||||||
|
void CheckTemperature(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -42,19 +42,13 @@
|
||||||
* Pressing the HWB will initiate the USB subsystem, enumerating
|
* Pressing the HWB will initiate the USB subsystem, enumerating
|
||||||
* the device (which has <b>no actual functionality beyond
|
* the device (which has <b>no actual functionality beyond
|
||||||
* enumeration as a device or as a host in this demo</b>, and serves
|
* enumeration as a device or as a host in this demo</b>, and serves
|
||||||
* only to demonstrate the USB portion of the library). It will
|
* only to demonstrate the USB portion of the library).
|
||||||
* also suspend the joystick and temperature monitoring tasks.
|
|
||||||
*
|
*
|
||||||
* Pressing the HWB a second time will turn off the USB system
|
* Pressing the HWB a second time will turn off the USB system.
|
||||||
* and resume the temperature printing task (but not the joystick
|
|
||||||
* monitoring task).
|
|
||||||
*
|
*
|
||||||
* When activated, the USB events will be printed through the
|
* When activated, the USB events will be printed through the
|
||||||
* serial USART.
|
* serial USART.
|
||||||
*
|
*
|
||||||
* When the USB subsystem is activated, the board LEDs will show
|
|
||||||
* the current USB status.
|
|
||||||
*
|
|
||||||
* \section SSec_Options Project Options
|
* \section SSec_Options Project Options
|
||||||
*
|
*
|
||||||
* The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.
|
* The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.
|
||||||
|
|
|
@ -79,9 +79,6 @@ void EVENT_USB_VBUSDisconnect(void)
|
||||||
void EVENT_USB_Connect(void)
|
void EVENT_USB_Connect(void)
|
||||||
{
|
{
|
||||||
puts_P(PSTR(EVENT_PREFIX "USB +\r\n"));
|
puts_P(PSTR(EVENT_PREFIX "USB +\r\n"));
|
||||||
LEDs_SetAllLEDs(LEDS_LED2 | LEDS_LED3 | LEDS_LED4);
|
|
||||||
|
|
||||||
Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -90,24 +87,19 @@ void EVENT_USB_Connect(void)
|
||||||
*/
|
*/
|
||||||
void EVENT_USB_Disconnect(void)
|
void EVENT_USB_Disconnect(void)
|
||||||
{
|
{
|
||||||
Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);
|
|
||||||
|
|
||||||
puts_P(PSTR(EVENT_PREFIX "USB -\r\n"));
|
puts_P(PSTR(EVENT_PREFIX "USB -\r\n"));
|
||||||
LEDs_SetAllLEDs(LEDS_LED2 | LEDS_LED3 | LEDS_LED3);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Event handler for the USB_Suspend event. When fired, the event is logged to the USART. */
|
/** Event handler for the USB_Suspend event. When fired, the event is logged to the USART. */
|
||||||
void EVENT_USB_Suspend(void)
|
void EVENT_USB_Suspend(void)
|
||||||
{
|
{
|
||||||
puts_P(PSTR(EVENT_PREFIX ESC_BG_YELLOW "USB Sleep\r\n"));
|
puts_P(PSTR(EVENT_PREFIX ESC_BG_YELLOW "USB Sleep\r\n"));
|
||||||
LEDs_SetAllLEDs(LEDS_ALL_LEDS);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Event handler for the USB_WakeUp event. When fired, the event is logged to the USART. */
|
/** Event handler for the USB_WakeUp event. When fired, the event is logged to the USART. */
|
||||||
void EVENT_USB_WakeUp(void)
|
void EVENT_USB_WakeUp(void)
|
||||||
{
|
{
|
||||||
puts_P(PSTR(EVENT_PREFIX ESC_BG_GREEN "USB Wakeup\r\n"));
|
puts_P(PSTR(EVENT_PREFIX ESC_BG_GREEN "USB Wakeup\r\n"));
|
||||||
LEDs_SetAllLEDs(LEDS_LED2 | LEDS_LED4);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Event handler for the USB_Reset event. When fired, the event is logged to the USART. */
|
/** Event handler for the USB_Reset event. When fired, the event is logged to the USART. */
|
||||||
|
@ -129,8 +121,6 @@ void EVENT_USB_UIDChange(void)
|
||||||
ModeStrPtr = PSTR("DEVICE");
|
ModeStrPtr = PSTR("DEVICE");
|
||||||
else
|
else
|
||||||
ModeStrPtr = PSTR("N/A");
|
ModeStrPtr = PSTR("N/A");
|
||||||
|
|
||||||
LEDs_SetAllLEDs(LEDS_LED2 | LEDS_LED3);
|
|
||||||
|
|
||||||
printf_P(PSTR(" -- New Mode %S\r\n"), ModeStrPtr);
|
printf_P(PSTR(" -- New Mode %S\r\n"), ModeStrPtr);
|
||||||
}
|
}
|
||||||
|
@ -192,16 +182,12 @@ void EVENT_USB_UnhandledControlPacket(void)
|
||||||
void EVENT_USB_ConfigurationChanged(void)
|
void EVENT_USB_ConfigurationChanged(void)
|
||||||
{
|
{
|
||||||
puts_P(PSTR(EVENT_PREFIX "Configuration Number Changed\r\n"));
|
puts_P(PSTR(EVENT_PREFIX "Configuration Number Changed\r\n"));
|
||||||
|
|
||||||
LEDs_SetAllLEDs(LEDS_LED2 | LEDS_LED4);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Event handler for the USB_DeviceAttached event. When fired, the event is logged to the USART. */
|
/** Event handler for the USB_DeviceAttached event. When fired, the event is logged to the USART. */
|
||||||
void EVENT_USB_DeviceAttached(void)
|
void EVENT_USB_DeviceAttached(void)
|
||||||
{
|
{
|
||||||
puts_P(PSTR(EVENT_PREFIX ESC_BG_GREEN "Device +\r\n"));
|
puts_P(PSTR(EVENT_PREFIX ESC_BG_GREEN "Device +\r\n"));
|
||||||
|
|
||||||
Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Event handler for the USB_DeviceUnattached event. When fired, the event is logged to the USART. */
|
/** Event handler for the USB_DeviceUnattached event. When fired, the event is logged to the USART. */
|
||||||
|
|
|
@ -39,12 +39,11 @@
|
||||||
/* Includes: */
|
/* Includes: */
|
||||||
#include <avr/io.h>
|
#include <avr/io.h>
|
||||||
|
|
||||||
#include <LUFA/Common/Common.h> // Commonly used macros
|
#include <LUFA/Common/Common.h>
|
||||||
#include <LUFA/Drivers/USB/USB.h> // USB Functionality
|
#include <LUFA/Drivers/USB/USB.h>
|
||||||
#include <LUFA/Drivers/Board/LEDs.h> // LED driver
|
#include <LUFA/Drivers/Board/LEDs.h>
|
||||||
#include <LUFA/Drivers/Peripheral/SerialStream.h> // USART Stream driver
|
#include <LUFA/Drivers/Peripheral/SerialStream.h>
|
||||||
#include <LUFA/Drivers/Misc/TerminalCodes.h> // ANSI Terminal Escape Codes
|
#include <LUFA/Drivers/Misc/TerminalCodes.h>
|
||||||
#include <LUFA/Scheduler/Scheduler.h> // Simple scheduler for task management
|
|
||||||
|
|
||||||
/* Macros: */
|
/* Macros: */
|
||||||
/** Prefix sent through the USART when an even fires before the actual event message. */
|
/** Prefix sent through the USART when an even fires before the actual event message. */
|
||||||
|
|
|
@ -126,7 +126,6 @@ LUFA_PATH = ../../..
|
||||||
SRC = $(TARGET).c \
|
SRC = $(TARGET).c \
|
||||||
TestEvents.c \
|
TestEvents.c \
|
||||||
Descriptors.c \
|
Descriptors.c \
|
||||||
$(LUFA_PATH)/LUFA/Scheduler/Scheduler.c \
|
|
||||||
$(LUFA_PATH)/LUFA/Drivers/Board/Temperature.c \
|
$(LUFA_PATH)/LUFA/Drivers/Board/Temperature.c \
|
||||||
$(LUFA_PATH)/LUFA/Drivers/Peripheral/SerialStream.c \
|
$(LUFA_PATH)/LUFA/Drivers/Peripheral/SerialStream.c \
|
||||||
$(LUFA_PATH)/LUFA/Drivers/Peripheral/Serial.c \
|
$(LUFA_PATH)/LUFA/Drivers/Peripheral/Serial.c \
|
||||||
|
|
|
@ -389,21 +389,21 @@
|
||||||
*
|
*
|
||||||
* \return Boolean true if the endpoints were sucessfully configured, false otherwise
|
* \return Boolean true if the endpoints were sucessfully configured, false otherwise
|
||||||
*/
|
*/
|
||||||
bool USB_Audio_ConfigureEndpoints(USB_ClassInfo_Audio_t* AudioInterfaceInfo);
|
bool USB_Audio_ConfigureEndpoints(USB_ClassInfo_Audio_t* AudioInterfaceInfo);
|
||||||
|
|
||||||
/** Processes incomming control requests from the host, that are directed to the given Audio class interface. This should be
|
/** Processes incomming control requests from the host, that are directed to the given Audio class interface. This should be
|
||||||
* linked to the library \ref EVENT_USB_UnhandledControlPacket() event.
|
* linked to the library \ref EVENT_USB_UnhandledControlPacket() event.
|
||||||
*
|
*
|
||||||
* \param AudioInterfaceInfo Pointer to a structure containing an Audio Class configuration and state.
|
* \param AudioInterfaceInfo Pointer to a structure containing an Audio Class configuration and state.
|
||||||
*/
|
*/
|
||||||
void USB_Audio_ProcessControlPacket(USB_ClassInfo_Audio_t* AudioInterfaceInfo);
|
void USB_Audio_ProcessControlPacket(USB_ClassInfo_Audio_t* AudioInterfaceInfo);
|
||||||
|
|
||||||
/** General management task for a given Audio class interface, required for the correct operation of the interface. This should
|
/** General management task for a given Audio class interface, required for the correct operation of the interface. This should
|
||||||
* be called frequently in the main program loop, before the master USB management task \ref USB_USBTask().
|
* be called frequently in the main program loop, before the master USB management task \ref USB_USBTask().
|
||||||
*
|
*
|
||||||
* \param AudioInterfaceInfo Pointer to a structure containing an Audio Class configuration and state.
|
* \param AudioInterfaceInfo Pointer to a structure containing an Audio Class configuration and state.
|
||||||
*/
|
*/
|
||||||
void USB_Audio_USBTask(USB_ClassInfo_Audio_t* AudioInterfaceInfo);
|
void USB_Audio_USBTask(USB_ClassInfo_Audio_t* AudioInterfaceInfo);
|
||||||
|
|
||||||
/** Reads the next 8-bit audio sample from the current audio interface.
|
/** Reads the next 8-bit audio sample from the current audio interface.
|
||||||
*
|
*
|
||||||
|
@ -412,7 +412,7 @@
|
||||||
*
|
*
|
||||||
* \return Signed 8-bit audio sample from the audio interface
|
* \return Signed 8-bit audio sample from the audio interface
|
||||||
*/
|
*/
|
||||||
int8_t USB_Audio_ReadSample8(void);
|
int8_t USB_Audio_ReadSample8(void);
|
||||||
|
|
||||||
/** Reads the next 16-bit audio sample from the current audio interface.
|
/** Reads the next 16-bit audio sample from the current audio interface.
|
||||||
*
|
*
|
||||||
|
@ -421,7 +421,7 @@
|
||||||
*
|
*
|
||||||
* \return Signed 16-bit audio sample from the audio interface
|
* \return Signed 16-bit audio sample from the audio interface
|
||||||
*/
|
*/
|
||||||
int16_t USB_Audio_ReadSample16(void);
|
int16_t USB_Audio_ReadSample16(void);
|
||||||
|
|
||||||
/** Reads the next 24-bit audio sample from the current audio interface.
|
/** Reads the next 24-bit audio sample from the current audio interface.
|
||||||
*
|
*
|
||||||
|
@ -430,7 +430,7 @@
|
||||||
*
|
*
|
||||||
* \return Signed 24-bit audio sample from the audio interface
|
* \return Signed 24-bit audio sample from the audio interface
|
||||||
*/
|
*/
|
||||||
int32_t USB_Audio_ReadSample24(void);
|
int32_t USB_Audio_ReadSample24(void);
|
||||||
|
|
||||||
/** Writes the next 8-bit audio sample to the current audio interface.
|
/** Writes the next 8-bit audio sample to the current audio interface.
|
||||||
*
|
*
|
||||||
|
@ -439,7 +439,7 @@
|
||||||
*
|
*
|
||||||
* \param Sample Signed 8-bit audio sample
|
* \param Sample Signed 8-bit audio sample
|
||||||
*/
|
*/
|
||||||
void USB_Audio_WriteSample8(int8_t Sample);
|
void USB_Audio_WriteSample8(int8_t Sample);
|
||||||
|
|
||||||
/** Writes the next 16-bit audio sample to the current audio interface.
|
/** Writes the next 16-bit audio sample to the current audio interface.
|
||||||
*
|
*
|
||||||
|
@ -448,7 +448,7 @@
|
||||||
*
|
*
|
||||||
* \param Sample Signed 16-bit audio sample
|
* \param Sample Signed 16-bit audio sample
|
||||||
*/
|
*/
|
||||||
void USB_Audio_WriteSample16(int16_t Sample);
|
void USB_Audio_WriteSample16(int16_t Sample);
|
||||||
|
|
||||||
/** Writes the next 24-bit audio sample to the current audio interface.
|
/** Writes the next 24-bit audio sample to the current audio interface.
|
||||||
*
|
*
|
||||||
|
@ -457,7 +457,7 @@
|
||||||
*
|
*
|
||||||
* \param Sample Signed 24-bit audio sample
|
* \param Sample Signed 24-bit audio sample
|
||||||
*/
|
*/
|
||||||
void USB_Audio_WriteSample24(int32_t Sample);
|
void USB_Audio_WriteSample24(int32_t Sample);
|
||||||
|
|
||||||
/** Determines if the given audio interface is ready for a sample to be read from it.
|
/** Determines if the given audio interface is ready for a sample to be read from it.
|
||||||
*
|
*
|
||||||
|
@ -465,7 +465,7 @@
|
||||||
*
|
*
|
||||||
* \return Boolean true if the given Audio interface has a sample to be read, false otherwise
|
* \return Boolean true if the given Audio interface has a sample to be read, false otherwise
|
||||||
*/
|
*/
|
||||||
bool USB_Audio_IsSampleReceived(USB_ClassInfo_Audio_t* AudioInterfaceInfo);
|
bool USB_Audio_IsSampleReceived(USB_ClassInfo_Audio_t* AudioInterfaceInfo);
|
||||||
|
|
||||||
/** Determines if the given audio interface is ready to accept the next sample to be written to it.
|
/** Determines if the given audio interface is ready to accept the next sample to be written to it.
|
||||||
*
|
*
|
||||||
|
@ -473,7 +473,7 @@
|
||||||
*
|
*
|
||||||
* \return Boolean true if the given Audio interface is ready to accept the next sample, false otherwise
|
* \return Boolean true if the given Audio interface is ready to accept the next sample, false otherwise
|
||||||
*/
|
*/
|
||||||
bool USB_Audio_IsReadyForNextSample(USB_ClassInfo_Audio_t* AudioInterfaceInfo);
|
bool USB_Audio_IsReadyForNextSample(USB_ClassInfo_Audio_t* AudioInterfaceInfo);
|
||||||
|
|
||||||
/* Disable C linkage for C++ Compilers: */
|
/* Disable C linkage for C++ Compilers: */
|
||||||
#if defined(__cplusplus)
|
#if defined(__cplusplus)
|
||||||
|
|
|
@ -73,7 +73,7 @@ void USB_CDC_ProcessControlPacket(USB_ClassInfo_CDC_t* CDCInterfaceInfo)
|
||||||
|
|
||||||
CDCInterfaceInfo->ControlLineState = USB_ControlRequest.wValue;
|
CDCInterfaceInfo->ControlLineState = USB_ControlRequest.wValue;
|
||||||
|
|
||||||
EVENT_USB_CDC_ControLineStateChanged();
|
EVENT_USB_CDC_ControLineStateChanged(CDCInterfaceInfo);
|
||||||
|
|
||||||
while (!(Endpoint_IsINReady()));
|
while (!(Endpoint_IsINReady()));
|
||||||
Endpoint_ClearIN();
|
Endpoint_ClearIN();
|
||||||
|
|
|
@ -167,7 +167,7 @@
|
||||||
uint8_t NotificationEndpointNumber; /**< Endpoint number of the CDC interface's IN notification endpoint, if used */
|
uint8_t NotificationEndpointNumber; /**< Endpoint number of the CDC interface's IN notification endpoint, if used */
|
||||||
uint16_t NotificationEndpointSize; /**< Size in bytes of the CDC interface's IN notification endpoint, if used */
|
uint16_t NotificationEndpointSize; /**< Size in bytes of the CDC interface's IN notification endpoint, if used */
|
||||||
|
|
||||||
uint8_t ControlLineState;
|
uint8_t ControlLineState; /**< Current control line state, as set by the host */
|
||||||
|
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
|
@ -187,15 +187,36 @@
|
||||||
void USB_CDC_Event_Stub(void);
|
void USB_CDC_Event_Stub(void);
|
||||||
void EVENT_USB_CDC_LineEncodingChanged(USB_ClassInfo_CDC_t* CDCInterfaceInfo)
|
void EVENT_USB_CDC_LineEncodingChanged(USB_ClassInfo_CDC_t* CDCInterfaceInfo)
|
||||||
ATTR_WEAK ATTR_ALIAS(USB_CDC_Event_Stub);
|
ATTR_WEAK ATTR_ALIAS(USB_CDC_Event_Stub);
|
||||||
void EVENT_USB_CDC_ControLineStateChanged(void) ATTR_WEAK ATTR_ALIAS(USB_CDC_Event_Stub);;
|
void EVENT_USB_CDC_ControLineStateChanged(USB_ClassInfo_CDC_t* CDCInterfaceInfo)
|
||||||
|
ATTR_WEAK ATTR_ALIAS(USB_CDC_Event_Stub);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool USB_CDC_ConfigureEndpoints(USB_ClassInfo_CDC_t* CDCInterfaceInfo);
|
/** Configures the endpoints of a given CDC interface, ready for use. This should be linked to the library
|
||||||
void USB_CDC_ProcessControlPacket(USB_ClassInfo_CDC_t* CDCInterfaceInfo);
|
* \ref EVENT_USB_ConfigurationChanged() event so that the endpoints are configured when the configuration containing the
|
||||||
void USB_CDC_USBTask(USB_ClassInfo_CDC_t* CDCInterfaceInfo);
|
* given CDC interface is selected.
|
||||||
|
*
|
||||||
|
* \param CDCInterfaceInfo Pointer to a structure containing an CDC Class configuration and state.
|
||||||
|
*
|
||||||
|
* \return Boolean true if the endpoints were sucessfully configured, false otherwise
|
||||||
|
*/
|
||||||
|
bool USB_CDC_ConfigureEndpoints(USB_ClassInfo_CDC_t* CDCInterfaceInfo);
|
||||||
|
|
||||||
|
/** Processes incomming control requests from the host, that are directed to the given CDC class interface. This should be
|
||||||
|
* linked to the library \ref EVENT_USB_UnhandledControlPacket() event.
|
||||||
|
*
|
||||||
|
* \param CDCInterfaceInfo Pointer to a structure containing an CDC Class configuration and state.
|
||||||
|
*/
|
||||||
|
void USB_CDC_ProcessControlPacket(USB_ClassInfo_CDC_t* CDCInterfaceInfo);
|
||||||
|
|
||||||
|
/** General management task for a given CDC class interface, required for the correct operation of the interface. This should
|
||||||
|
* be called frequently in the main program loop, before the master USB management task \ref USB_USBTask().
|
||||||
|
*
|
||||||
|
* \param CDCInterfaceInfo Pointer to a structure containing an CDC Class configuration and state.
|
||||||
|
*/
|
||||||
|
void USB_CDC_USBTask(USB_ClassInfo_CDC_t* CDCInterfaceInfo);
|
||||||
|
|
||||||
void EVENT_USB_CDC_LineEncodingChanged(USB_ClassInfo_CDC_t* CDCInterfaceInfo);
|
void EVENT_USB_CDC_LineEncodingChanged(USB_ClassInfo_CDC_t* CDCInterfaceInfo);
|
||||||
void EVENT_USB_CDC_ControLineStateChanged(void);
|
void EVENT_USB_CDC_ControLineStateChanged(USB_ClassInfo_CDC_t* CDCInterfaceInfo);
|
||||||
|
|
||||||
void USB_CDC_SendString(USB_ClassInfo_CDC_t* CDCInterfaceInfo, char* Data, uint16_t Length);
|
void USB_CDC_SendString(USB_ClassInfo_CDC_t* CDCInterfaceInfo, char* Data, uint16_t Length);
|
||||||
void USB_CDC_SendByte(USB_ClassInfo_CDC_t* CDCInterfaceInfo, uint8_t Data);
|
void USB_CDC_SendByte(USB_ClassInfo_CDC_t* CDCInterfaceInfo, uint8_t Data);
|
||||||
|
|
Loading…
Reference in New Issue