Added >64 byte USB_RecvControl() support
This commit is contained in:
parent
513dbdd690
commit
2369610047
|
@ -425,13 +425,24 @@ static bool USB_SendStringDescriptor(const u8*string_P, u8 string_len, uint8_t f
|
|||
}
|
||||
|
||||
// Does not timeout or cross fifo boundaries
|
||||
// Will only work for transfers <= 64 bytes
|
||||
// TODO
|
||||
int USB_RecvControl(void* d, int len)
|
||||
{
|
||||
WaitOUT();
|
||||
Recv((u8*)d,len);
|
||||
ClearOUT();
|
||||
auto length = len;
|
||||
while(length)
|
||||
{
|
||||
// Dont receive more than the USB Control EP has to offer
|
||||
// Use fixed 64 because control EP always have 64 bytes even on 16u2.
|
||||
auto recvLength = length;
|
||||
if(recvLength > 64){
|
||||
recvLength = 64;
|
||||
}
|
||||
|
||||
// Write data to fit to the end (not the beginning) of the array
|
||||
WaitOUT();
|
||||
Recv((u8*)d + len - length, recvLength);
|
||||
ClearOUT();
|
||||
length -= recvLength;
|
||||
}
|
||||
return len;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue