Fixed GenericHIDHost demo report write routine incorrect for control type requests...
[pub/USBasp.git] / Demos / Device / DualCDC / DualCDC.c
index fecbaff..56eebb3 100644 (file)
  \r
 #include "DualCDC.h"\r
 \r
-/* Project Tags, for reading out using the ButtLoad project */\r
-BUTTLOADTAG(ProjName,    "LUFA DualCDC App");\r
-BUTTLOADTAG(BuildTime,   __TIME__);\r
-BUTTLOADTAG(BuildDate,   __DATE__);\r
-BUTTLOADTAG(LUFAVersion, "LUFA V" LUFA_VERSION_STRING);\r
-\r
 /* Scheduler Task List */\r
 TASK_LIST\r
 {\r
@@ -195,7 +189,7 @@ EVENT_HANDLER(USB_UnhandledControlPacket)
        uint8_t* LineCodingData;\r
 \r
        /* Discard the unused wValue parameter */\r
-       Endpoint_Ignore_Word();\r
+       Endpoint_Discard_Word();\r
 \r
        /* wIndex indicates the interface being controlled */\r
        uint16_t wIndex = Endpoint_Read_Word_LE();\r
@@ -210,13 +204,13 @@ EVENT_HANDLER(USB_UnhandledControlPacket)
                        if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))\r
                        {       \r
                                /* Acknowledge the SETUP packet, ready for data transfer */\r
-                               Endpoint_ClearSetupReceived();\r
+                               Endpoint_ClearControlSETUP();\r
 \r
                                /* Write the line coding data to the control endpoint */\r
                                Endpoint_Write_Control_Stream_LE(LineCodingData, sizeof(CDC_Line_Coding_t));\r
                                \r
                                /* Finalize the stream transfer to send the last packet or clear the host abort */\r
-                               Endpoint_ClearSetupOUT();\r
+                               Endpoint_ClearControlOUT();\r
                        }\r
                        \r
                        break;\r
@@ -224,13 +218,13 @@ EVENT_HANDLER(USB_UnhandledControlPacket)
                        if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))\r
                        {\r
                                /* Acknowledge the SETUP packet, ready for data transfer */\r
-                               Endpoint_ClearSetupReceived();\r
+                               Endpoint_ClearControlSETUP();\r
 \r
                                /* Read the line coding data in from the host into the global struct */\r
                                Endpoint_Read_Control_Stream_LE(LineCodingData, sizeof(CDC_Line_Coding_t));\r
 \r
                                /* Finalize the stream transfer to clear the last packet from the host */\r
-                               Endpoint_ClearSetupIN();\r
+                               Endpoint_ClearControlIN();\r
                        }\r
        \r
                        break;\r
@@ -238,11 +232,11 @@ EVENT_HANDLER(USB_UnhandledControlPacket)
                        if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))\r
                        {\r
                                /* Acknowledge the SETUP packet, ready for data transfer */\r
-                               Endpoint_ClearSetupReceived();\r
+                               Endpoint_ClearControlSETUP();\r
                                \r
                                /* Acknowledge status stage */\r
-                               while (!(Endpoint_IsSetupINReady()));\r
-                               Endpoint_ClearSetupIN();\r
+                               while (!(Endpoint_IsINReady()));\r
+                               Endpoint_ClearControlIN();\r
                        }\r
        \r
                        break;\r
@@ -313,15 +307,21 @@ TASK(CDC1_Task)
                Endpoint_Write_Stream_LE(ReportString, strlen(ReportString));\r
                \r
                /* Finalize the stream transfer to send the last packet */\r
-               Endpoint_ClearCurrentBank();\r
+               Endpoint_ClearIN();\r
+\r
+               /* Wait until the endpoint is ready for another packet */\r
+               while (!(Endpoint_IsINReady()));\r
+               \r
+               /* Send an empty packet to ensure that the host does not buffer data sent to it */\r
+               Endpoint_ClearIN();\r
        }\r
 \r
        /* Select the Serial Rx Endpoint */\r
        Endpoint_SelectEndpoint(CDC1_RX_EPNUM);\r
        \r
        /* Throw away any received data from the host */\r
-       if (Endpoint_ReadWriteAllowed())\r
-         Endpoint_ClearCurrentBank();\r
+       if (Endpoint_IsOUTReceived())\r
+         Endpoint_ClearOUT();\r
 }\r
 \r
 /** Function to manage CDC data transmission and reception to and from the host for the second CDC interface, which echoes back\r
@@ -333,7 +333,7 @@ TASK(CDC2_Task)
        Endpoint_SelectEndpoint(CDC2_RX_EPNUM);\r
        \r
        /* Check to see if any data has been received */\r
-       if (Endpoint_ReadWriteAllowed())\r
+       if (Endpoint_IsOUTReceived())\r
        {\r
                /* Create a temp buffer big enough to hold the incoming endpoint packet */\r
                uint8_t  Buffer[Endpoint_BytesInEndpoint()];\r
@@ -345,7 +345,7 @@ TASK(CDC2_Task)
                Endpoint_Read_Stream_LE(&Buffer, DataLength);\r
 \r
                /* Finalize the stream transfer to send the last packet */\r
-               Endpoint_ClearCurrentBank();\r
+               Endpoint_ClearOUT();\r
 \r
                /* Select the Serial Tx Endpoint */\r
                Endpoint_SelectEndpoint(CDC2_TX_EPNUM);\r
@@ -354,6 +354,12 @@ TASK(CDC2_Task)
                Endpoint_Write_Stream_LE(&Buffer, DataLength);\r
 \r
                /* Finalize the stream transfer to send the last packet */\r
-               Endpoint_ClearCurrentBank();\r
+               Endpoint_ClearIN();\r
+\r
+               /* Wait until the endpoint is ready for the next packet */\r
+               while (!(Endpoint_IsINReady()));\r
+\r
+               /* Send an empty packet to prevent host buffering */\r
+               Endpoint_ClearIN();\r
        }\r
 }\r