X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/137ce280c1e9c33e9393f1dfd6bb160c131bd1a4..0da99447d3e88e83f9977501bee56af5c7aa56c0:/Demos/Host/LowLevel/AudioOutputHost/AudioOutputHost.c diff --git a/Demos/Host/LowLevel/AudioOutputHost/AudioOutputHost.c b/Demos/Host/LowLevel/AudioOutputHost/AudioOutputHost.c index 4fdb661fa..eddd38f97 100644 --- a/Demos/Host/LowLevel/AudioOutputHost/AudioOutputHost.c +++ b/Demos/Host/LowLevel/AudioOutputHost/AudioOutputHost.c @@ -1,13 +1,13 @@ /* LUFA Library - Copyright (C) Dean Camera, 2011. + Copyright (C) Dean Camera, 2012. dean [at] fourwalledcubicle [dot] com www.lufa-lib.org */ /* - Copyright 2011 Dean Camera (dean [at] fourwalledcubicle [dot] com) + Copyright 2012 Dean Camera (dean [at] fourwalledcubicle [dot] com) Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted @@ -68,12 +68,15 @@ void SetupHardware(void) Serial_Init(9600, false); Buttons_Init(); ADC_Init(ADC_FREE_RUNNING | ADC_PRESCALE_32); - ADC_SetupChannel(MIC_IN_ADC_CHANNEL); + ADC_SetupChannel(MIC_IN_ADC_CHANNEL); LEDs_Init(); USB_Init(); /* Create a stdio stream for the serial port for stdin and stdout */ Serial_CreateStream(NULL); + + /* Start the ADC conversion in free running mode */ + ADC_StartReading(ADC_REFERENCE_AVCC | ADC_RIGHT_ADJUSTED | ADC_GET_CHANNEL_MASK(MIC_IN_ADC_CHANNEL)); } /** Event handler for the USB_DeviceAttached event. This indicates that a device has been attached to the host, and @@ -126,7 +129,7 @@ void EVENT_USB_Host_DeviceEnumerationComplete(void) LEDs_SetAllLEDs(LEDMASK_USB_ERROR); return; } - + if ((ErrorCode = USB_Host_SetInterfaceAltSetting(StreamingInterfaceIndex, StreamingInterfaceAltSetting)) != HOST_SENDCONTROL_Successful) { @@ -134,6 +137,7 @@ void EVENT_USB_Host_DeviceEnumerationComplete(void) " -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); LEDs_SetAllLEDs(LEDMASK_USB_ERROR); + USB_Host_SetDeviceConfiguration(0); return; } @@ -145,7 +149,7 @@ void EVENT_USB_Host_DeviceEnumerationComplete(void) .wIndex = StreamingEndpointAddress, .wLength = sizeof(USB_Audio_SampleFreq_t), }; - + USB_Audio_SampleFreq_t SampleRate = AUDIO_SAMPLE_FREQ(48000); /* Select the control pipe for the request transfer */ @@ -163,8 +167,8 @@ void EVENT_USB_Host_DeviceEnumerationComplete(void) TIMSK0 = (1 << OCIE0A); OCR0A = ((F_CPU / 8 / 48000) - 1); TCCR0A = (1 << WGM01); // CTC mode - TCCR0B = (1 << CS01); // Fcpu/8 speed - + TCCR0B = (1 << CS01); // Fcpu/8 speed + puts_P(PSTR("Speaker Enumerated.\r\n")); LEDs_SetAllLEDs(LEDMASK_USB_READY); } @@ -206,16 +210,16 @@ ISR(TIMER0_COMPA_vect, ISR_BLOCK) /* Check if the current pipe can be written to (device ready for more data) */ if (Pipe_IsOUTReady()) { - int16_t AudioSample; - + int16_t AudioSample; + #if defined(USE_TEST_TONE) static uint8_t SquareWaveSampleCount; static int16_t CurrentWaveValue; - + /* 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 */ AudioSample = (Buttons_GetStatus() & BUTTONS_BUTTON1) ? CurrentWaveValue : 0; #else @@ -225,12 +229,12 @@ ISR(TIMER0_COMPA_vect, ISR_BLOCK) #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 #endif - + Pipe_Write_16_LE(AudioSample); Pipe_Write_16_LE(AudioSample); - + if (!(Pipe_IsReadWriteAllowed())) Pipe_ClearOUT(); } @@ -238,3 +242,4 @@ ISR(TIMER0_COMPA_vect, ISR_BLOCK) Pipe_Freeze(); Pipe_SelectPipe(PrevPipe); } +