From 61ff4824a904d156e719ab2967b613cf095e908e Mon Sep 17 00:00:00 2001
From: Dean Camera <dean@fourwalledcubicle.com>
Date: Tue, 28 Jul 2009 10:46:20 +0000
Subject: [PATCH] Changed AudioOutput demos to explicitly use timer 3 - the
 smaller USB AVRs where timer 1 was needed instead did not have the endpoint
 size neccesary for good audio throughput anyway.

Fix Benito documentation indicating erronously that the project used the HID USB class instead of the CDC class.
---
 .../ClassDriver/AudioOutput/AudioOutput.c     | 18 +++----
 .../ClassDriver/AudioOutput/AudioOutput.h     | 49 +------------------
 Demos/Device/LowLevel/AudioInput/AudioInput.h |  6 +--
 .../Device/LowLevel/AudioOutput/AudioOutput.c | 14 +++---
 .../Device/LowLevel/AudioOutput/AudioOutput.h | 47 ------------------
 Projects/Benito/Benito.c                      |  2 +-
 Projects/Benito/Benito.txt                    |  9 ++--
 7 files changed, 26 insertions(+), 119 deletions(-)

diff --git a/Demos/Device/ClassDriver/AudioOutput/AudioOutput.c b/Demos/Device/ClassDriver/AudioOutput/AudioOutput.c
index 129fca5f1..bbcd2fd7c 100644
--- a/Demos/Device/ClassDriver/AudioOutput/AudioOutput.c
+++ b/Demos/Device/ClassDriver/AudioOutput/AudioOutput.c
@@ -108,19 +108,19 @@ void ProcessNextSample(void)
 
 #if defined(AUDIO_OUT_MONO)
 		/* Load the sample into the PWM timer channel */
-		OCRxA = ((uint8_t)MixedSample_8Bit ^ (1 << 7));
+		OCR3A = ((uint8_t)MixedSample_8Bit ^ (1 << 7));
 #elif defined(AUDIO_OUT_STEREO)
 		/* Load the dual 8-bit samples into the PWM timer channels */
-		OCRxA = ((uint8_t)LeftSample_8Bit  ^ (1 << 7));
-		OCRxB = ((uint8_t)RightSample_8Bit ^ (1 << 7));
+		OCR3A = ((uint8_t)LeftSample_8Bit  ^ (1 << 7));
+		OCR3B = ((uint8_t)RightSample_8Bit ^ (1 << 7));
 #elif defined(AUDIO_OUT_PORTC)
+		/* Load the 8-bit mixed sample into PORTC */
 		PORTC = MixedSample_8Bit;
 #else
 		uint8_t LEDMask = LEDS_NO_LEDS;
 
 		/* Make mixed sample value positive (absolute) */
-		if (MixedSample_8Bit < 0)
-		  MixedSample_8Bit = -MixedSample_8Bit;
+		MixedSample_8Bit = abs(MixedSample_8Bit);
 
 		if (MixedSample_8Bit > ((128 / 8) * 1))
 		  LEDMask |= LEDS_LED1;
@@ -162,9 +162,9 @@ void EVENT_USB_Connect(void)
 
 #if (defined(AUDIO_OUT_MONO) || defined(AUDIO_OUT_STEREO))
 	/* PWM speaker timer initialization */
-	TCCRxA  = ((1 << WGMx0) | (1 << COMxA1) | (1 << COMxA0)
-	        | (1 << COMxB1) | (1 << COMxB0)); // Set on match, clear on TOP
-	TCCRxB  = ((1 << WGMx2) | (1 << CSx0));  // Fast 8-Bit PWM, Fcpu speed
+	TCCR3A  = ((1 << WGM30) | (1 << COM3A1) | (1 << COM3A0)
+	        | (1 << COM3B1) | (1 << COM3B0)); // Set on match, clear on TOP
+	TCCR3B  = ((1 << WGM32) | (1 << CS30));  // Fast 8-Bit PWM, Fcpu speed
 #endif
 }
 
@@ -178,7 +178,7 @@ void EVENT_USB_Disconnect(void)
 
 #if (defined(AUDIO_OUT_MONO) || defined(AUDIO_OUT_STEREO))
 	/* Stop the PWM generation timer */
-	TCCRxB = 0;
+	TCCR3B = 0;
 #endif
 
 #if defined(AUDIO_OUT_MONO)
diff --git a/Demos/Device/ClassDriver/AudioOutput/AudioOutput.h b/Demos/Device/ClassDriver/AudioOutput/AudioOutput.h
index ecc4e6fae..ea897c954 100644
--- a/Demos/Device/ClassDriver/AudioOutput/AudioOutput.h
+++ b/Demos/Device/ClassDriver/AudioOutput/AudioOutput.h
@@ -50,54 +50,7 @@
 		#include <LUFA/Drivers/USB/USB.h>
 		#include <LUFA/Drivers/USB/Class/Audio.h>
 	
-	/* Macros: */
-		#if (defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR))
-			#define TCCRxA          TCCR3A
-			#define TCCRxB          TCCR3B
-			#define OCRxA           OCR3A
-			#define OCRxB           OCR3B
-			#define WGMx0           WGM30
-			#define WGMx2           WGM32
-			#define COMxA1          COM3A1
-			#define COMxA0          COM3A0
-			#define COMxB1          COM3B1
-			#define COMxB0          COM3B0
-			#define CSx0            CS30
-		#else
-			/** Timer count register used for left channel PWM audio output (or mixed output in mono output mode) */
-			#define TCCRxA          TCCR1A
-
-			/** Timer count register used for right channel PWM audio output */
-			#define TCCRxB          TCCR1B
-
-			/** Timer compare register used for left channel PWM audio output (or mixed output in mono output mode) */
-			#define OCRxA           OCR1A
-
-			/** Timer compare register used for right channel PWM audio output */
-			#define OCRxB           OCR1B
-
-			/** Timer control register mask used to select PWM mode */
-			#define WGMx0           WGM10
-
-			/** Timer control register mask used to select PWM mode */
-			#define WGMx2           WGM12
-
-			/** Timer control register mask used to set, clear or toggle channel output pin on match */
-			#define COMxA1          COM1A1
-
-			/** Timer control register mask used to set, clear or toggle channel output pin on match */
-			#define COMxA0          COM1A0
-
-			/** Timer control register mask used to set, clear or toggle channel output pin on match */
-			#define COMxB1          COM1B1
-
-			/** Timer control register mask used to set, clear or toggle channel output pin on match */
-			#define COMxB0          COM1B0
-
-			/** Timer control register mask used to start the timer at Fcpu clock rate */
-			#define CSx0            CS10
-		#endif
-		
+	/* Macros: */		
 		/** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
 		#define LEDMASK_USB_NOTREADY      LEDS_LED1
 
diff --git a/Demos/Device/LowLevel/AudioInput/AudioInput.h b/Demos/Device/LowLevel/AudioInput/AudioInput.h
index 082b0555b..591d3f355 100644
--- a/Demos/Device/LowLevel/AudioInput/AudioInput.h
+++ b/Demos/Device/LowLevel/AudioInput/AudioInput.h
@@ -50,13 +50,13 @@
 
 	/* Macros: */
 		/** ADC channel number for the microphone input. */
-		#define MIC_IN_ADC_CHANNEL               2
+		#define MIC_IN_ADC_CHANNEL        2
 		
 		/** Maximum ADC sample value for the microphone input. */
-		#define SAMPLE_MAX_RANGE                 0xFFFF
+		#define SAMPLE_MAX_RANGE          0xFFFF
 
 		/** Maximum ADC range for the microphone input. */
-		#define ADC_MAX_RANGE                    0x3FF
+		#define ADC_MAX_RANGE             0x3FF
 
 		/** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
 		#define LEDMASK_USB_NOTREADY      LEDS_LED1
diff --git a/Demos/Device/LowLevel/AudioOutput/AudioOutput.c b/Demos/Device/LowLevel/AudioOutput/AudioOutput.c
index 89c4446bc..9b2bb3991 100644
--- a/Demos/Device/LowLevel/AudioOutput/AudioOutput.c
+++ b/Demos/Device/LowLevel/AudioOutput/AudioOutput.c
@@ -96,9 +96,9 @@ void EVENT_USB_Connect(void)
 
 #if (defined(AUDIO_OUT_MONO) || defined(AUDIO_OUT_STEREO))
 	/* PWM speaker timer initialization */
-	TCCRxA  = ((1 << WGMx0) | (1 << COMxA1) | (1 << COMxA0)
-	                        | (1 << COMxB1) | (1 << COMxB0)); // Set on match, clear on TOP
-	TCCRxB  = ((1 << WGMx2) | (1 << CSx0));  // Fast 8-Bit PWM, Fcpu speed
+	TCCR3A  = ((1 << WGM30) | (1 << COM3A1) | (1 << COM3A0)
+	                        | (1 << COM3B1) | (1 << COM3B0)); // Set on match, clear on TOP
+	TCCR3B  = ((1 << WGM32) | (1 << CS30));  // Fast 8-Bit PWM, Fcpu speed
 #endif	
 }
 
@@ -110,7 +110,7 @@ void EVENT_USB_Disconnect(void)
 	/* Stop the timers */
 	TCCR0B = 0;
 #if (defined(AUDIO_OUT_MONO) || defined(AUDIO_OUT_STEREO))
-	TCCRxB = 0;
+	TCCR3B = 0;
 #endif		
 
 #if defined(AUDIO_OUT_MONO)
@@ -215,11 +215,11 @@ void USB_Audio_Task(void)
 		int8_t  MixedSample_8Bit  = (((int16_t)LeftSample_8Bit + (int16_t)RightSample_8Bit) >> 1);
 
 		/* Load the sample into the PWM timer channel */
-		OCRxA = ((uint8_t)MixedSample_8Bit ^ (1 << 7));
+		OCR3A = ((uint8_t)MixedSample_8Bit ^ (1 << 7));
 #elif defined(AUDIO_OUT_STEREO)
 		/* Load the dual 8-bit samples into the PWM timer channels */
-		OCRxA = ((uint8_t)LeftSample_8Bit  ^ (1 << 7));
-		OCRxB = ((uint8_t)RightSample_8Bit ^ (1 << 7));
+		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);
diff --git a/Demos/Device/LowLevel/AudioOutput/AudioOutput.h b/Demos/Device/LowLevel/AudioOutput/AudioOutput.h
index 7970efe7e..8d7f16c5f 100644
--- a/Demos/Device/LowLevel/AudioOutput/AudioOutput.h
+++ b/Demos/Device/LowLevel/AudioOutput/AudioOutput.h
@@ -48,53 +48,6 @@
 		#include <LUFA/Drivers/Board/LEDs.h>
 	
 	/* Macros: */
-		#if (defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR))
-			#define TCCRxA          TCCR3A
-			#define TCCRxB          TCCR3B
-			#define OCRxA           OCR3A
-			#define OCRxB           OCR3B
-			#define WGMx0           WGM30
-			#define WGMx2           WGM32
-			#define COMxA1          COM3A1
-			#define COMxA0          COM3A0
-			#define COMxB1          COM3B1
-			#define COMxB0          COM3B0
-			#define CSx0            CS30
-		#else
-			/** Timer count register used for left channel PWM audio output (or mixed output in mono output mode) */
-			#define TCCRxA          TCCR1A
-
-			/** Timer count register used for right channel PWM audio output */
-			#define TCCRxB          TCCR1B
-
-			/** Timer compare register used for left channel PWM audio output (or mixed output in mono output mode) */
-			#define OCRxA           OCR1A
-
-			/** Timer compare register used for right channel PWM audio output */
-			#define OCRxB           OCR1B
-
-			/** Timer control register mask used to select PWM mode */
-			#define WGMx0           WGM10
-
-			/** Timer control register mask used to select PWM mode */
-			#define WGMx2           WGM12
-
-			/** Timer control register mask used to set, clear or toggle channel output pin on match */
-			#define COMxA1          COM1A1
-
-			/** Timer control register mask used to set, clear or toggle channel output pin on match */
-			#define COMxA0          COM1A0
-
-			/** Timer control register mask used to set, clear or toggle channel output pin on match */
-			#define COMxB1          COM1B1
-
-			/** Timer control register mask used to set, clear or toggle channel output pin on match */
-			#define COMxB0          COM1B0
-
-			/** Timer control register mask used to start the timer at Fcpu clock rate */
-			#define CSx0            CS10
-		#endif
-		
 		/** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
 		#define LEDMASK_USB_NOTREADY      LEDS_LED1
 
diff --git a/Projects/Benito/Benito.c b/Projects/Benito/Benito.c
index 9e85fbd2f..26c566496 100644
--- a/Projects/Benito/Benito.c
+++ b/Projects/Benito/Benito.c
@@ -79,7 +79,7 @@ int main(void)
 	for (;;)
 	{
 		/* Echo bytes from the host to the target via the hardware USART */
-		if (CDC_Device_BytesReceived(&VirtualSerial_CDC_Interface))
+		if (CDC_Device_BytesReceived(&VirtualSerial_CDC_Interface) > 0)
 		{
 			Serial_TxByte(CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface));
 
diff --git a/Projects/Benito/Benito.txt b/Projects/Benito/Benito.txt
index 857a28f8d..63f3ea815 100644
--- a/Projects/Benito/Benito.txt
+++ b/Projects/Benito/Benito.txt
@@ -31,19 +31,20 @@
  *  </tr>
  *  <tr>
  *   <td><b>USB Class:</b></td>
- *   <td>Human Interface Device (HID)</td>
+ *   <td>Communications Device Class (CDC)</td>
  *  </tr>
  *  <tr> 
  *   <td><b>USB Subclass:</b></td>
- *   <td>Keyboard</td>
+ *   <td>Abstract Control Model (ACM)</td>
  *  </tr>
  *  <tr>
  *   <td><b>Relevant Standards:</b></td>
- *   <td>USBIF HID Standard, USBIF HID Usage Tables</td>
+ *   <td>USBIF CDC Class Standard</td>
+ *   <td>Arduino Bootloader Specification</td>
  *  </tr>
  *  <tr>
  *   <td><b>Usable Speeds:</b></td>
- *   <td>Low Speed Mode, Full Speed Mode</td>
+ *   <td>Full Speed Mode</td>
  *  </tr>
  * </table>
  *
-- 
GitLab