diff options
-rw-r--r-- | Demos/Device/ClassDriver/AudioInput/AudioInput.c | 33 | ||||
-rw-r--r-- | Demos/Device/ClassDriver/AudioInput/AudioInput.h | 1 | ||||
-rw-r--r-- | Demos/Device/ClassDriver/AudioInput/AudioInput.txt | 16 | ||||
-rw-r--r-- | Demos/Device/ClassDriver/AudioInput/makefile | 1 | ||||
-rw-r--r-- | Demos/Device/LowLevel/AudioInput/AudioInput.c | 29 | ||||
-rw-r--r-- | Demos/Device/LowLevel/AudioInput/AudioInput.h | 1 | ||||
-rw-r--r-- | Demos/Device/LowLevel/AudioInput/AudioInput.txt | 16 | ||||
-rw-r--r-- | Demos/Device/LowLevel/AudioInput/makefile | 1 | ||||
-rw-r--r-- | LUFA/ManPages/ChangeLog.txt | 1 | ||||
-rw-r--r-- | LUFA/ManPages/FutureChanges.txt | 5 |
10 files changed, 78 insertions, 26 deletions
diff --git a/Demos/Device/ClassDriver/AudioInput/AudioInput.c b/Demos/Device/ClassDriver/AudioInput/AudioInput.c index dc7a076e4..54e70f6b1 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 8ed6096f0..741a091d0 100644 --- a/Demos/Device/ClassDriver/AudioInput/AudioInput.h +++ b/Demos/Device/ClassDriver/AudioInput/AudioInput.h @@ -44,6 +44,7 @@ #include <LUFA/Version.h> #include <LUFA/Drivers/Board/LEDs.h> + #include <LUFA/Drivers/Board/Buttons.h> #include <LUFA/Drivers/Peripheral/ADC.h> #include <LUFA/Drivers/USB/USB.h> #include <LUFA/Drivers/USB/Class/Audio.h> diff --git a/Demos/Device/ClassDriver/AudioInput/AudioInput.txt b/Demos/Device/ClassDriver/AudioInput/AudioInput.txt index 830163f3b..fea31b66e 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 @@ * <td><b>Description:</b></td> * </tr> * <tr> + * <td>USE_TEST_TONE</td> + * <td>Makefile LUFA_OPTS</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>Makefile LUFA_OPTS</td> * <td>When defined, this alters the demo so that the half VCC bias of the microphone input is subtracted.</td> diff --git a/Demos/Device/ClassDriver/AudioInput/makefile b/Demos/Device/ClassDriver/AudioInput/makefile index 8eda3c68b..3c26c97ed 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 a984a2ab8..e681f3bd1 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 53b63517b..dfad137d7 100644 --- a/Demos/Device/LowLevel/AudioInput/AudioInput.h +++ b/Demos/Device/LowLevel/AudioInput/AudioInput.h @@ -47,6 +47,7 @@ #include <LUFA/Version.h> #include <LUFA/Drivers/USB/USB.h> #include <LUFA/Drivers/Board/LEDs.h> + #include <LUFA/Drivers/Board/Buttons.h> #include <LUFA/Drivers/Peripheral/ADC.h> /* Macros: */ diff --git a/Demos/Device/LowLevel/AudioInput/AudioInput.txt b/Demos/Device/LowLevel/AudioInput/AudioInput.txt index 39d78e784..fea31b66e 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 @@ * <td><b>Description:</b></td> * </tr> * <tr> + * <td>USE_TEST_TONE</td> + * <td>Makefile LUFA_OPTS</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>Makefile LUFA_OPTS</td> * <td>When defined, this alters the demo so that the half VCC bias of the microphone input is subtracted.</td> diff --git a/Demos/Device/LowLevel/AudioInput/makefile b/Demos/Device/LowLevel/AudioInput/makefile index 1b7fd07a3..15ceba7a4 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 0d62d0d1a..0dbdde5d9 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 * * <b>Changed:</b> * - 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 15d5df492..4ff2e2a70 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 |