From 41babf1cb78a2a8e05f40f5de61c3f52bb794fc4 Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Thu, 30 Jul 2009 14:06:52 +0000 Subject: Fix incorrect configuration in the ClassDriver AudioOutput demo. Make all audio device Class Driver functions require a reference to the Audio class instance, so that the endpoint size can be checked (and to standardize the APIs). Make LEDs more responsive in the AudioOutput device demos. --- Demos/Device/ClassDriver/AudioOutput/AudioOutput.c | 20 ++++++++++---------- Demos/Device/ClassDriver/AudioOutput/AudioOutput.h | 1 + Demos/Device/ClassDriver/AudioOutput/Descriptors.h | 8 ++------ 3 files changed, 13 insertions(+), 16 deletions(-) (limited to 'Demos/Device/ClassDriver/AudioOutput') diff --git a/Demos/Device/ClassDriver/AudioOutput/AudioOutput.c b/Demos/Device/ClassDriver/AudioOutput/AudioOutput.c index 9a63af68a..2caf6faa6 100644 --- a/Demos/Device/ClassDriver/AudioOutput/AudioOutput.c +++ b/Demos/Device/ClassDriver/AudioOutput/AudioOutput.c @@ -46,8 +46,8 @@ USB_ClassInfo_Audio_Device_t Speaker_Audio_Interface = { .StreamingInterfaceNumber = 1, - .DataINEndpointNumber = AUDIO_STREAM_EPNUM, - .DataINEndpointSize = AUDIO_STREAM_EPSIZE, + .DataOUTEndpointNumber = AUDIO_STREAM_EPNUM, + .DataOUTEndpointSize = AUDIO_STREAM_EPSIZE, }, }; @@ -62,8 +62,7 @@ int main(void) for (;;) { - if (Speaker_Audio_Interface.State.InterfaceEnabled) - ProcessNextSample(); + ProcessNextSample(); Audio_Device_USBTask(&Speaker_Audio_Interface); USB_USBTask(); @@ -90,14 +89,15 @@ void SetupHardware(void) */ void ProcessNextSample(void) { + /* Check if the sample reload timer period has elapsed, and that the USB bus is ready for a new sample */ if ((TIFR0 & (1 << OCF0A)) && Audio_Device_IsSampleReceived(&Speaker_Audio_Interface)) { /* Clear the sample reload timer */ TIFR0 |= (1 << OCF0A); /* Retrieve the signed 16-bit left and right audio samples */ - int16_t LeftSample_16Bit = (int16_t)Audio_Device_ReadSample16(); - int16_t RightSample_16Bit = (int16_t)Audio_Device_ReadSample16(); + int16_t LeftSample_16Bit = Audio_Device_ReadSample16(&Speaker_Audio_Interface); + int16_t RightSample_16Bit = Audio_Device_ReadSample16(&Speaker_Audio_Interface); /* Massage signed 16-bit left and right audio samples into signed 8-bit */ int8_t LeftSample_8Bit = (LeftSample_16Bit >> 8); @@ -124,16 +124,16 @@ void ProcessNextSample(void) /* Make mixed sample value positive (absolute) */ MixedSample_8Bit = abs(MixedSample_8Bit); - if (MixedSample_8Bit > ((128 / 8) * 1)) + if (MixedSample_8Bit > 2) LEDMask |= LEDS_LED1; - if (MixedSample_8Bit > ((128 / 8) * 2)) + if (MixedSample_8Bit > 4) LEDMask |= LEDS_LED2; - if (MixedSample_8Bit > ((128 / 8) * 3)) + if (MixedSample_8Bit > 8) LEDMask |= LEDS_LED3; - if (MixedSample_8Bit > ((128 / 8) * 4)) + if (MixedSample_8Bit > 16) LEDMask |= LEDS_LED4; LEDs_SetAllLEDs(LEDMask); diff --git a/Demos/Device/ClassDriver/AudioOutput/AudioOutput.h b/Demos/Device/ClassDriver/AudioOutput/AudioOutput.h index ea897c954..9846a7634 100644 --- a/Demos/Device/ClassDriver/AudioOutput/AudioOutput.h +++ b/Demos/Device/ClassDriver/AudioOutput/AudioOutput.h @@ -40,6 +40,7 @@ #include #include #include + #include #include "Descriptors.h" diff --git a/Demos/Device/ClassDriver/AudioOutput/Descriptors.h b/Demos/Device/ClassDriver/AudioOutput/Descriptors.h index bc894285c..a9b00a7e9 100644 --- a/Demos/Device/ClassDriver/AudioOutput/Descriptors.h +++ b/Demos/Device/ClassDriver/AudioOutput/Descriptors.h @@ -43,12 +43,8 @@ #include /* Macros: */ - #if defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) || defined(__DOXYGEN__) - /** Endpoint number of the Audio isochronous streaming data endpoint. */ - #define AUDIO_STREAM_EPNUM 1 - #else - #define AUDIO_STREAM_EPNUM 3 - #endif + /** Endpoint number of the Audio isochronous streaming data endpoint. */ + #define AUDIO_STREAM_EPNUM 1 /** Endpoint size in bytes of the Audio isochronous streaming data endpoint. The Windows audio stack requires * at least 192 bytes for correct output, thus the smaller 128 byte maximum endpoint size on some of the smaller -- cgit v1.2.3