X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/87b2572ae50d20f04dfa6bfbd9e0b8b20ee650e9..bae00a3d42f150482c973a7238f3501ccd026063:/Demos/Host/LowLevel/CDCHost/ConfigDescriptor.c?ds=inline diff --git a/Demos/Host/LowLevel/CDCHost/ConfigDescriptor.c b/Demos/Host/LowLevel/CDCHost/ConfigDescriptor.c index be0e46766..42636ee56 100644 --- a/Demos/Host/LowLevel/CDCHost/ConfigDescriptor.c +++ b/Demos/Host/LowLevel/CDCHost/ConfigDescriptor.c @@ -48,12 +48,12 @@ 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); @@ -174,7 +182,7 @@ uint8_t ProcessConfigurationDescriptor(void) * * This comparator searches for the next Interface descriptor of the correct CDC control Class, Subclass and Protocol values. * - * \return A value from the \ref DSEARCH_Return_ErrorCodes_t enum + * \return A value from the DSEARCH_Return_ErrorCodes_t enum */ uint8_t DComp_NextCDCControlInterface(void* CurrentDescriptor) { @@ -198,7 +206,7 @@ uint8_t DComp_NextCDCControlInterface(void* CurrentDescriptor) * * This comparator searches for the next Interface descriptor of the correct CDC data Class, Subclass and Protocol values. * - * \return A value from the \ref DSEARCH_Return_ErrorCodes_t enum + * \return A value from the DSEARCH_Return_ErrorCodes_t enum */ uint8_t DComp_NextCDCDataInterface(void* CurrentDescriptor) { @@ -224,7 +232,7 @@ uint8_t DComp_NextCDCDataInterface(void* CurrentDescriptor) * aborting the search if another interface descriptor is found before the required endpoint (so that it may be compared * using a different comparator to determine if it is another CDC class interface). * - * \return A value from the \ref DSEARCH_Return_ErrorCodes_t enum + * \return A value from the DSEARCH_Return_ErrorCodes_t enum */ uint8_t DComp_NextCDCDataInterfaceEndpoint(void* CurrentDescriptor) {