123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274 |
- #include "AudioInput.h"
- USB_ClassInfo_Audio_Device_t Microphone_Audio_Interface =
- {
- .Config =
- {
- .ControlInterfaceNumber = INTERFACE_ID_AudioControl,
- .StreamingInterfaceNumber = INTERFACE_ID_AudioStream,
- .DataINEndpoint =
- {
- .Address = AUDIO_STREAM_EPADDR,
- .Size = AUDIO_STREAM_EPSIZE,
- .Banks = 2,
- },
- },
- };
- static uint32_t CurrentAudioSampleFrequency = 48000;
- int main(void)
- {
- SetupHardware();
- LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
- GlobalInterruptEnable();
- for (;;)
- {
- Audio_Device_USBTask(&Microphone_Audio_Interface);
- USB_USBTask();
- }
- }
- void SetupHardware(void)
- {
- #if (ARCH == ARCH_AVR8)
-
- MCUSR &= ~(1 << WDRF);
- wdt_disable();
-
- clock_prescale_set(clock_div_1);
- #endif
-
- LEDs_Init();
- Buttons_Init();
- ADC_Init(ADC_FREE_RUNNING | ADC_PRESCALE_32);
- ADC_SetupChannel(MIC_IN_ADC_CHANNEL);
- USB_Init();
-
- ADC_StartReading(ADC_REFERENCE_AVCC | ADC_RIGHT_ADJUSTED | ADC_GET_CHANNEL_MASK(MIC_IN_ADC_CHANNEL));
- }
- ISR(TIMER0_COMPA_vect, ISR_BLOCK)
- {
- uint8_t PrevEndpoint = Endpoint_GetCurrentEndpoint();
-
- if (Audio_Device_IsReadyForNextSample(&Microphone_Audio_Interface))
- {
- int16_t AudioSample;
- #if defined(USE_TEST_TONE)
- static uint8_t SquareWaveSampleCount;
- static int16_t CurrentWaveValue;
-
- if (SquareWaveSampleCount++ == 0xFF)
- CurrentWaveValue ^= 0x8000;
-
- AudioSample = (Buttons_GetStatus() & BUTTONS_BUTTON1) ? CurrentWaveValue : 0;
- #else
-
- AudioSample = ((SAMPLE_MAX_RANGE / ADC_MAX_RANGE) * ADC_GetResult());
- #if defined(MICROPHONE_BIASED_TO_HALF_RAIL)
-
- AudioSample -= (SAMPLE_MAX_RANGE / 2);
- #endif
- #endif
- Audio_Device_WriteSample16(&Microphone_Audio_Interface, AudioSample);
- }
- Endpoint_SelectEndpoint(PrevEndpoint);
- }
- void EVENT_USB_Device_Connect(void)
- {
- LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);
-
- TIMSK0 = (1 << OCIE0A);
- OCR0A = ((F_CPU / 8 / CurrentAudioSampleFrequency) - 1);
- TCCR0A = (1 << WGM01);
- TCCR0B = (1 << CS01);
- }
- void EVENT_USB_Device_Disconnect(void)
- {
-
- TCCR0B = 0;
- LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
- }
- void EVENT_USB_Device_ConfigurationChanged(void)
- {
- bool ConfigSuccess = true;
- ConfigSuccess &= Audio_Device_ConfigureEndpoints(&Microphone_Audio_Interface);
- LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR);
- }
- void EVENT_USB_Device_ControlRequest(void)
- {
- Audio_Device_ProcessControlRequest(&Microphone_Audio_Interface);
- }
- bool CALLBACK_Audio_Device_GetSetEndpointProperty(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo,
- const uint8_t EndpointProperty,
- const uint8_t EndpointAddress,
- const uint8_t EndpointControl,
- uint16_t* const DataLength,
- uint8_t* Data)
- {
-
- if (EndpointAddress == Microphone_Audio_Interface.Config.DataINEndpoint.Address)
- {
-
- if (EndpointControl == AUDIO_EPCONTROL_SamplingFreq)
- {
- switch (EndpointProperty)
- {
- case AUDIO_REQ_SetCurrent:
-
- if (DataLength != NULL)
- {
-
- CurrentAudioSampleFrequency = (((uint32_t)Data[2] << 16) | ((uint32_t)Data[1] << 8) | (uint32_t)Data[0]);
-
- OCR0A = ((F_CPU / 8 / CurrentAudioSampleFrequency) - 1);
- }
- return true;
- case AUDIO_REQ_GetCurrent:
-
- if (DataLength != NULL)
- {
- *DataLength = 3;
- Data[2] = (CurrentAudioSampleFrequency >> 16);
- Data[1] = (CurrentAudioSampleFrequency >> 8);
- Data[0] = (CurrentAudioSampleFrequency & 0xFF);
- }
- return true;
- }
- }
- }
- return false;
- }
- bool CALLBACK_Audio_Device_GetSetInterfaceProperty(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo,
- const uint8_t Property,
- const uint8_t EntityAddress,
- const uint16_t Parameter,
- uint16_t* const DataLength,
- uint8_t* Data)
- {
-
- return false;
- }
|