From fabfdd454a11440a5789a70f6476889b02928438 Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Fri, 15 May 2009 07:38:35 +0000 Subject: [PATCH] Fixed CDCHost not clearing configured endpoints and resetting configured endpoints mask when a partially enumerated invalid CDC interface is skipped. --- Demos/Device/RNDISEthernet/RNDISEthernet.c | 8 ++++---- Demos/Host/CDCHost/ConfigDescriptor.c | 8 ++++++++ LUFA/ChangeLog.txt | 2 ++ 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/Demos/Device/RNDISEthernet/RNDISEthernet.c b/Demos/Device/RNDISEthernet/RNDISEthernet.c index 96fef39929..fd88ecf896 100644 --- a/Demos/Device/RNDISEthernet/RNDISEthernet.c +++ b/Demos/Device/RNDISEthernet/RNDISEthernet.c @@ -113,10 +113,6 @@ EVENT_HANDLER(USB_Disconnect) EVENT_HANDLER(USB_ConfigurationChanged) { /* Setup CDC Notification, Rx and Tx Endpoints */ - Endpoint_ConfigureEndpoint(CDC_NOTIFICATION_EPNUM, EP_TYPE_INTERRUPT, - ENDPOINT_DIR_IN, CDC_NOTIFICATION_EPSIZE, - ENDPOINT_BANK_SINGLE); - Endpoint_ConfigureEndpoint(CDC_TX_EPNUM, EP_TYPE_BULK, ENDPOINT_DIR_IN, CDC_TXRX_EPSIZE, ENDPOINT_BANK_SINGLE); @@ -125,6 +121,10 @@ EVENT_HANDLER(USB_ConfigurationChanged) ENDPOINT_DIR_OUT, CDC_TXRX_EPSIZE, ENDPOINT_BANK_SINGLE); + Endpoint_ConfigureEndpoint(CDC_NOTIFICATION_EPNUM, EP_TYPE_INTERRUPT, + ENDPOINT_DIR_IN, CDC_NOTIFICATION_EPSIZE, + ENDPOINT_BANK_SINGLE); + /* Indicate USB connected and ready */ UpdateStatus(Status_USBReady); diff --git a/Demos/Host/CDCHost/ConfigDescriptor.c b/Demos/Host/CDCHost/ConfigDescriptor.c index 9a23fc3fa1..29afbfaa16 100644 --- a/Demos/Host/CDCHost/ConfigDescriptor.c +++ b/Demos/Host/CDCHost/ConfigDescriptor.c @@ -95,6 +95,14 @@ uint8_t ProcessConfigurationDescriptor(void) } else { + /* Clear the found endpoints mask, since any already processed endpoints aren't in the CDC interface we need */ + FoundEndpoints = 0; + + /* Disable any already configured endpoints from the invalid CDC interfaces */ + Endpoint_DisableEndpoint(CDC_NOTIFICATIONPIPE); + Endpoint_DisableEndpoint(CDC_DATAPIPE_IN); + Endpoint_DisableEndpoint(CDC_DATAPIPE_OUT); + /* Get the next CDC control interface from the configuration descriptor (CDC class has two CDC interfaces) */ if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData, NextCDCControlInterface)) { diff --git a/LUFA/ChangeLog.txt b/LUFA/ChangeLog.txt index be15e73f87..69a60f1437 100644 --- a/LUFA/ChangeLog.txt +++ b/LUFA/ChangeLog.txt @@ -15,6 +15,8 @@ * - Removed support for endpoint/pipe non-control interrupts; these did not act in the way users expected, and had many subtle issues * - Fixed Device Mode not handling Set Feature and Clear Feature Chapter 9 requests that are addressed to the device (thanks to Brian Dickman) * - Moved control endpoint interrupt handling into the library itself, enable via the new INTERRUPT_CONTROL_ENDPOINT token + * - Fixed CDCHost not clearing configured endpoints and resetting configured endpoints mask when a partially enumerated invalid CDC + * interface is skipped * * * \section Sec_ChangeLog090510 Version 090510