Better fix for LowLevel CDC demo issue where sending data before the line encoding...
[pub/USBasp.git] / Demos / Device / LowLevel / DualCDC / DualCDC.c
index dd278d5..654ce86 100644 (file)
  *  It is possible to completely ignore these value or use other settings as the host is completely unaware of the physical\r
  *  serial link characteristics and instead sends and receives data in endpoint streams.\r
  */\r
-CDC_Line_Coding_t LineCoding1 = { .BaudRateBPS = 9600,\r
-                                  .CharFormat  = OneStopBit,\r
-                                  .ParityType  = Parity_None,\r
-                                  .DataBits    = 8            };\r
+CDC_Line_Coding_t LineEncoding1 = { .BaudRateBPS = 0,\r
+                                    .CharFormat  = OneStopBit,\r
+                                    .ParityType  = Parity_None,\r
+                                    .DataBits    = 8            };\r
 \r
 /** Contains the current baud rate and other settings of the second virtual serial port. While this demo does not use\r
  *  the physical USART and thus does not use these settings, they must still be retained and returned to the host\r
@@ -58,10 +58,10 @@ CDC_Line_Coding_t LineCoding1 = { .BaudRateBPS = 9600,
  *  It is possible to completely ignore these value or use other settings as the host is completely unaware of the physical\r
  *  serial link characteristics and instead sends and receives data in endpoint streams.\r
  */\r
-CDC_Line_Coding_t LineCoding2 = { .BaudRateBPS = 9600,\r
-                                  .CharFormat  = OneStopBit,\r
-                                  .ParityType  = Parity_None,\r
-                                  .DataBits    = 8            };\r
+CDC_Line_Coding_t LineEncoding2 = { .BaudRateBPS = 0,\r
+                                    .CharFormat  = OneStopBit,\r
+                                    .ParityType  = Parity_None,\r
+                                    .DataBits    = 8            };\r
 \r
 /** Main program entry point. This routine configures the hardware required by the application, then\r
  *  starts the scheduler to run the application tasks.\r
@@ -172,7 +172,7 @@ void EVENT_USB_ConfigurationChanged(void)
 void EVENT_USB_UnhandledControlPacket(void)\r
 {\r
        /* Determine which interface's Line Coding data is being set from the wIndex parameter */\r
-       uint8_t* LineCodingData = (USB_ControlRequest.wIndex == 0) ? (uint8_t*)&LineCoding1 : (uint8_t*)&LineCoding2;\r
+       uint8_t* LineEncodingData = (USB_ControlRequest.wIndex == 0) ? (uint8_t*)&LineEncoding1 : (uint8_t*)&LineEncoding2;\r
 \r
        /* Process CDC specific control requests */\r
        switch (USB_ControlRequest.bRequest)\r
@@ -184,7 +184,7 @@ void EVENT_USB_UnhandledControlPacket(void)
                                Endpoint_ClearSETUP();\r
 \r
                                /* Write the line coding data to the control endpoint */\r
-                               Endpoint_Write_Control_Stream_LE(LineCodingData, sizeof(CDC_Line_Coding_t));\r
+                               Endpoint_Write_Control_Stream_LE(LineEncodingData, sizeof(CDC_Line_Coding_t));\r
                                \r
                                /* Finalize the stream transfer to send the last packet or clear the host abort */\r
                                Endpoint_ClearOUT();\r
@@ -198,7 +198,7 @@ void EVENT_USB_UnhandledControlPacket(void)
                                Endpoint_ClearSETUP();\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
+                               Endpoint_Read_Control_Stream_LE(LineEncodingData, sizeof(CDC_Line_Coding_t));\r
 \r
                                /* Finalize the stream transfer to clear the last packet from the host */\r
                                Endpoint_ClearIN();\r
@@ -256,7 +256,7 @@ void CDC1_Task(void)
        {\r
                ActionSent = false;\r
        }\r
-       else if (ActionSent == false)\r
+       else if ((ActionSent == false) && LineEncoding1.BaudRateBPS)\r
        {\r
                ActionSent = true;\r
                \r