diff --git a/Demos/Device/ClassDriver/AudioInput/AudioInput.c b/Demos/Device/ClassDriver/AudioInput/AudioInput.c index dc7a076e44..54e70f6b17 100644 --- a/Demos/Device/ClassDriver/AudioInput/AudioInput.c +++ b/Demos/Device/ClassDriver/AudioInput/AudioInput.c @@ -82,9 +82,10 @@ void SetupHardware(void) /* Hardware Initialization */ LEDs_Init(); - USB_Init(); + Buttons_Init(); ADC_Init(ADC_FREE_RUNNING | ADC_PRESCALE_32); ADC_SetupChannel(MIC_IN_ADC_CHANNEL); + USB_Init(); /* Start the ADC conversion in free running mode */ ADC_StartReading(ADC_REFERENCE_AVCC | ADC_RIGHT_ADJUSTED | MIC_IN_ADC_MUX_MASK); @@ -100,15 +101,29 @@ void ProcessNextSample(void) { /* Clear the sample reload timer compare flag, ready for the next interval */ TIFR0 |= (1 << OCF0A); - - /* Audio sample is ADC value scaled to fit the entire range */ - int16_t AudioSample = ((SAMPLE_MAX_RANGE / ADC_MAX_RANGE) * ADC_GetResult()); - - #if defined(MICROPHONE_BIASED_TO_HALF_RAIL) - /* Microphone is biased to half rail voltage, subtract the bias from the sample value */ - AudioSample -= (SAMPLE_MAX_RANGE / 2); + + 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 - + Audio_Device_WriteSample16(&Microphone_Audio_Interface, AudioSample); } } diff --git a/Demos/Device/ClassDriver/AudioInput/AudioInput.h b/Demos/Device/ClassDriver/AudioInput/AudioInput.h index 8ed6096f05..741a091d00 100644 --- a/Demos/Device/ClassDriver/AudioInput/AudioInput.h +++ b/Demos/Device/ClassDriver/AudioInput/AudioInput.h @@ -44,6 +44,7 @@ #include #include + #include #include #include #include diff --git a/Demos/Device/ClassDriver/AudioInput/AudioInput.txt b/Demos/Device/ClassDriver/AudioInput/AudioInput.txt index 830163f3bb..fea31b66e7 100644 --- a/Demos/Device/ClassDriver/AudioInput/AudioInput.txt +++ b/Demos/Device/ClassDriver/AudioInput/AudioInput.txt @@ -50,11 +50,13 @@ * basic USB Audio 1.0 drivers in all modern OSes (i.e. no special drivers * required). * - * On start-up the system will automatically enumerate and function - * as a USB microphone. Incoming audio from the ADC channel 1 will - * be sampled and sent to the host computer. + * On start-up the system will automatically enumerate and function as a + * USB microphone. 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 host computer instead. * - * To use, connect a microphone to the ADC channel 1. + * When in microphone mode, connect a microphone to the ADC channel 2. * * Under Windows, if a driver request dialogue pops up, select the option * to automatically install the appropriate drivers. @@ -70,6 +72,12 @@ * Description: * * + * USE_TEST_TONE + * Makefile LUFA_OPTS + * 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. + * + * * MICROPHONE_BIASED_TO_HALF_RAIL * Makefile LUFA_OPTS * When defined, this alters the demo so that the half VCC bias of the microphone input is subtracted. diff --git a/Demos/Device/ClassDriver/AudioInput/makefile b/Demos/Device/ClassDriver/AudioInput/makefile index 8eda3c68bd..3c26c97ed9 100644 --- a/Demos/Device/ClassDriver/AudioInput/makefile +++ b/Demos/Device/ClassDriver/AudioInput/makefile @@ -123,6 +123,7 @@ LUFA_OPTS += -D USE_FLASH_DESCRIPTORS LUFA_OPTS += -D USE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" LUFA_OPTS += -D MICROPHONE_BIASED_TO_HALF_RAIL +LUFA_OPTS += -D USE_TEST_TONE # Create the LUFA source path variables by including the LUFA root makefile diff --git a/Demos/Device/LowLevel/AudioInput/AudioInput.c b/Demos/Device/LowLevel/AudioInput/AudioInput.c index a984a2ab80..e681f3bd11 100644 --- a/Demos/Device/LowLevel/AudioInput/AudioInput.c +++ b/Demos/Device/LowLevel/AudioInput/AudioInput.c @@ -68,6 +68,7 @@ void SetupHardware(void) /* Hardware Initialization */ LEDs_Init(); + Buttons_Init(); ADC_Init(ADC_FREE_RUNNING | ADC_PRESCALE_32); ADC_SetupChannel(MIC_IN_ADC_CHANNEL); USB_Init(); @@ -164,13 +165,27 @@ void USB_Audio_Task(void) /* Clear the sample reload timer */ TIFR0 |= (1 << OCF0A); - /* Audio sample is ADC value scaled to fit the entire range */ - int16_t AudioSample = ((SAMPLE_MAX_RANGE / ADC_MAX_RANGE) * ADC_GetResult()); - - #if defined(MICROPHONE_BIASED_TO_HALF_RAIL) - /* Microphone is biased to half rail voltage, subtract the bias from the sample value */ - AudioSample -= (SAMPLE_MAX_RANGE / 2); - #endif + 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 + #end if /* Write the sample to the buffer */ Endpoint_Write_Word_LE(AudioSample); diff --git a/Demos/Device/LowLevel/AudioInput/AudioInput.h b/Demos/Device/LowLevel/AudioInput/AudioInput.h index 53b63517b9..dfad137d76 100644 --- a/Demos/Device/LowLevel/AudioInput/AudioInput.h +++ b/Demos/Device/LowLevel/AudioInput/AudioInput.h @@ -47,6 +47,7 @@ #include #include #include + #include #include /* Macros: */ diff --git a/Demos/Device/LowLevel/AudioInput/AudioInput.txt b/Demos/Device/LowLevel/AudioInput/AudioInput.txt index 39d78e784e..fea31b66e7 100644 --- a/Demos/Device/LowLevel/AudioInput/AudioInput.txt +++ b/Demos/Device/LowLevel/AudioInput/AudioInput.txt @@ -50,11 +50,13 @@ * basic USB Audio 1.0 drivers in all modern OSes (i.e. no special drivers * required). * - * On start-up the system will automatically enumerate and function - * as a USB microphone. Incoming audio from the ADC channel 1 will - * be sampled and sent to the host computer. + * On start-up the system will automatically enumerate and function as a + * USB microphone. 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 host computer instead. * - * To use, connect a microphone to the ADC channel 2. + * When in microphone mode, connect a microphone to the ADC channel 2. * * Under Windows, if a driver request dialogue pops up, select the option * to automatically install the appropriate drivers. @@ -70,6 +72,12 @@ * Description: * * + * USE_TEST_TONE + * Makefile LUFA_OPTS + * 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. + * + * * MICROPHONE_BIASED_TO_HALF_RAIL * Makefile LUFA_OPTS * When defined, this alters the demo so that the half VCC bias of the microphone input is subtracted. diff --git a/Demos/Device/LowLevel/AudioInput/makefile b/Demos/Device/LowLevel/AudioInput/makefile index 1b7fd07a36..15ceba7a42 100644 --- a/Demos/Device/LowLevel/AudioInput/makefile +++ b/Demos/Device/LowLevel/AudioInput/makefile @@ -123,6 +123,7 @@ LUFA_OPTS += -D USE_FLASH_DESCRIPTORS LUFA_OPTS += -D USE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" LUFA_OPTS += -D MICROPHONE_BIASED_TO_HALF_RAIL +LUFA_OPTS += -D USE_TEST_TONE # Create the LUFA source path variables by including the LUFA root makefile diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt index 0d62d0d1a5..0dbdde5d9e 100644 --- a/LUFA/ManPages/ChangeLog.txt +++ b/LUFA/ManPages/ChangeLog.txt @@ -27,6 +27,7 @@ * - Added board hardware driver support for the Blackcat USB JTAG board (thanks to the PSGroove team) * - Added board hardware driver support for the Maximus board (thanks to the PSGroove team) * - Added board hardware driver support for the Minimus board (thanks to the PSGroove team) + * - Added default test tone generation mode to the Device mode AudioInput demos * * Changed: * - Removed complicated logic for the Endpoint_ConfigureEndpoint() function to use inlined or function called versions diff --git a/LUFA/ManPages/FutureChanges.txt b/LUFA/ManPages/FutureChanges.txt index 15d5df492d..4ff2e2a70a 100644 --- a/LUFA/ManPages/FutureChanges.txt +++ b/LUFA/ManPages/FutureChanges.txt @@ -7,7 +7,7 @@ /** \page Page_FutureChanges Future Changes * * Below is a list of future changes which are proposed for the LUFA library, but not yet started/complete. - * This gives an unordered list of future changes which will be available in future releases of the library. + * This gives an unordered list of future changes which may be available in future releases of the library. * If you have an item to add to this list, please contact the library author via email, the LUFA mailing list, * or post your suggestion as an enhancement request to the project bug tracker. * @@ -18,9 +18,10 @@ * -# Add ability to get number of bytes not written with pipe/endpoint write routines after an error * -# Change makefiles to allow for absolute LUFA location to be used * -# Re-add interrupt Pipe/Endpoint support - * -# Fix intermittent device mode enumeration errors * -# Add HID report macros to make HID report editing easier * -# Add endpoint/pipe bank kill macros + * -# Investigate dynamically created device descriptors + * -# Add new event for EVENT_USB_Device_ControlRequest() fired before the internal library request handlers * - Documentation/Support * -# Add detailed overviews of how each demo works * -# Add board overviews