aboutsummaryrefslogtreecommitdiff
path: root/Demos/Host/LowLevel/AudioOutputHost/AudioOutputHost.c
diff options
context:
space:
mode:
authorDean Camera <[email protected]>2011-06-09 04:08:03 +0000
committerDean Camera <[email protected]>2011-06-09 04:08:03 +0000
commit1f1d0710f379a8b08ef646cbadb63d92c35e47fb (patch)
tree886a528a8ba721733735c1cded2462e6992e11f6 /Demos/Host/LowLevel/AudioOutputHost/AudioOutputHost.c
parent0bf5064aec5ac43ba2b25d44528bebb27db2f117 (diff)
downloadqmk_firmware-1f1d0710f379a8b08ef646cbadb63d92c35e47fb.tar.gz
qmk_firmware-1f1d0710f379a8b08ef646cbadb63d92c35e47fb.zip
Add new Audio Class Driver Host demos.
Fix errors in the new Audio Host mode Class Driver, which would have prevented data from being sent or received properly by the device. Add microphone/square wave generation compile time switch to the Low Level AudioOutput Host demo.
Diffstat (limited to 'Demos/Host/LowLevel/AudioOutputHost/AudioOutputHost.c')
-rw-r--r--Demos/Host/LowLevel/AudioOutputHost/AudioOutputHost.c31
1 files changed, 23 insertions, 8 deletions
diff --git a/Demos/Host/LowLevel/AudioOutputHost/AudioOutputHost.c b/Demos/Host/LowLevel/AudioOutputHost/AudioOutputHost.c
index 15d00c0e12..1fb64a1a41 100644
--- a/Demos/Host/LowLevel/AudioOutputHost/AudioOutputHost.c
+++ b/Demos/Host/LowLevel/AudioOutputHost/AudioOutputHost.c
@@ -68,6 +68,8 @@ void SetupHardware(void)
/* 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();
@@ -234,17 +236,30 @@ ISR(TIMER0_COMPA_vect, ISR_BLOCK)
/* Check if the current pipe can be written to (device ready for more data) */
if (Pipe_IsOUTReady())
{
- static uint8_t SquareWaveSampleCount;
- static int16_t CurrentWaveValue;
+ int16_t AudioSample;
+
+ #if defined(USE_TEST_TONE)
+ static uint8_t SquareWaveSampleCount;
+ static int16_t CurrentWaveValue;
- if (SquareWaveSampleCount++ == 0xFF)
- CurrentWaveValue ^= 0x8000;
+ /* 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 */
- int16_t Sample_16Bit = (Buttons_GetStatus() & BUTTONS_BUTTON1) ? CurrentWaveValue : 0;
+ /* 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(Sample_16Bit);
- Pipe_Write_16_LE(Sample_16Bit);
+ Pipe_Write_16_LE(AudioSample);
+ Pipe_Write_16_LE(AudioSample);
if (!(Pipe_IsReadWriteAllowed()))
Pipe_ClearOUT();