uint8_t TEMPLATE_FUNC_NAME (void* Buffer, uint16_t Length)\r
{\r
- uint8_t* DataStream = (uint8_t*)(Buffer + TEMPLATE_BUFFER_OFFSET(Length));\r
+ uint8_t* DataStream = (uint8_t*)(Buffer + TEMPLATE_BUFFER_OFFSET(Length));\r
+ bool LastPacketFull = false;\r
\r
- while (Length)\r
+ if (Length > USB_ControlRequest.wLength)\r
+ Length = USB_ControlRequest.wLength;\r
+\r
+ while (Length || LastPacketFull)\r
{\r
if (Endpoint_IsSETUPReceived())\r
return ENDPOINT_RWCSTREAM_HostAborted;\r
\r
if (Endpoint_IsOUTReceived())\r
{\r
+ LastPacketFull = (Endpoint_BytesInEndpoint() == USB_ControlEndpointSize);\r
+ \r
while (Length && Endpoint_BytesInEndpoint())\r
{\r
TEMPLATE_TRANSFER_BYTE(DataStream);\r
}\r
\r
Endpoint_ClearOUT();\r
+ \r
+ if (!(LastPacketFull))\r
+ Length = 0;\r
} \r
}\r
\r