diff options
author | Drashna Jaelre <drashna@live.com> | 2019-08-02 14:02:40 -0700 |
---|---|---|
committer | skullydazed <skullydazed@users.noreply.github.com> | 2019-08-30 15:01:52 -0700 |
commit | cf4575b94a3c65e6535a159fc71fc885aebc2620 (patch) | |
tree | 2354f2b7a200e02246a564afefedc32357e62b8e /lib/lufa/Demos/Host/LowLevel/AudioOutputHost | |
parent | 75ee8df19e0f14ba466f41ab673dde2fe2fdae9c (diff) |
Fix the LUFA lib to use a submodule instead of just files (#6245)
* Remove LUFA files
* Update descriptions for newer version of LUFA
* Create PR6245.md
* Fix CDC(Serial) type errors
* Fix missed merge conflict for AUDIO_DTYPE_CSInterface
Diffstat (limited to 'lib/lufa/Demos/Host/LowLevel/AudioOutputHost')
10 files changed, 0 insertions, 3350 deletions
diff --git a/lib/lufa/Demos/Host/LowLevel/AudioOutputHost/AudioOutputHost.c b/lib/lufa/Demos/Host/LowLevel/AudioOutputHost/AudioOutputHost.c deleted file mode 100644 index 2e56d7f356..0000000000 --- a/lib/lufa/Demos/Host/LowLevel/AudioOutputHost/AudioOutputHost.c +++ /dev/null @@ -1,250 +0,0 @@ -/* - LUFA Library - Copyright (C) Dean Camera, 2017. - - dean [at] fourwalledcubicle [dot] com - www.lufa-lib.org -*/ - -/* - Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) - - Permission to use, copy, modify, distribute, and sell this - software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in - all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the - software without specific, written prior permission. - - The author disclaims all warranties with regard to this - software, including all implied warranties of merchantability - and fitness. In no event shall the author be liable for any - special, indirect or consequential damages or any damages - whatsoever resulting from loss of use, data or profits, whether - in an action of contract, negligence or other tortious action, - arising out of or in connection with the use or performance of - this software. -*/ - -/** \file - * - * Main source file for the AudioOutputHost demo. This file contains the main tasks of - * the demo and is responsible for the initial application hardware configuration. - */ - -#include "AudioOutputHost.h" - -/** Main program entry point. This routine configures the hardware required by the application, then - * enters a loop to run the application tasks in sequence. - */ -int main(void) -{ - SetupHardware(); - - puts_P(PSTR(ESC_FG_CYAN "Audio Output Host Demo running.\r\n" ESC_FG_WHITE)); - - LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); - GlobalInterruptEnable(); - - for (;;) - { - USB_USBTask(); - } -} - -/** Configures the board hardware and chip peripherals for the demo's functionality. */ -void SetupHardware(void) -{ -#if (ARCH == ARCH_AVR8) - /* Disable watchdog if enabled by bootloader/fuses */ - MCUSR &= ~(1 << WDRF); - wdt_disable(); - - /* Disable clock division */ - clock_prescale_set(clock_div_1); -#endif - - /* Hardware Initialization */ - Serial_Init(9600, false); - Buttons_Init(); - ADC_Init(ADC_FREE_RUNNING | ADC_PRESCALE_32); - ADC_SetupChannel(MIC_IN_ADC_CHANNEL); - LEDs_Init(); - USB_Init(); - - /* Create a stdio stream for the serial port for stdin and stdout */ - Serial_CreateStream(NULL); - - /* Start the ADC conversion in free running mode */ - ADC_StartReading(ADC_REFERENCE_AVCC | ADC_RIGHT_ADJUSTED | ADC_GET_CHANNEL_MASK(MIC_IN_ADC_CHANNEL)); -} - -/** Event handler for the USB_DeviceAttached event. This indicates that a device has been attached to the host, and - * starts the library USB task to begin the enumeration and USB management process. - */ -void EVENT_USB_Host_DeviceAttached(void) -{ - puts_P(PSTR(ESC_FG_GREEN "Device Attached.\r\n" ESC_FG_WHITE)); - LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); -} - -/** Event handler for the USB_DeviceUnattached event. This indicates that a device has been removed from the host, and - * stops the library USB task management process. - */ -void EVENT_USB_Host_DeviceUnattached(void) -{ - puts_P(PSTR(ESC_FG_GREEN "Device Unattached.\r\n" ESC_FG_WHITE)); - LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); -} - -/** Event handler for the USB_DeviceEnumerationComplete event. This indicates that a device has been successfully - * enumerated by the host and is now ready to be used by the application. - */ -void EVENT_USB_Host_DeviceEnumerationComplete(void) -{ - puts_P(PSTR("Getting Config Data.\r\n")); - - uint8_t ErrorCode; - - /* Get and process the configuration descriptor data */ - if ((ErrorCode = ProcessConfigurationDescriptor()) != SuccessfulConfigRead) - { - if (ErrorCode == ControlError) - puts_P(PSTR(ESC_FG_RED "Control Error (Get Configuration).\r\n")); - else - puts_P(PSTR(ESC_FG_RED "Invalid Device.\r\n")); - - printf_P(PSTR(" -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); - - LEDs_SetAllLEDs(LEDMASK_USB_ERROR); - return; - } - - /* Set the device configuration to the first configuration (rarely do devices use multiple configurations) */ - if ((ErrorCode = USB_Host_SetDeviceConfiguration(1)) != HOST_SENDCONTROL_Successful) - { - printf_P(PSTR(ESC_FG_RED "Control Error (Set Configuration).\r\n" - " -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); - - LEDs_SetAllLEDs(LEDMASK_USB_ERROR); - return; - } - - if ((ErrorCode = USB_Host_SetInterfaceAltSetting(StreamingInterfaceIndex, - StreamingInterfaceAltSetting)) != HOST_SENDCONTROL_Successful) - { - printf_P(PSTR(ESC_FG_RED "Could not set alternative streaming interface setting.\r\n" - " -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); - - LEDs_SetAllLEDs(LEDMASK_USB_ERROR); - USB_Host_SetDeviceConfiguration(0); - return; - } - - USB_ControlRequest = (USB_Request_Header_t) - { - .bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_ENDPOINT), - .bRequest = AUDIO_REQ_SetCurrent, - .wValue = (AUDIO_EPCONTROL_SamplingFreq << 8), - .wIndex = StreamingEndpointAddress, - .wLength = sizeof(USB_Audio_SampleFreq_t), - }; - - USB_Audio_SampleFreq_t SampleRate = AUDIO_SAMPLE_FREQ(48000); - - /* Select the control pipe for the request transfer */ - Pipe_SelectPipe(PIPE_CONTROLPIPE); - - /* Set the sample rate on the streaming interface endpoint */ - if ((ErrorCode = USB_Host_SendControlRequest(&SampleRate)) != HOST_SENDCONTROL_Successful) - { - printf_P(PSTR(ESC_FG_RED "Could not set requested Audio sample rate.\r\n" - " -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); - - LEDs_SetAllLEDs(LEDMASK_USB_ERROR); - USB_Host_SetDeviceConfiguration(0); - return; - } - - /* Sample reload timer initialization */ - TIMSK0 = (1 << OCIE0A); - OCR0A = ((F_CPU / 8 / 48000) - 1); - TCCR0A = (1 << WGM01); // CTC mode - TCCR0B = (1 << CS01); // Fcpu/8 speed - - puts_P(PSTR("Speaker Enumerated.\r\n")); - LEDs_SetAllLEDs(LEDMASK_USB_READY); -} - -/** Event handler for the USB_HostError event. This indicates that a hardware error occurred while in host mode. */ -void EVENT_USB_Host_HostError(const uint8_t ErrorCode) -{ - USB_Disable(); - - printf_P(PSTR(ESC_FG_RED "Host Mode Error\r\n" - " -- Error Code %d\r\n" ESC_FG_WHITE), ErrorCode); - - LEDs_SetAllLEDs(LEDMASK_USB_ERROR); - for(;;); -} - -/** Event handler for the USB_DeviceEnumerationFailed event. This indicates that a problem occurred while - * enumerating an attached USB device. - */ -void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, - const uint8_t SubErrorCode) -{ - printf_P(PSTR(ESC_FG_RED "Dev Enum Error\r\n" - " -- Error Code %d\r\n" - " -- Sub Error Code %d\r\n" - " -- In State %d\r\n" ESC_FG_WHITE), ErrorCode, SubErrorCode, USB_HostState); - - LEDs_SetAllLEDs(LEDMASK_USB_ERROR); -} - -/** ISR to handle the reloading of the endpoint with the next sample. */ -ISR(TIMER0_COMPA_vect, ISR_BLOCK) -{ - uint8_t PrevPipe = Pipe_GetCurrentPipe(); - - Pipe_SelectPipe(AUDIO_DATA_OUT_PIPE); - Pipe_Unfreeze(); - - /* Check if the current pipe can be written to (device ready for more data) */ - if (Pipe_IsOUTReady()) - { - int16_t AudioSample; - - #if defined(USE_TEST_TONE) - static uint8_t SquareWaveSampleCount; - static int16_t CurrentWaveValue; - - /* In test tone mode, generate a square wave at 1/256 of the sample rate */ - if (SquareWaveSampleCount++ == 0xFF) - CurrentWaveValue ^= 0x8000; - - /* Only generate audio if the board button is being pressed */ - AudioSample = (Buttons_GetStatus() & BUTTONS_BUTTON1) ? CurrentWaveValue : 0; - #else - /* Audio sample is ADC value scaled to fit the entire range */ - AudioSample = ((SAMPLE_MAX_RANGE / ADC_MAX_RANGE) * ADC_GetResult()); - - #if defined(MICROPHONE_BIASED_TO_HALF_RAIL) - /* Microphone is biased to half rail voltage, subtract the bias from the sample value */ - AudioSample -= (SAMPLE_MAX_RANGE / 2); - #endif - #endif - - Pipe_Write_16_LE(AudioSample); - Pipe_Write_16_LE(AudioSample); - - if (!(Pipe_IsReadWriteAllowed())) - Pipe_ClearOUT(); - } - - Pipe_Freeze(); - Pipe_SelectPipe(PrevPipe); -} - diff --git a/lib/lufa/Demos/Host/LowLevel/AudioOutputHost/AudioOutputHost.h b/lib/lufa/Demos/Host/LowLevel/AudioOutputHost/AudioOutputHost.h deleted file mode 100644 index a37113b84a..0000000000 --- a/lib/lufa/Demos/Host/LowLevel/AudioOutputHost/AudioOutputHost.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - LUFA Library - Copyright (C) Dean Camera, 2017. - - dean [at] fourwalledcubicle [dot] com - www.lufa-lib.org -*/ - -/* - Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) - - Permission to use, copy, modify, distribute, and sell this - software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in - all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the - software without specific, written prior permission. - - The author disclaims all warranties with regard to this - software, including all implied warranties of merchantability - and fitness. In no event shall the author be liable for any - special, indirect or consequential damages or any damages - whatsoever resulting from loss of use, data or profits, whether - in an action of contract, negligence or other tortious action, - arising out of or in connection with the use or performance of - this software. -*/ - -/** \file - * - * Header file for AudioOutputHost.c. - */ - -#ifndef _AUDIO_OUTPUT_HOST_H_ -#define _AUDIO_OUTPUT_HOST_H_ - - /* Includes: */ - #include <avr/io.h> - #include <avr/wdt.h> - #include <avr/pgmspace.h> - #include <avr/power.h> - #include <avr/interrupt.h> - #include <stdio.h> - - #include <LUFA/Drivers/Misc/TerminalCodes.h> - #include <LUFA/Drivers/USB/USB.h> - #include <LUFA/Drivers/Peripheral/Serial.h> - #include <LUFA/Drivers/Peripheral/ADC.h> - #include <LUFA/Drivers/Board/LEDs.h> - #include <LUFA/Drivers/Board/Buttons.h> - #include <LUFA/Platform/Platform.h> - - #include "ConfigDescriptor.h" - #include "Config/AppConfig.h" - - /* Macros: */ - /** Maximum audio sample value for the microphone input. */ - #define SAMPLE_MAX_RANGE 0xFFFF - - /** Maximum ADC range for the microphone input. */ - #define ADC_MAX_RANGE 0x3FF - - /** 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: */ - void SetupHardware(void); - - void EVENT_USB_Host_HostError(const uint8_t ErrorCode); - void EVENT_USB_Host_DeviceAttached(void); - void EVENT_USB_Host_DeviceUnattached(void); - void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, - const uint8_t SubErrorCode); - void EVENT_USB_Host_DeviceEnumerationComplete(void); - -#endif - diff --git a/lib/lufa/Demos/Host/LowLevel/AudioOutputHost/AudioOutputHost.txt b/lib/lufa/Demos/Host/LowLevel/AudioOutputHost/AudioOutputHost.txt deleted file mode 100644 index 5e79a33e38..0000000000 --- a/lib/lufa/Demos/Host/LowLevel/AudioOutputHost/AudioOutputHost.txt +++ /dev/null @@ -1,83 +0,0 @@ -/** \file - * - * This file contains special DoxyGen information for the generation of the main page and other special - * documentation pages. It is not a project source file. - */ - -/** \mainpage Audio Output Host Demo - * - * \section Sec_Compat Demo Compatibility: - * - * The following list indicates what microcontrollers are compatible with this demo. - * - * \li Series 7 USB AVRs (AT90USBxxx7) - * - * \section Sec_Info USB Information: - * - * The following table gives a rundown of the USB utilization of this demo. - * - * <table> - * <tr> - * <td><b>USB Mode:</b></td> - * <td>Host</td> - * </tr> - * <tr> - * <td><b>USB Class:</b></td> - * <td>Audio Class</td> - * </tr> - * <tr> - * <td><b>USB Subclass:</b></td> - * <td>Standard Audio Device</td> - * </tr> - * <tr> - * <td><b>Relevant Standards:</b></td> - * <td>USBIF Audio 1.0 Class Specification \n - * USBIF Audio 1.0 Class Terminal Types Specification \n - * USBIF Audio 1.0 Data Formats Specification</td> - * </tr> - * <tr> - * <td><b>Supported USB Speeds:</b></td> - * <td>Full Speed Mode</td> - * </tr> - * </table> - * - * \section Sec_Description Project Description: - * - * Audio Output host demonstration application. This gives a simple reference - * application for implementing a USB Audio host, for USB Audio devices using - * the USB Audio 1.0 class profile. - * - * By default, the demo will produce a square wave test tone when the board - * button is pressed. If USE_TEST_TONE is not defined in the project makefile, - * incoming audio from the ADC channel 1 will be sampled and sent to the attached - * USB audio device instead. - * - * \section Sec_Options Project Options - * - * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value. - * - * <table> - * <tr> - * <th><b>Define Name:</b></th> - * <th><b>Location:</b></th> - * <th><b>Description:</b></th> - * </tr> - * <tr> - * <td>MIC_IN_ADC_CHANNEL</td> - * <td>AppConfig.h</td> - * <td>Sets the ADC channel used by the demo for the input audio samples from an attached microphone.</td> - * </tr> - * <tr> - * <td>USE_TEST_TONE</td> - * <td>AppConfig.h</td> - * <td>When defined, this alters the demo to produce a square wave test tone when the first board button is pressed - * instead of sampling the board microphone.</td> - * </tr> - * <tr> - * <td>MICROPHONE_BIASED_TO_HALF_RAIL</td> - * <td>AppConfig.h</td> - * <td>When defined, this alters the demo so that the half VCC bias of the microphone input is subtracted.</td> - * </tr> - * </table> - */ - diff --git a/lib/lufa/Demos/Host/LowLevel/AudioOutputHost/Config/AppConfig.h b/lib/lufa/Demos/Host/LowLevel/AudioOutputHost/Config/AppConfig.h deleted file mode 100644 index ff8ed270de..0000000000 --- a/lib/lufa/Demos/Host/LowLevel/AudioOutputHost/Config/AppConfig.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - LUFA Library - Copyright (C) Dean Camera, 2017. - - dean [at] fourwalledcubicle [dot] com - www.lufa-lib.org -*/ - -/* - Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) - - Permission to use, copy, modify, distribute, and sell this - software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in - all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the - software without specific, written prior permission. - - The author disclaims all warranties with regard to this - software, including all implied warranties of merchantability - and fitness. In no event shall the author be liable for any - special, indirect or consequential damages or any damages - whatsoever resulting from loss of use, data or profits, whether - in an action of contract, negligence or other tortious action, - arising out of or in connection with the use or performance of - this software. -*/ - -/** \file - * \brief Application Configuration Header File - * - * This is a header file which is be used to configure some of - * the application's compile time options, as an alternative to - * specifying the compile time constants supplied through a - * makefile or build system. - * - * For information on what each token does, refer to the - * \ref Sec_Options section of the application documentation. - */ - -#ifndef _APP_CONFIG_H_ -#define _APP_CONFIG_H_ - - #define MIC_IN_ADC_CHANNEL 2 - - #define MICROPHONE_BIASED_TO_HALF_RAIL - #define USE_TEST_TONE - -#endif diff --git a/lib/lufa/Demos/Host/LowLevel/AudioOutputHost/Config/LUFAConfig.h b/lib/lufa/Demos/Host/LowLevel/AudioOutputHost/Config/LUFAConfig.h deleted file mode 100644 index 197122fce1..0000000000 --- a/lib/lufa/Demos/Host/LowLevel/AudioOutputHost/Config/LUFAConfig.h +++ /dev/null @@ -1,93 +0,0 @@ -/* - LUFA Library - Copyright (C) Dean Camera, 2017. - - dean [at] fourwalledcubicle [dot] com - www.lufa-lib.org -*/ - -/* - Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) - - Permission to use, copy, modify, distribute, and sell this - software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in - all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the - software without specific, written prior permission. - - The author disclaims all warranties with regard to this - software, including all implied warranties of merchantability - and fitness. In no event shall the author be liable for any - special, indirect or consequential damages or any damages - whatsoever resulting from loss of use, data or profits, whether - in an action of contract, negligence or other tortious action, - arising out of or in connection with the use or performance of - this software. -*/ - -/** \file - * \brief LUFA Library Configuration Header File - * - * This header file is used to configure LUFA's compile time options, - * as an alternative to the compile time constants supplied through - * a makefile. - * - * For information on what each token does, refer to the LUFA - * manual section "Summary of Compile Tokens". - */ - -#ifndef _LUFA_CONFIG_H_ -#define _LUFA_CONFIG_H_ - - #if (ARCH == ARCH_AVR8) - - /* Non-USB Related Configuration Tokens: */ -// #define DISABLE_TERMINAL_CODES - - /* USB Class Driver Related Tokens: */ -// #define HID_HOST_BOOT_PROTOCOL_ONLY -// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} -// #define HID_USAGE_STACK_DEPTH {Insert Value Here} -// #define HID_MAX_COLLECTIONS {Insert Value Here} -// #define HID_MAX_REPORTITEMS {Insert Value Here} -// #define HID_MAX_REPORT_IDS {Insert Value Here} -// #define NO_CLASS_DRIVER_AUTOFLUSH - - /* General USB Driver Related Tokens: */ -// #define ORDERED_EP_CONFIG - #define USE_STATIC_OPTIONS (USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) -// #define USB_DEVICE_ONLY - #define USB_HOST_ONLY -// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} -// #define NO_LIMITED_CONTROLLER_CONNECT -// #define NO_SOF_EVENTS - - /* USB Device Mode Driver Related Tokens: */ -// #define USE_RAM_DESCRIPTORS -// #define USE_FLASH_DESCRIPTORS -// #define USE_EEPROM_DESCRIPTORS -// #define NO_INTERNAL_SERIAL -// #define FIXED_CONTROL_ENDPOINT_SIZE {Insert Value Here} -// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} -// #define FIXED_NUM_CONFIGURATIONS {Insert Value Here} -// #define CONTROL_ONLY_DEVICE -// #define INTERRUPT_CONTROL_ENDPOINT -// #define NO_DEVICE_REMOTE_WAKEUP -// #define NO_DEVICE_SELF_POWER - - /* USB Host Mode Driver Related Tokens: */ -// #define HOST_STATE_AS_GPIOR {Insert Value Here} -// #define USB_HOST_TIMEOUT_MS {Insert Value Here} -// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} -// #define NO_AUTO_VBUS_MANAGEMENT -// #define INVERTED_VBUS_ENABLE_LINE - - #else - - #error Unsupported architecture for this LUFA configuration file. - - #endif -#endif diff --git a/lib/lufa/Demos/Host/LowLevel/AudioOutputHost/ConfigDescriptor.c b/lib/lufa/Demos/Host/LowLevel/AudioOutputHost/ConfigDescriptor.c deleted file mode 100644 index c9d442107b..0000000000 --- a/lib/lufa/Demos/Host/LowLevel/AudioOutputHost/ConfigDescriptor.c +++ /dev/null @@ -1,220 +0,0 @@ -/* - LUFA Library - Copyright (C) Dean Camera, 2017. - - dean [at] fourwalledcubicle [dot] com - www.lufa-lib.org -*/ - -/* - Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) - - Permission to use, copy, modify, distribute, and sell this - software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in - all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the - software without specific, written prior permission. - - The author disclaims all warranties with regard to this - software, including all implied warranties of merchantability - and fitness. In no event shall the author be liable for any - special, indirect or consequential damages or any damages - whatsoever resulting from loss of use, data or profits, whether - in an action of contract, negligence or other tortious action, - arising out of or in connection with the use or performance of - this software. -*/ - -/** \file - * - * USB Device Configuration Descriptor processing routines, to determine the correct pipe configurations - * needed to communication with an attached USB device. Descriptors are special computer-readable structures - * which the host requests upon device enumeration, to determine the device's capabilities and functions. - */ - -#include "ConfigDescriptor.h" - -/** Index of the currently used Audio Streaming Interface within the device. */ -uint8_t StreamingInterfaceIndex = 0; - -/** Alternative Setting of the currently used Audio Streaming Interface within the device. */ -uint8_t StreamingInterfaceAltSetting = 0; - -/** Address of the streaming audio endpoint currently in use within the device. */ -uint8_t StreamingEndpointAddress = 0; - - -/** Reads and processes an attached device's descriptors, to determine compatibility and pipe configurations. This - * routine will read in the entire configuration descriptor, and configure the hosts pipes to correctly communicate - * with compatible devices. - * - * This routine searches for a Streaming Audio interface descriptor containing a valid Isochronous audio endpoint. - * - * \return An error code from the \ref AudioHost_GetConfigDescriptorDataCodes_t enum. - */ -uint8_t ProcessConfigurationDescriptor(void) -{ - uint8_t ConfigDescriptorData[512]; - void* CurrConfigLocation = ConfigDescriptorData; - uint16_t CurrConfigBytesRem; - - USB_Descriptor_Interface_t* AudioControlInterface = NULL; - USB_Descriptor_Interface_t* AudioStreamingInterface = NULL; - USB_Descriptor_Endpoint_t* DataOUTEndpoint = NULL; - - /* Retrieve the entire configuration descriptor into the allocated buffer */ - switch (USB_Host_GetDeviceConfigDescriptor(1, &CurrConfigBytesRem, ConfigDescriptorData, sizeof(ConfigDescriptorData))) - { - case HOST_GETCONFIG_Successful: - break; - case HOST_GETCONFIG_InvalidData: - return InvalidConfigDataReturned; - case HOST_GETCONFIG_BuffOverflow: - return DescriptorTooLarge; - default: - return ControlError; - } - - while (!(DataOUTEndpoint)) - { - /* See if we've found a likely compatible interface, and if there is an endpoint within that interface */ - if (!(AudioControlInterface) || - USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, - DComp_NextAudioInterfaceDataEndpoint) != DESCRIPTOR_SEARCH_COMP_Found) - { - /* Check if we haven't found an Audio Control interface yet, or if we have run out of related Audio Streaming interfaces */ - if (!(AudioControlInterface) || - USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, - DComp_NextAudioStreamInterface) != DESCRIPTOR_SEARCH_COMP_Found) - { - /* Find a new Audio Control interface if the current one doesn't contain a compatible streaming interface */ - if (USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, - DComp_NextAudioControlInterface) != DESCRIPTOR_SEARCH_COMP_Found) - { - /* Descriptor not found, error out */ - return NoCompatibleInterfaceFound; - } - - /* Save the interface in case we need to refer back to it later */ - AudioControlInterface = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Interface_t); - - /* Find the next Audio Streaming interface within that Audio Control interface */ - if (USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, - DComp_NextAudioStreamInterface) != DESCRIPTOR_SEARCH_COMP_Found) - { - /* Descriptor not found, error out */ - return NoCompatibleInterfaceFound; - } - } - - /* Save the interface in case we need to refer back to it later */ - AudioStreamingInterface = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Interface_t); - - /* Skip the remainder of the loop as we have not found an endpoint yet */ - continue; - } - - /* Retrieve the endpoint address from the endpoint descriptor */ - USB_Descriptor_Endpoint_t* EndpointData = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Endpoint_t); - - /* Save the endpoint if it is an OUT type endpoint */ - if ((EndpointData->EndpointAddress & ENDPOINT_DIR_MASK) == ENDPOINT_DIR_OUT) - DataOUTEndpoint = EndpointData; - } - - StreamingInterfaceIndex = AudioStreamingInterface->InterfaceNumber; - StreamingInterfaceAltSetting = AudioStreamingInterface->AlternateSetting; - StreamingEndpointAddress = DataOUTEndpoint->EndpointAddress; - - /* Configure the Audio data OUT pipe */ - Pipe_ConfigurePipe(AUDIO_DATA_OUT_PIPE, EP_TYPE_ISOCHRONOUS, DataOUTEndpoint->EndpointAddress, DataOUTEndpoint->EndpointSize, 2); - - /* Valid data found, return success */ - return SuccessfulConfigRead; -} - -/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's - * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration - * descriptor processing if an incompatible descriptor configuration is found. - * - * This comparator searches for the next Interface descriptor of the correct Audio Control Class, Subclass and Protocol values. - * - * \return A value from the DSEARCH_Return_ErrorCodes_t enum - */ -uint8_t DComp_NextAudioControlInterface(void* CurrentDescriptor) -{ - USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t); - - if (Header->Type == DTYPE_Interface) - { - USB_Descriptor_Interface_t* Interface = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Interface_t); - - if ((Interface->Class == AUDIO_CSCP_AudioClass) && - (Interface->SubClass == AUDIO_CSCP_ControlSubclass) && - (Interface->Protocol == AUDIO_CSCP_ControlProtocol)) - { - return DESCRIPTOR_SEARCH_Found; - } - } - - return DESCRIPTOR_SEARCH_NotFound; -} - -/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's - * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration - * descriptor processing if an incompatible descriptor configuration is found. - * - * This comparator searches for the next Interface descriptor of the correct Audio Streaming Class, Subclass and Protocol values. - * - * \return A value from the DSEARCH_Return_ErrorCodes_t enum - */ -uint8_t DComp_NextAudioStreamInterface(void* CurrentDescriptor) -{ - USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t); - - if (Header->Type == DTYPE_Interface) - { - USB_Descriptor_Interface_t* Interface = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Interface_t); - - if ((Interface->Class == AUDIO_CSCP_AudioClass) && - (Interface->SubClass == AUDIO_CSCP_AudioStreamingSubclass) && - (Interface->Protocol == AUDIO_CSCP_StreamingProtocol)) - { - return DESCRIPTOR_SEARCH_Found; - } - } - - return DESCRIPTOR_SEARCH_NotFound; -} - -/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's - * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration - * descriptor processing if an incompatible descriptor configuration is found. - * - * This comparator searches for the next Isochronous Endpoint descriptor within the current interface, aborting the - * search if another interface descriptor is found before the next endpoint. - * - * \return A value from the DSEARCH_Return_ErrorCodes_t enum - */ -uint8_t DComp_NextAudioInterfaceDataEndpoint(void* CurrentDescriptor) -{ - USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t); - - if (Header->Type == DTYPE_Endpoint) - { - USB_Descriptor_Endpoint_t* Endpoint = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Endpoint_t); - - if ((Endpoint->Attributes & EP_TYPE_MASK) == EP_TYPE_ISOCHRONOUS) - return DESCRIPTOR_SEARCH_Found; - } - else if (Header->Type == DTYPE_Interface) - { - return DESCRIPTOR_SEARCH_Fail; - } - - return DESCRIPTOR_SEARCH_NotFound; -} - diff --git a/lib/lufa/Demos/Host/LowLevel/AudioOutputHost/ConfigDescriptor.h b/lib/lufa/Demos/Host/LowLevel/AudioOutputHost/ConfigDescriptor.h deleted file mode 100644 index 0ed865edcc..0000000000 --- a/lib/lufa/Demos/Host/LowLevel/AudioOutputHost/ConfigDescriptor.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - LUFA Library - Copyright (C) Dean Camera, 2017. - - dean [at] fourwalledcubicle [dot] com - www.lufa-lib.org -*/ - -/* - Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) - - Permission to use, copy, modify, distribute, and sell this - software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in - all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the - software without specific, written prior permission. - - The author disclaims all warranties with regard to this - software, including all implied warranties of merchantability - and fitness. In no event shall the author be liable for any - special, indirect or consequential damages or any damages - whatsoever resulting from loss of use, data or profits, whether - in an action of contract, negligence or other tortious action, - arising out of or in connection with the use or performance of - this software. -*/ - -/** \file - * - * Header file for ConfigDescriptor.c. - */ - -#ifndef _CONFIGDESCRIPTOR_H_ -#define _CONFIGDESCRIPTOR_H_ - - /* Includes: */ - #include <LUFA/Drivers/USB/USB.h> - - #include "AudioOutputHost.h" - #include "Config/AppConfig.h" - - /* Macros: */ - /** Pipe address for the Audio data OUT pipe. */ - #define AUDIO_DATA_OUT_PIPE (PIPE_DIR_OUT | 1) - - /* Enums: */ - /** Enum for the possible return codes of the \ref ProcessConfigurationDescriptor() function. */ - enum AudioHost_GetConfigDescriptor |