📄 uacsys.c
字号:
psUsbDevice->sEpCrl[0].u8SramBuffer[1] = (uint8_t)(psDevice->i16PlayVolumeL >> 8);
}
else
{
psUsbDevice->sEpCrl[0].u8SramBuffer[0] = (uint8_t)(psDevice->i16PlayVolumeR);
psUsbDevice->sEpCrl[0].u8SramBuffer[1] = (uint8_t)(psDevice->i16PlayVolumeR >> 8);
}
_DRVUSB_SET_EP_TOG_BIT(0, FALSE);
_DRVUSB_TRIG_EP(0, 2);
break;
}
default:
/* STALL control pipe */
_DRVUSB_CLEAR_EP_READY_AND_TRIG_STALL(0);
_DRVUSB_CLEAR_EP_READY_AND_TRIG_STALL(1);
break;
}
}
else
{
/* STALL control pipe */
_DRVUSB_CLEAR_EP_READY_AND_TRIG_STALL(0);
_DRVUSB_CLEAR_EP_READY_AND_TRIG_STALL(1);
}
}
void UAC_ClassCtrlGetMinRequest(void * pVoid)
{
S_UAC_DEVICE *psDevice = (S_UAC_DEVICE *) pVoid;
S_DRVUSB_DEVICE *psUsbDevice = (S_DRVUSB_DEVICE *)psDevice->device;
if (REC_FEATURE_UNITID == psUsbDevice->au8Setup[5])
{
switch (psUsbDevice->au8Setup[3])
{
case VOLUME_CONTROL:
psUsbDevice->sEpCrl[0].u8SramBuffer[0] = (uint8_t)(psDevice->i16RecMinVolume);
psUsbDevice->sEpCrl[0].u8SramBuffer[1] = (uint8_t)(psDevice->i16RecMinVolume >> 8);
_DRVUSB_SET_EP_TOG_BIT(0, FALSE);
_DRVUSB_TRIG_EP(0, 2);
break;
default:
/* STALL control pipe */
_DRVUSB_CLEAR_EP_READY_AND_TRIG_STALL(0);
_DRVUSB_CLEAR_EP_READY_AND_TRIG_STALL(1);
break;
}
}
else if (PLAY_FEATURE_UNITID == psUsbDevice->au8Setup[5])
{
switch (psUsbDevice->au8Setup[3])
{
case VOLUME_CONTROL:
psUsbDevice->sEpCrl[0].u8SramBuffer[0] = (uint8_t)(psDevice->i16PlayMinVolume);
psUsbDevice->sEpCrl[0].u8SramBuffer[1] = (uint8_t)(psDevice->i16PlayMinVolume >> 8);
_DRVUSB_SET_EP_TOG_BIT(0, FALSE);
_DRVUSB_TRIG_EP(0, 2);
break;
default:
/* STALL control pipe */
_DRVUSB_CLEAR_EP_READY_AND_TRIG_STALL(0);
_DRVUSB_CLEAR_EP_READY_AND_TRIG_STALL(1);
break;
}
}
else
{
/* STALL control pipe */
_DRVUSB_CLEAR_EP_READY_AND_TRIG_STALL(0);
_DRVUSB_CLEAR_EP_READY_AND_TRIG_STALL(1);
}
}
void UAC_ClassCtrlGetMaxRequest(void * pVoid)
{
S_UAC_DEVICE *psDevice = (S_UAC_DEVICE *) pVoid;
S_DRVUSB_DEVICE *psUsbDevice = (S_DRVUSB_DEVICE *)psDevice->device;
if (REC_FEATURE_UNITID == psUsbDevice->au8Setup[5])
{
switch (psUsbDevice->au8Setup[3])
{
case VOLUME_CONTROL:
psUsbDevice->sEpCrl[0].u8SramBuffer[0] = (uint8_t)(psDevice->i16RecMaxVolume);
psUsbDevice->sEpCrl[0].u8SramBuffer[1] = (uint8_t)(psDevice->i16RecMaxVolume >> 8);
_DRVUSB_SET_EP_TOG_BIT(0, FALSE);
_DRVUSB_TRIG_EP(0, 2);
break;
default:
/* STALL control pipe */
_DRVUSB_CLEAR_EP_READY_AND_TRIG_STALL(0);
_DRVUSB_CLEAR_EP_READY_AND_TRIG_STALL(1);
break;
}
}
else if (PLAY_FEATURE_UNITID == psUsbDevice->au8Setup[5])
{
switch (psUsbDevice->au8Setup[3])
{
case VOLUME_CONTROL:
psUsbDevice->sEpCrl[0].u8SramBuffer[0] = (uint8_t)(psDevice->i16PlayMaxVolume);
psUsbDevice->sEpCrl[0].u8SramBuffer[1] = (uint8_t)(psDevice->i16PlayMaxVolume >> 8);
_DRVUSB_SET_EP_TOG_BIT(0, FALSE);
_DRVUSB_TRIG_EP(0, 2);
break;
default:
/* STALL control pipe */
_DRVUSB_CLEAR_EP_READY_AND_TRIG_STALL(0);
_DRVUSB_CLEAR_EP_READY_AND_TRIG_STALL(1);
break;
}
}
else
{
/* STALL control pipe */
_DRVUSB_CLEAR_EP_READY_AND_TRIG_STALL(0);
_DRVUSB_CLEAR_EP_READY_AND_TRIG_STALL(1);
}
}
void UAC_ClassCtrlGetResRequest(void * pVoid)
{
S_UAC_DEVICE *psDevice = (S_UAC_DEVICE *) pVoid;
S_DRVUSB_DEVICE *psUsbDevice = (S_DRVUSB_DEVICE *)psDevice->device;
if (REC_FEATURE_UNITID == psUsbDevice->au8Setup[5])
{
switch (psUsbDevice->au8Setup[3])
{
case VOLUME_CONTROL:
psUsbDevice->sEpCrl[0].u8SramBuffer[0] = (uint8_t)(psDevice->i16RecResVolume);
psUsbDevice->sEpCrl[0].u8SramBuffer[1] = (uint8_t)(psDevice->i16RecResVolume >> 8);
_DRVUSB_SET_EP_TOG_BIT(0, FALSE);
_DRVUSB_TRIG_EP(0, 2);
break;
default:
/* STALL control pipe */
_DRVUSB_CLEAR_EP_READY_AND_TRIG_STALL(0);
_DRVUSB_CLEAR_EP_READY_AND_TRIG_STALL(1);
break;
}
}
else if (PLAY_FEATURE_UNITID == psUsbDevice->au8Setup[5])
{
switch (psUsbDevice->au8Setup[3])
{
case VOLUME_CONTROL:
psUsbDevice->sEpCrl[0].u8SramBuffer[0] = (uint8_t)(psDevice->i16PlayResVolume);
psUsbDevice->sEpCrl[0].u8SramBuffer[1] = (uint8_t)(psDevice->i16PlayResVolume >> 8);
_DRVUSB_SET_EP_TOG_BIT(0, FALSE);
_DRVUSB_TRIG_EP(0, 2);
break;
default:
/* STALL control pipe */
_DRVUSB_CLEAR_EP_READY_AND_TRIG_STALL(0);
_DRVUSB_CLEAR_EP_READY_AND_TRIG_STALL(1);
break;
}
}
else
{
/* STALL control pipe */
_DRVUSB_CLEAR_EP_READY_AND_TRIG_STALL(0);
_DRVUSB_CLEAR_EP_READY_AND_TRIG_STALL(1);
}
}
void UAC_ClassCtrlSetCurOutData(void * pVoid)
{
S_UAC_DEVICE *psDevice = (S_UAC_DEVICE *) pVoid;
S_DRVUSB_DEVICE *psUsbDevice = (S_DRVUSB_DEVICE *)psDevice->device;
if (REC_FEATURE_UNITID == psUsbDevice->au8Setup[5])
{
if (psUsbDevice->au8Setup[3] == MUTE_CONTROL)
{
psDevice->u8RecMute = psUsbDevice->sEpCrl[0].u8SramBuffer[0];
}
else if(psUsbDevice->au8Setup[3] == VOLUME_CONTROL)
{
psDevice->i16RecVolume =(int16_t) (psUsbDevice->sEpCrl[0].u8SramBuffer[0] | (psUsbDevice->sEpCrl[0].u8SramBuffer[1]<<8));
}
}
else if(PLAY_FEATURE_UNITID == psUsbDevice->au8Setup[5])
{
if (psUsbDevice->au8Setup[3] == MUTE_CONTROL)
{
psDevice->u8PlayMute = psUsbDevice->sEpCrl[0].u8SramBuffer[0];
}
else if(psUsbDevice->au8Setup[3] == VOLUME_CONTROL)
{
if(psUsbDevice->au8Setup[2] == 1)
{
psDevice->i16PlayVolumeL =(int16_t) (psUsbDevice->sEpCrl[0].u8SramBuffer[0] | (psUsbDevice->sEpCrl[0].u8SramBuffer[1]<<8));
}
else
{
psDevice->i16PlayVolumeR =(int16_t) (psUsbDevice->sEpCrl[0].u8SramBuffer[0] | (psUsbDevice->sEpCrl[0].u8SramBuffer[1]<<8));
}
}
}
_DRVUSB_SET_EP_TOG_BIT(0, FALSE);
_DRVUSB_TRIG_EP(0, 0);
}
/* Translate the volume gain form dB value to Q12 integer. Output data is in Q12 */
int32_t UAC_GetRecVolume(void)
{
int32_t volume;
int32_t q, r;
/* Just return 0 when MUTE */
if (g_UAC_sDevice.u8RecMute)
return 0;
volume = g_UAC_sDevice.i16RecVolume;
if (volume == -32768)
{
/* MUTE control */
volume = 0;
}
else
{
volume -= g_UAC_sDevice.i16RecMinVolume;
q = volume >> (8 + 1);
r = volume & 0x1FF;
volume = gVolumeTbl[q] + ((gVolumeTbl[q+1] - gVolumeTbl[q]) * r >> 9);
}
return volume;
}
/* Translate the volume gain form dB value to Q12 integer. Output data is in Q12 */
int32_t UAC_GetPlayVolume(int32_t bIsRight)
{
int32_t volume;
int32_t q, r;
/* Just return 0 when MUTE */
if (g_UAC_sDevice.u8PlayMute)
return 0;
if (bIsRight)
volume = g_UAC_sDevice.i16PlayVolumeR;
else
volume = g_UAC_sDevice.i16PlayVolumeL;
if (volume == -32768)
{
/* MUTE control */
volume = 0;
}
else
{
volume -= g_UAC_sDevice.i16PlayMinVolume;
q = volume >> (8 + 1);
r = volume & 0x1FF;
volume = gVolumeTbl[q] + ((gVolumeTbl[q+1] - gVolumeTbl[q]) * r >> 9);
}
return volume;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -