From 23c1653efe58d436504c01438133c1ef7b3f8fbc Mon Sep 17 00:00:00 2001
From: Dean Camera <dean@fourwalledcubicle.com>
Date: Tue, 28 Jul 2009 10:49:33 +0000
Subject: Make LowLevel AudioOutput demo work in the same way as the
 ClassDriver AudioOutput demo for LEDs output.

---
 Demos/Device/LowLevel/AudioOutput/AudioOutput.c | 35 +++++++++----------------
 1 file changed, 12 insertions(+), 23 deletions(-)

(limited to 'Demos')

diff --git a/Demos/Device/LowLevel/AudioOutput/AudioOutput.c b/Demos/Device/LowLevel/AudioOutput/AudioOutput.c
index 9b2bb3991..2b2cdcbbf 100644
--- a/Demos/Device/LowLevel/AudioOutput/AudioOutput.c
+++ b/Demos/Device/LowLevel/AudioOutput/AudioOutput.c
@@ -210,10 +210,10 @@ void USB_Audio_Task(void)
 		int8_t  LeftSample_8Bit   = (LeftSample_16Bit  >> 8);
 		int8_t  RightSample_8Bit  = (RightSample_16Bit >> 8);
 			
-#if defined(AUDIO_OUT_MONO)
 		/* Mix the two channels together to produce a mono, 8-bit sample */
 		int8_t  MixedSample_8Bit  = (((int16_t)LeftSample_8Bit + (int16_t)RightSample_8Bit) >> 1);
 
+#if defined(AUDIO_OUT_MONO)
 		/* Load the sample into the PWM timer channel */
 		OCR3A = ((uint8_t)MixedSample_8Bit ^ (1 << 7));
 #elif defined(AUDIO_OUT_STEREO)
@@ -221,36 +221,25 @@ void USB_Audio_Task(void)
 		OCR3A = ((uint8_t)LeftSample_8Bit  ^ (1 << 7));
 		OCR3B = ((uint8_t)RightSample_8Bit ^ (1 << 7));
 #elif defined(AUDIO_OUT_PORTC)
-		/* Mix the two channels together to produce a mono, 8-bit sample */
-		int8_t  MixedSample_8Bit  = (((int16_t)LeftSample_8Bit + (int16_t)RightSample_8Bit) >> 1);
-
+		/* Load the 8-bit mixed sample into PORTC */
 		PORTC = MixedSample_8Bit;
 #else
 		uint8_t LEDMask = LEDS_NO_LEDS;
 
-		/* Make left channel positive (absolute) */
-		if (LeftSample_8Bit < 0)
-		  LeftSample_8Bit = -LeftSample_8Bit;
-
-		/* Make right channel positive (absolute) */
-		if (RightSample_8Bit < 0)
-		  RightSample_8Bit = -RightSample_8Bit;
+		/* Make mixed sample value positive (absolute) */
+		MixedSample_8Bit = abs(MixedSample_8Bit);
 
-		/* Set first LED based on sample value */
-		if (LeftSample_8Bit < ((128 / 8) * 1))
-		  LEDMask |= LEDS_LED2;
-		else if (LeftSample_8Bit < ((128 / 8) * 3))
-		  LEDMask |= (LEDS_LED1 | LEDS_LED2);
-		else
+		if (MixedSample_8Bit > ((128 / 8) * 1))
 		  LEDMask |= LEDS_LED1;
+		  
+		if (MixedSample_8Bit > ((128 / 8) * 2))
+		  LEDMask |= LEDS_LED2;
+		  
+		if (MixedSample_8Bit > ((128 / 8) * 3))
+		  LEDMask |= LEDS_LED3;
 
-		/* Set second LED based on sample value */
-		if (RightSample_8Bit < ((128 / 8) * 1))
+		if (MixedSample_8Bit > ((128 / 8) * 4))
 		  LEDMask |= LEDS_LED4;
-		else if (RightSample_8Bit < ((128 / 8) * 3))
-		  LEDMask |= (LEDS_LED3 | LEDS_LED4);
-		else
-		  LEDMask |= LEDS_LED3;
 		  
 		LEDs_SetAllLEDs(LEDMask);
 #endif
-- 
cgit v1.2.3