|
|
|
@ -201,34 +201,32 @@ bool CALLBACK_Audio_Device_GetSetEndpointProperty(USB_ClassInfo_Audio_Device_t* |
|
|
|
|
/* Check the requested control to see if a supported control is being manipulated */ |
|
|
|
|
if (EndpointControl == AUDIO_EPCONTROL_SamplingFreq) |
|
|
|
|
{ |
|
|
|
|
/* Check the requested property to see if a supported property is being manipulated */ |
|
|
|
|
if (EndpointProperty == AUDIO_REQ_SetCurrent) |
|
|
|
|
switch (EndpointProperty) |
|
|
|
|
{ |
|
|
|
|
/* Check if we are just testing for a valid property, or actually adjusting it */ |
|
|
|
|
if (DataLength != NULL) |
|
|
|
|
{ |
|
|
|
|
/* Set the new sampling frequency to the value given by the host */ |
|
|
|
|
CurrentAudioSampleFrequency = (((uint32_t)Data[2] << 16) | ((uint32_t)Data[1] << 8) | (uint32_t)Data[0]); |
|
|
|
|
|
|
|
|
|
/* Adjust sample reload timer to the new frequency */ |
|
|
|
|
OCR0A = ((F_CPU / 8 / CurrentAudioSampleFrequency) - 1);
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
else if (EndpointProperty == AUDIO_REQ_GetCurrent) |
|
|
|
|
{ |
|
|
|
|
/* Check if we are just testing for a valid property, or actually reading it */ |
|
|
|
|
if (DataLength != NULL) |
|
|
|
|
{ |
|
|
|
|
*DataLength = 3; |
|
|
|
|
|
|
|
|
|
Data[2] = (CurrentAudioSampleFrequency >> 16); |
|
|
|
|
Data[1] = (CurrentAudioSampleFrequency >> 8); |
|
|
|
|
Data[0] = (CurrentAudioSampleFrequency & 0xFF);
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
|
case AUDIO_REQ_SetCurrent: |
|
|
|
|
/* Check if we are just testing for a valid property, or actually adjusting it */ |
|
|
|
|
if (DataLength != NULL) |
|
|
|
|
{ |
|
|
|
|
/* Set the new sampling frequency to the value given by the host */ |
|
|
|
|
CurrentAudioSampleFrequency = (((uint32_t)Data[2] << 16) | ((uint32_t)Data[1] << 8) | (uint32_t)Data[0]); |
|
|
|
|
|
|
|
|
|
/* Adjust sample reload timer to the new frequency */ |
|
|
|
|
OCR0A = ((F_CPU / 8 / CurrentAudioSampleFrequency) - 1);
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
case AUDIO_REQ_GetCurrent: |
|
|
|
|
/* Check if we are just testing for a valid property, or actually reading it */ |
|
|
|
|
if (DataLength != NULL) |
|
|
|
|
{ |
|
|
|
|
*DataLength = 3; |
|
|
|
|
|
|
|
|
|
Data[2] = (CurrentAudioSampleFrequency >> 16); |
|
|
|
|
Data[1] = (CurrentAudioSampleFrequency >> 8); |
|
|
|
|
Data[0] = (CurrentAudioSampleFrequency & 0xFF);
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|