Added default test tone generation mode to the Device mode AudioInput demos.
authorDean Camera <dean@fourwalledcubicle.com>
Wed, 20 Oct 2010 07:39:11 +0000 (07:39 +0000)
committerDean Camera <dean@fourwalledcubicle.com>
Wed, 20 Oct 2010 07:39:11 +0000 (07:39 +0000)
Demos/Device/ClassDriver/AudioInput/AudioInput.c
Demos/Device/ClassDriver/AudioInput/AudioInput.h
Demos/Device/ClassDriver/AudioInput/AudioInput.txt
Demos/Device/ClassDriver/AudioInput/makefile
Demos/Device/LowLevel/AudioInput/AudioInput.c
Demos/Device/LowLevel/AudioInput/AudioInput.h
Demos/Device/LowLevel/AudioInput/AudioInput.txt
Demos/Device/LowLevel/AudioInput/makefile
LUFA/ManPages/ChangeLog.txt
LUFA/ManPages/FutureChanges.txt

index dc7a076..54e70f6 100644 (file)
@@ -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);
        }
 }
index 8ed6096..741a091 100644 (file)
@@ -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>
index 830163f..fea31b6 100644 (file)
  *  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.
  *    <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>
index 8eda3c6..3c26c97 100644 (file)
@@ -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
index a984a2a..e681f3b 100644 (file)
@@ -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);
index 53b6351..dfad137 100644 (file)
@@ -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: */
index 39d78e7..fea31b6 100644 (file)
  *  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.
  *    <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>
index 1b7fd07..15ceba7 100644 (file)
@@ -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
index 0d62d0d..0dbdde5 100644 (file)
@@ -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
index 15d5df4..4ff2e2a 100644 (file)
@@ -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.
   *
   *      -# 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