Fix to previous patch (make CDCHost demo deallocate pipes when an invalid CDC interfa...
[pub/USBasp.git] / Demos / Host / CDCHost / ConfigDescriptor.c
index 29afbfa..faad3cc 100644 (file)
@@ -70,7 +70,8 @@ uint8_t ProcessConfigurationDescriptor(void)
          return InvalidConfigDataReturned;\r
        \r
        /* Get the CDC control interface from the configuration descriptor */\r
-       if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData, NextCDCControlInterface))\r
+       if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,\r
+                                     NextCDCControlInterface) != DESCRIPTOR_SEARCH_COMP_Found)\r
        {\r
                /* Descriptor not found, error out */\r
                return NoCDCInterfaceFound;\r
@@ -81,13 +82,14 @@ uint8_t ProcessConfigurationDescriptor(void)
        {\r
                /* Fetch the next bulk or interrupt endpoint from the current CDC interface */\r
                if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,\r
-                                                  NextInterfaceCDCDataEndpoint))\r
+                                             NextInterfaceCDCDataEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)\r
                {\r
                        /* Check to see if the control interface's notification pipe has been found, if so search for the data interface */\r
                        if (FoundEndpoints & (1 << CDC_NOTIFICATIONPIPE))\r
                        {\r
                                /* Get the next CDC data interface from the configuration descriptor (CDC class has two CDC interfaces) */\r
-                               if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData, NextCDCDataInterface))\r
+                               if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData, \r
+                                                             NextCDCDataInterface) != DESCRIPTOR_SEARCH_COMP_Found)\r
                                {\r
                                        /* Descriptor not found, error out */\r
                                        return NoCDCInterfaceFound;\r
@@ -98,13 +100,17 @@ uint8_t ProcessConfigurationDescriptor(void)
                                /* Clear the found endpoints mask, since any already processed endpoints aren't in the CDC interface we need */\r
                                FoundEndpoints = 0;\r
 \r
-                               /* Disable any already configured endpoints from the invalid CDC interfaces */\r
-                               Endpoint_DisableEndpoint(CDC_NOTIFICATIONPIPE);\r
-                               Endpoint_DisableEndpoint(CDC_DATAPIPE_IN);\r
-                               Endpoint_DisableEndpoint(CDC_DATAPIPE_OUT);\r
+                               /* Disable any already configured pipes from the invalid CDC interfaces */\r
+                               Pipe_SelectPipe(CDC_NOTIFICATIONPIPE);\r
+                               Pipe_DisablePipe();\r
+                               Pipe_SelectPipe(CDC_DATAPIPE_IN);\r
+                               Pipe_DisablePipe();\r
+                               Pipe_SelectPipe(CDC_DATAPIPE_OUT);\r
+                               Pipe_DisablePipe();\r
                        \r
                                /* Get the next CDC control interface from the configuration descriptor (CDC class has two CDC interfaces) */\r
-                               if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData, NextCDCControlInterface))\r
+                               if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,\r
+                                                             NextCDCControlInterface) != DESCRIPTOR_SEARCH_COMP_Found)\r
                                {\r
                                        /* Descriptor not found, error out */\r
                                        return NoCDCInterfaceFound;\r
@@ -113,7 +119,7 @@ uint8_t ProcessConfigurationDescriptor(void)
 \r
                        /* Fetch the next bulk or interrupt endpoint from the current CDC interface */\r
                        if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,\r
-                                                                                          NextInterfaceCDCDataEndpoint))\r
+                                                     NextInterfaceCDCDataEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)\r
                        {\r
                                /* Descriptor not found, error out */\r
                                return NoEndpointFound;\r