forked from mfulz_github/qmk_firmware
Fix to previous patch (make CDCHost demo deallocate pipes when an invalid CDC interface is skipped).
Remove the saving of the USB_GetNextDescriptorComp() return value in all host demos, since it went unused anyway; replaced with a simple check against the success error code for clarity.
This commit is contained in:
parent
fabfdd454a
commit
76d5e99bb8
|
@ -70,7 +70,8 @@ uint8_t ProcessConfigurationDescriptor(void)
|
|||
return InvalidConfigDataReturned;
|
||||
|
||||
/* Get the CDC control interface from the configuration descriptor */
|
||||
if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData, NextCDCControlInterface))
|
||||
if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
|
||||
NextCDCControlInterface) != DESCRIPTOR_SEARCH_COMP_Found)
|
||||
{
|
||||
/* Descriptor not found, error out */
|
||||
return NoCDCInterfaceFound;
|
||||
|
@ -81,13 +82,14 @@ uint8_t ProcessConfigurationDescriptor(void)
|
|||
{
|
||||
/* Fetch the next bulk or interrupt endpoint from the current CDC interface */
|
||||
if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
|
||||
NextInterfaceCDCDataEndpoint))
|
||||
NextInterfaceCDCDataEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)
|
||||
{
|
||||
/* Check to see if the control interface's notification pipe has been found, if so search for the data interface */
|
||||
if (FoundEndpoints & (1 << CDC_NOTIFICATIONPIPE))
|
||||
{
|
||||
/* Get the next CDC data interface from the configuration descriptor (CDC class has two CDC interfaces) */
|
||||
if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData, NextCDCDataInterface))
|
||||
if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
|
||||
NextCDCDataInterface) != DESCRIPTOR_SEARCH_COMP_Found)
|
||||
{
|
||||
/* Descriptor not found, error out */
|
||||
return NoCDCInterfaceFound;
|
||||
|
@ -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 */
|
||||
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);
|
||||
/* Disable any already configured pipes from the invalid CDC interfaces */
|
||||
Pipe_SelectPipe(CDC_NOTIFICATIONPIPE);
|
||||
Pipe_DisablePipe();
|
||||
Pipe_SelectPipe(CDC_DATAPIPE_IN);
|
||||
Pipe_DisablePipe();
|
||||
Pipe_SelectPipe(CDC_DATAPIPE_OUT);
|
||||
Pipe_DisablePipe();
|
||||
|
||||
/* Get the next CDC control interface from the configuration descriptor (CDC class has two CDC interfaces) */
|
||||
if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData, NextCDCControlInterface))
|
||||
if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
|
||||
NextCDCControlInterface) != DESCRIPTOR_SEARCH_COMP_Found)
|
||||
{
|
||||
/* Descriptor not found, error out */
|
||||
return NoCDCInterfaceFound;
|
||||
|
@ -113,7 +119,7 @@ uint8_t ProcessConfigurationDescriptor(void)
|
|||
|
||||
/* Fetch the next bulk or interrupt endpoint from the current CDC interface */
|
||||
if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
|
||||
NextInterfaceCDCDataEndpoint))
|
||||
NextInterfaceCDCDataEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)
|
||||
{
|
||||
/* Descriptor not found, error out */
|
||||
return NoEndpointFound;
|
||||
|
|
|
@ -71,7 +71,8 @@ uint8_t ProcessConfigurationDescriptor(void)
|
|||
return InvalidConfigDataReturned;
|
||||
|
||||
/* Get the HID interface from the configuration descriptor */
|
||||
if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData, NextHIDInterface))
|
||||
if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
|
||||
NextHIDInterface) != DESCRIPTOR_SEARCH_COMP_Found)
|
||||
{
|
||||
/* Descriptor not found, error out */
|
||||
return NoHIDInterfaceFound;
|
||||
|
@ -80,7 +81,8 @@ uint8_t ProcessConfigurationDescriptor(void)
|
|||
while (FoundEndpoints != ((1 << HID_DATA_IN_PIPE) | (1 << HID_DATA_OUT_PIPE)))
|
||||
{
|
||||
/* Get the next HID interface's data endpoint descriptor */
|
||||
if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData, NextInterfaceHIDDataEndpoint))
|
||||
if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
|
||||
NextInterfaceHIDDataEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)
|
||||
{
|
||||
/* Not all HID devices have an OUT endpoint - if we've reached the end of the HID descriptor
|
||||
* but only found the mandatory IN endpoint, it's safe to continue with the device enumeration */
|
||||
|
|
|
@ -69,7 +69,8 @@ uint8_t ProcessConfigurationDescriptor(void)
|
|||
return InvalidConfigDataReturned;
|
||||
|
||||
/* Get the keyboard interface from the configuration descriptor */
|
||||
if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData, NextKeyboardInterface))
|
||||
if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
|
||||
NextKeyboardInterface) != DESCRIPTOR_SEARCH_COMP_Found)
|
||||
{
|
||||
/* Descriptor not found, error out */
|
||||
return NoHIDInterfaceFound;
|
||||
|
@ -77,7 +78,7 @@ uint8_t ProcessConfigurationDescriptor(void)
|
|||
|
||||
/* Get the keyboard interface's data endpoint descriptor */
|
||||
if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
|
||||
NextInterfaceKeyboardDataEndpoint))
|
||||
NextInterfaceKeyboardDataEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)
|
||||
{
|
||||
/* Descriptor not found, error out */
|
||||
return NoEndpointFound;
|
||||
|
|
|
@ -49,7 +49,6 @@ uint8_t ProcessConfigurationDescriptor(void)
|
|||
{
|
||||
uint8_t* ConfigDescriptorData;
|
||||
uint16_t ConfigDescriptorSize;
|
||||
uint8_t ErrorCode;
|
||||
|
||||
/* Get Configuration Descriptor size from the device */
|
||||
if (USB_GetDeviceConfigDescriptor(&ConfigDescriptorSize, NULL) != HOST_SENDCONTROL_Successful)
|
||||
|
@ -70,14 +69,16 @@ uint8_t ProcessConfigurationDescriptor(void)
|
|||
return InvalidConfigDataReturned;
|
||||
|
||||
/* Get the keyboard interface from the configuration descriptor */
|
||||
if ((ErrorCode = USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData, NextKeyboardInterface)))
|
||||
if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
|
||||
NextKeyboardInterface) != DESCRIPTOR_SEARCH_COMP_Found)
|
||||
{
|
||||
/* Descriptor not found, error out */
|
||||
return NoHIDInterfaceFound;
|
||||
}
|
||||
|
||||
/* Get the keyboard interface's HID descriptor */
|
||||
if ((ErrorCode = USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData, NextHID)))
|
||||
if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
|
||||
NextHID) != DESCRIPTOR_SEARCH_COMP_Found)
|
||||
{
|
||||
/* Descriptor not found, error out */
|
||||
return NoHIDDescriptorFound;
|
||||
|
@ -87,8 +88,8 @@ uint8_t ProcessConfigurationDescriptor(void)
|
|||
HIDReportSize = DESCRIPTOR_CAST(ConfigDescriptorData, USB_Descriptor_HID_t).HIDReportLength;
|
||||
|
||||
/* Get the keyboard interface's data endpoint descriptor */
|
||||
if ((ErrorCode = USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
|
||||
NextInterfaceKeyboardDataEndpoint)))
|
||||
if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
|
||||
NextInterfaceKeyboardDataEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)
|
||||
{
|
||||
/* Descriptor not found, error out */
|
||||
return NoEndpointFound;
|
||||
|
|
|
@ -49,7 +49,6 @@ uint8_t ProcessConfigurationDescriptor(void)
|
|||
{
|
||||
uint8_t* ConfigDescriptorData;
|
||||
uint16_t ConfigDescriptorSize;
|
||||
uint8_t ErrorCode;
|
||||
uint8_t FoundEndpoints = 0;
|
||||
|
||||
/* Get Configuration Descriptor size from the device */
|
||||
|
@ -71,8 +70,8 @@ uint8_t ProcessConfigurationDescriptor(void)
|
|||
return InvalidConfigDataReturned;
|
||||
|
||||
/* Get the mass storage interface from the configuration descriptor */
|
||||
if ((ErrorCode = USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
|
||||
NextMassStorageInterface)))
|
||||
if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
|
||||
NextMassStorageInterface) != DESCRIPTOR_SEARCH_COMP_Found)
|
||||
{
|
||||
/* Descriptor not found, error out */
|
||||
return NoInterfaceFound;
|
||||
|
@ -82,8 +81,8 @@ uint8_t ProcessConfigurationDescriptor(void)
|
|||
while (FoundEndpoints != ((1 << MASS_STORE_DATA_IN_PIPE) | (1 << MASS_STORE_DATA_OUT_PIPE)))
|
||||
{
|
||||
/* Fetch the next bulk endpoint from the current mass storage interface */
|
||||
if ((ErrorCode = USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
|
||||
NextInterfaceBulkDataEndpoint)))
|
||||
if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
|
||||
NextInterfaceBulkDataEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)
|
||||
{
|
||||
/* Descriptor not found, error out */
|
||||
return NoEndpointFound;
|
||||
|
|
|
@ -69,7 +69,8 @@ uint8_t ProcessConfigurationDescriptor(void)
|
|||
return InvalidConfigDataReturned;
|
||||
|
||||
/* Get the mouse interface from the configuration descriptor */
|
||||
if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData, NextMouseInterface))
|
||||
if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
|
||||
NextMouseInterface) != DESCRIPTOR_SEARCH_COMP_Found)
|
||||
{
|
||||
/* Descriptor not found, error out */
|
||||
return NoHIDInterfaceFound;
|
||||
|
@ -77,7 +78,7 @@ uint8_t ProcessConfigurationDescriptor(void)
|
|||
|
||||
/* Get the mouse interface's data endpoint descriptor */
|
||||
if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
|
||||
NextInterfaceMouseDataEndpoint))
|
||||
NextInterfaceMouseDataEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)
|
||||
{
|
||||
/* Descriptor not found, error out */
|
||||
return NoEndpointFound;
|
||||
|
|
|
@ -49,7 +49,6 @@ uint8_t ProcessConfigurationDescriptor(void)
|
|||
{
|
||||
uint8_t* ConfigDescriptorData;
|
||||
uint16_t ConfigDescriptorSize;
|
||||
uint8_t ErrorCode;
|
||||
|
||||
/* Get Configuration Descriptor size from the device */
|
||||
if (USB_GetDeviceConfigDescriptor(&ConfigDescriptorSize, NULL) != HOST_SENDCONTROL_Successful)
|
||||
|
@ -70,14 +69,16 @@ uint8_t ProcessConfigurationDescriptor(void)
|
|||
return InvalidConfigDataReturned;
|
||||
|
||||
/* Get the mouse interface from the configuration descriptor */
|
||||
if ((ErrorCode = USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData, NextMouseInterface)))
|
||||
if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
|
||||
NextMouseInterface) != DESCRIPTOR_SEARCH_COMP_Found)
|
||||
{
|
||||
/* Descriptor not found, error out */
|
||||
return NoHIDInterfaceFound;
|
||||
}
|
||||
|
||||
/* Get the mouse interface's HID descriptor */
|
||||
if ((ErrorCode = USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData, NextHID)))
|
||||
if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
|
||||
NextHID) != DESCRIPTOR_SEARCH_COMP_Found)
|
||||
{
|
||||
/* Descriptor not found, error out */
|
||||
return NoHIDDescriptorFound;
|
||||
|
@ -87,8 +88,8 @@ uint8_t ProcessConfigurationDescriptor(void)
|
|||
HIDReportSize = DESCRIPTOR_CAST(ConfigDescriptorData, USB_Descriptor_HID_t).HIDReportLength;
|
||||
|
||||
/* Get the mouse interface's data endpoint descriptor */
|
||||
if ((ErrorCode = USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
|
||||
NextInterfaceMouseDataEndpoint)))
|
||||
if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
|
||||
NextInterfaceMouseDataEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)
|
||||
{
|
||||
/* Descriptor not found, error out */
|
||||
return NoEndpointFound;
|
||||
|
|
|
@ -70,7 +70,8 @@ uint8_t ProcessConfigurationDescriptor(void)
|
|||
return InvalidConfigDataReturned;
|
||||
|
||||
/* Get the Still Image interface from the configuration descriptor */
|
||||
if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData, NextStillImageInterface))
|
||||
if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
|
||||
NextStillImageInterface) != DESCRIPTOR_SEARCH_COMP_Found)
|
||||
{
|
||||
/* Descriptor not found, error out */
|
||||
return NoInterfaceFound;
|
||||
|
@ -81,7 +82,7 @@ uint8_t ProcessConfigurationDescriptor(void)
|
|||
{
|
||||
/* Fetch the next endpoint from the current Still Image interface */
|
||||
if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
|
||||
NextSImageInterfaceDataEndpoint))
|
||||
NextSImageInterfaceDataEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)
|
||||
{
|
||||
/* Descriptor not found, error out */
|
||||
return NoEndpointFound;
|
||||
|
|
|
@ -10,12 +10,12 @@
|
|||
*
|
||||
* - Fixed bug in RNDISEthernet and DualCDC demos not using the correct USB_ControlRequest structure for control request data
|
||||
* - Fixed documentation showing incorrect USB mode support on the supported AVRs list
|
||||
* - Fixed RNDISEthernet not working under Linux due to Linux requiring an "optional" request which was unhandled
|
||||
* - Fixed RNDISEthernet not working under Linux due to Linux requiring an "optional" RNDIS request which was unhandled
|
||||
* - Fixed Mouse and Keyboard device demos not acting in accordance with the HID specification for idle periods (thanks to Brian Dickman)
|
||||
* - 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
|
||||
* - Fixed CDCHost not clearing configured pipes and resetting configured pipes mask when a partially enumerated invalid CDC
|
||||
* interface is skipped
|
||||
*
|
||||
*
|
||||
|
|
Loading…
Reference in New Issue