mirror of
https://github.com/arduino/Arduino.git
synced 2024-12-01 12:24:14 +01:00
Added Long USB RecvControl call for >64 bytes
This commit is contained in:
parent
0b97e57b2c
commit
ced86a9c48
@ -193,6 +193,7 @@ bool CDC_Setup(USBSetup& setup);
|
|||||||
|
|
||||||
int USB_SendControl(uint8_t flags, const void* d, int len);
|
int USB_SendControl(uint8_t flags, const void* d, int len);
|
||||||
int USB_RecvControl(void* d, int len);
|
int USB_RecvControl(void* d, int len);
|
||||||
|
int USB_RecvControlLong(void* d, int len);
|
||||||
|
|
||||||
uint8_t USB_Available(uint8_t ep);
|
uint8_t USB_Available(uint8_t ep);
|
||||||
uint8_t USB_SendSpace(uint8_t ep);
|
uint8_t USB_SendSpace(uint8_t ep);
|
||||||
|
@ -426,7 +426,7 @@ static bool USB_SendStringDescriptor(const u8*string_P, u8 string_len, uint8_t f
|
|||||||
|
|
||||||
// Does not timeout or cross fifo boundaries
|
// Does not timeout or cross fifo boundaries
|
||||||
// Will only work for transfers <= 64 bytes
|
// Will only work for transfers <= 64 bytes
|
||||||
// TODO
|
// Use USB_RecvControlLong for longer transfers
|
||||||
int USB_RecvControl(void* d, int len)
|
int USB_RecvControl(void* d, int len)
|
||||||
{
|
{
|
||||||
WaitOUT();
|
WaitOUT();
|
||||||
@ -435,6 +435,25 @@ int USB_RecvControl(void* d, int len)
|
|||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Does not timeout or cross fifo boundaries
|
||||||
|
int USB_RecvControlLong(void* d, int len)
|
||||||
|
{
|
||||||
|
auto bytesleft = len;
|
||||||
|
while(bytesleft > 0)
|
||||||
|
{
|
||||||
|
// 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 = bytesleft;
|
||||||
|
if(recvLength > 64){
|
||||||
|
recvLength = 64;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write data to fit to the beginning of the array
|
||||||
|
bytesleft -= USB_RecvControl((u8*)d + len - bytesleft, recvLength);
|
||||||
|
}
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
static u8 SendInterfaces()
|
static u8 SendInterfaces()
|
||||||
{
|
{
|
||||||
u8 interfaces = 0;
|
u8 interfaces = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user