X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/bdedbd558ce3db0d7c1e0ff6cdde2f480277aff7..bae00a3d42f150482c973a7238f3501ccd026063:/Demos/Host/LowLevel/CDCHost/ConfigDescriptor.c diff --git a/Demos/Host/LowLevel/CDCHost/ConfigDescriptor.c b/Demos/Host/LowLevel/CDCHost/ConfigDescriptor.c index 7afb702c2..42636ee56 100644 --- a/Demos/Host/LowLevel/CDCHost/ConfigDescriptor.c +++ b/Demos/Host/LowLevel/CDCHost/ConfigDescriptor.c @@ -43,17 +43,17 @@ * * This routine searches for a CDC interface descriptor containing bulk data IN and OUT endpoints, and an interrupt event endpoint. * - * \return An error code from the CDCHost_GetConfigDescriptorDataCodes_t enum. + * \return An error code from the \ref CDCHost_GetConfigDescriptorDataCodes_t enum. */ uint8_t ProcessConfigurationDescriptor(void) { uint8_t ConfigDescriptorData[512]; - uint8_t* CurrConfigLocation = ConfigDescriptorData; + void* CurrConfigLocation = ConfigDescriptorData; uint16_t CurrConfigBytesRem; uint8_t FoundEndpoints = 0; /* Retrieve the entire configuration descriptor into the allocated buffer */ - switch (USB_GetDeviceConfigDescriptor(1, &CurrConfigBytesRem, ConfigDescriptorData, sizeof(ConfigDescriptorData))) + switch (USB_Host_GetDeviceConfigDescriptor(1, &CurrConfigBytesRem, ConfigDescriptorData, sizeof(ConfigDescriptorData))) { case HOST_GETCONFIG_Successful: break; @@ -145,6 +145,10 @@ uint8_t ProcessConfigurationDescriptor(void) /* Check if the endpoint is a bulk IN or bulk OUT endpoint */ if (EndpointData->EndpointAddress & ENDPOINT_DESCRIPTOR_DIR_IN) { + /* Kill the configured OUT pipe if the data endpoints are bidirectional */ + if (Pipe_IsEndpointBound(EndpointData->EndpointAddress)) + Pipe_DisablePipe(); + /* Configure the data IN pipe */ Pipe_ConfigurePipe(CDC_DATAPIPE_IN, EP_TYPE_BULK, PIPE_TOKEN_IN, EndpointData->EndpointAddress, EndpointData->EndpointSize, PIPE_BANK_SINGLE); @@ -154,9 +158,13 @@ uint8_t ProcessConfigurationDescriptor(void) } else { - /* Configure the data OUT pipe */ - Pipe_ConfigurePipe(CDC_DATAPIPE_OUT, EP_TYPE_BULK, PIPE_TOKEN_OUT, - EndpointData->EndpointAddress, EndpointData->EndpointSize, PIPE_BANK_SINGLE); + /* Only configure the OUT data pipe if the data endpoints haev not shown to be bidirectional */ + if (!(Pipe_IsEndpointBound(EndpointData->EndpointAddress))) + { + /* Configure the data OUT pipe */ + Pipe_ConfigurePipe(CDC_DATAPIPE_OUT, EP_TYPE_BULK, PIPE_TOKEN_OUT, + EndpointData->EndpointAddress, EndpointData->EndpointSize, PIPE_BANK_SINGLE); + } /* Set the flag indicating that the data OUT pipe has been found */ FoundEndpoints |= (1 << CDC_DATAPIPE_OUT);