forked from PAWPAW-Mirror/lib_xua
Resolved issue when UAC1 Set mute was being stalled due to bad data length check
This commit is contained in:
@@ -1105,40 +1105,49 @@ int AudioClassRequests_1(XUD_ep ep0_out, XUD_ep ep0_in, USB_SetupPacket_t &sp, c
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(datalength == 2)
|
unitID = sp.wIndex >> 8;
|
||||||
|
|
||||||
|
switch ((sp.wValue>>8) & 0xff)
|
||||||
{
|
{
|
||||||
unitID = sp.wIndex >> 8;
|
case FU_VOLUME_CONTROL:
|
||||||
|
|
||||||
if (unitID == FU_USBOUT)
|
if(datalength == 2)
|
||||||
{
|
|
||||||
switch ((sp.wValue>>8) & 0xff)
|
|
||||||
{
|
{
|
||||||
case FU_VOLUME_CONTROL:
|
switch(unitID)
|
||||||
volsOut[ sp.wValue & 0xff ] = buffer[0] | (((int) (signed char) buffer[1]) << 8);
|
{
|
||||||
updateVol( unitID, ( sp.wValue & 0xff ), c_mix_ctl );
|
case FU_USBOUT:
|
||||||
return XUD_DoSetRequestStatus(ep0_in);
|
volsOut[ sp.wValue & 0xff ] = buffer[0] | (((int) (signed char) buffer[1]) << 8);
|
||||||
case FU_MUTE_CONTROL:
|
updateVol( unitID, ( sp.wValue & 0xff ), c_mix_ctl );
|
||||||
mutesOut[ sp.wValue & 0xff ] = buffer[0];
|
return XUD_DoSetRequestStatus(ep0_in);
|
||||||
updateVol( unitID, ( sp.wValue & 0xff ), c_mix_ctl );
|
|
||||||
return XUD_DoSetRequestStatus(ep0_in);
|
case FU_USBIN:
|
||||||
|
volsIn[ sp.wValue & 0xff ] = buffer[0] | (((int) (signed char) buffer[1]) << 8);
|
||||||
|
updateVol( unitID, ( sp.wValue & 0xff ), c_mix_ctl );
|
||||||
|
return XUD_DoSetRequestStatus(ep0_in);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
else if (unitID == FU_USBIN)
|
|
||||||
{
|
case FU_MUTE_CONTROL:
|
||||||
switch ((sp.wValue>>8) & 0xff)
|
|
||||||
{
|
if(datalength == 1)
|
||||||
case FU_VOLUME_CONTROL:
|
{
|
||||||
volsIn[ sp.wValue & 0xff ] = buffer[0] | (((int) (signed char) buffer[1]) << 8);
|
switch(unitID)
|
||||||
updateVol( unitID, ( sp.wValue & 0xff ), c_mix_ctl );
|
{
|
||||||
return XUD_DoSetRequestStatus(ep0_in);
|
case FU_USBOUT:
|
||||||
case FU_MUTE_CONTROL:
|
mutesOut[ sp.wValue & 0xff ] = buffer[0];
|
||||||
mutesIn[ sp.wValue & 0xff ] = buffer[0];
|
updateVol( unitID, ( sp.wValue & 0xff ), c_mix_ctl );
|
||||||
updateVol( unitID, ( sp.wValue & 0xff ), c_mix_ctl );
|
return XUD_DoSetRequestStatus(ep0_in);
|
||||||
return XUD_DoSetRequestStatus(ep0_in);
|
|
||||||
|
case FU_USBIN:
|
||||||
|
mutesIn[ sp.wValue & 0xff ] = buffer[0];
|
||||||
|
updateVol( unitID, ( sp.wValue & 0xff ), c_mix_ctl );
|
||||||
|
return XUD_DoSetRequestStatus(ep0_in);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case UAC_B_REQ_GET_CUR:
|
case UAC_B_REQ_GET_CUR:
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user