X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/bbf89d81fa225fedc5ab1190ebfa8c775612178c..7aecda6fda5bcced68d72b0cf73d00174aa5c7cd:/Demos/Device/ClassDriver/AudioOutput/AudioOutput.c diff --git a/Demos/Device/ClassDriver/AudioOutput/AudioOutput.c b/Demos/Device/ClassDriver/AudioOutput/AudioOutput.c index 9a8804a45..3648b6ea7 100644 --- a/Demos/Device/ClassDriver/AudioOutput/AudioOutput.c +++ b/Demos/Device/ClassDriver/AudioOutput/AudioOutput.c @@ -95,27 +95,20 @@ void ProcessNextSample(void) /* Clear the sample reload timer */ TIFR0 |= (1 << OCF0A); - /* Retrieve the signed 16-bit left and right audio samples */ - 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); - int8_t RightSample_8Bit = (RightSample_16Bit >> 8); + /* Retrieve the signed 16-bit left and right audio samples, convert to 8-bit */ + int8_t LeftSample_8Bit = (Audio_Device_ReadSample16(&Speaker_Audio_Interface) >> 8); + int8_t RightSample_8Bit = (Audio_Device_ReadSample16(&Speaker_Audio_Interface) >> 8); /* 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); - /* Get absolute value of mixed sample value */ - uint8_t MixedSample_8Bit_Abs = abs(MixedSample_8Bit); - #if defined(AUDIO_OUT_MONO) /* Load the sample into the PWM timer channel */ - OCR3A = ((uint8_t)MixedSample_8Bit ^ (1 << 7)); + OCR3A = (MixedSample_8Bit ^ (1 << 7)); #elif defined(AUDIO_OUT_STEREO) /* Load the dual 8-bit samples into the PWM timer channels */ - OCR3A = ((uint8_t)LeftSample_8Bit ^ (1 << 7)); - OCR3B = ((uint8_t)RightSample_8Bit ^ (1 << 7)); + OCR3A = (LeftSample_8Bit ^ (1 << 7)); + OCR3B = (RightSample_8Bit ^ (1 << 7)); #elif defined(AUDIO_OUT_PORTC) /* Load the 8-bit mixed sample into PORTC */ PORTC = MixedSample_8Bit; @@ -123,31 +116,29 @@ void ProcessNextSample(void) uint8_t LEDMask = LEDS_NO_LEDS; - if (MixedSample_8Bit_Abs > 2) - LEDMask |= LEDS_LED1; - - if (MixedSample_8Bit_Abs > 4) - LEDMask |= LEDS_LED2; - - if (MixedSample_8Bit_Abs > 8) - LEDMask |= LEDS_LED3; - - if (MixedSample_8Bit_Abs > 16) - LEDMask |= LEDS_LED4; + /* Turn on LEDs as the sample amplitude increases */ + if (MixedSample_8Bit > 16) + LEDMask = (LEDS_LED1 | LEDS_LED2 | LEDS_LED3 | LEDS_LED4); + else if (MixedSample_8Bit > 8) + LEDMask = (LEDS_LED1 | LEDS_LED2 | LEDS_LED3); + else if (MixedSample_8Bit > 4) + LEDMask = (LEDS_LED1 | LEDS_LED2); + else if (MixedSample_8Bit > 2) + LEDMask = (LEDS_LED1); LEDs_SetAllLEDs(LEDMask); } } /** Event handler for the library USB Connection event. */ -void EVENT_USB_Connect(void) +void EVENT_USB_Device_Connect(void) { LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); /* Sample reload timer initialization */ - OCR0A = (F_CPU / AUDIO_SAMPLE_FREQUENCY) - 1; + OCR0A = (F_CPU / 8 / AUDIO_SAMPLE_FREQUENCY) - 1; TCCR0A = (1 << WGM01); // CTC mode - TCCR0B = (1 << CS00); // Fcpu speed + TCCR0B = (1 << CS01); // Fcpu/8 speed #if defined(AUDIO_OUT_MONO) /* Set speaker as output */ @@ -169,7 +160,7 @@ void EVENT_USB_Connect(void) } /** Event handler for the library USB Disconnection event. */ -void EVENT_USB_Disconnect(void) +void EVENT_USB_Device_Disconnect(void) { LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); @@ -194,7 +185,7 @@ void EVENT_USB_Disconnect(void) } /** Event handler for the library USB Configuration Changed event. */ -void EVENT_USB_ConfigurationChanged(void) +void EVENT_USB_Device_ConfigurationChanged(void) { LEDs_SetAllLEDs(LEDMASK_USB_READY); @@ -202,8 +193,8 @@ void EVENT_USB_ConfigurationChanged(void) LEDs_SetAllLEDs(LEDMASK_USB_ERROR); } -/** Event handler for the library USB Unhandled Control Packet event. */ -void EVENT_USB_UnhandledControlPacket(void) +/** Event handler for the library USB Unhandled Control Request event. */ +void EVENT_USB_Device_UnhandledControlRequest(void) { - Audio_Device_ProcessControlPacket(&Speaker_Audio_Interface); + Audio_Device_ProcessControlRequest(&Speaker_Audio_Interface); }