Added new EEPROM and FLASH buffer versions of the Endpoint and Pipe stream functions...
[pub/lufa.git] / LUFA / Drivers / USB / LowLevel / Template / Template_Endpoint_Control_W.c
diff --git a/LUFA/Drivers/USB/LowLevel/Template/Template_Endpoint_Control_W.c b/LUFA/Drivers/USB/LowLevel/Template/Template_Endpoint_Control_W.c
new file mode 100644 (file)
index 0000000..2796c64
--- /dev/null
@@ -0,0 +1,39 @@
+uint8_t TEMPLATE_FUNC_NAME (void* Buffer, uint16_t Length)\r
+{\r
+       uint8_t* DataStream     = (uint8_t*)(Buffer + TEMPLATE_BUFFER_OFFSET(Length));\r
+       bool     LastPacketFull = false;\r
+       \r
+       if (Length > USB_ControlRequest.wLength)\r
+         Length = USB_ControlRequest.wLength;\r
+       \r
+       while (Length && !(Endpoint_IsOUTReceived()))\r
+       {\r
+               while (!(Endpoint_IsINReady()));\r
+               \r
+               while (Length && (Endpoint_BytesInEndpoint() < USB_ControlEndpointSize))\r
+               {\r
+                       TEMPLATE_TRANSFER_BYTE(DataStream);\r
+                       Length--;\r
+               }\r
+               \r
+               LastPacketFull = (Endpoint_BytesInEndpoint() == USB_ControlEndpointSize);\r
+               Endpoint_ClearIN();\r
+       }\r
+       \r
+       if (Endpoint_IsOUTReceived())\r
+         return ENDPOINT_RWCSTREAM_HostAborted;\r
+       \r
+       if (LastPacketFull)\r
+       {\r
+               while (!(Endpoint_IsINReady()));\r
+               Endpoint_ClearIN();\r
+       }\r
+       \r
+       while (!(Endpoint_IsOUTReceived()));\r
+\r
+       return ENDPOINT_RWCSTREAM_NoError;\r
+}\r
+\r
+#undef TEMPLATE_BUFFER_OFFSET\r
+#undef TEMPLATE_FUNC_NAME\r
+#undef TEMPLATE_TRANSFER_BYTE
\ No newline at end of file