Add tag for the 120219 release.
[pub/USBasp.git] / Demos / Host / LowLevel / KeyboardHostWithParser / ConfigDescriptor.c
index 132b97b..765b325 100644 (file)
@@ -1,13 +1,13 @@
 /*
              LUFA Library
 /*
              LUFA Library
-     Copyright (C) Dean Camera, 2010.
+     Copyright (C) Dean Camera, 2012.
 
   dean [at] fourwalledcubicle [dot] com
 
   dean [at] fourwalledcubicle [dot] com
-      www.fourwalledcubicle.com
+           www.lufa-lib.org
 */
 
 /*
 */
 
 /*
-  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 
   Permission to use, copy, modify, distribute, and sell this
   software and its documentation for any purpose is hereby granted
 
   Permission to use, copy, modify, distribute, and sell this
   software and its documentation for any purpose is hereby granted
@@ -105,7 +105,7 @@ uint8_t ProcessConfigurationDescriptor(void)
                USB_Descriptor_Endpoint_t* EndpointData = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Endpoint_t);
 
                /* If the endpoint is a IN type endpoint */
                USB_Descriptor_Endpoint_t* EndpointData = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Endpoint_t);
 
                /* If the endpoint is a IN type endpoint */
-               if (EndpointData->EndpointAddress & ENDPOINT_DESCRIPTOR_DIR_IN)
+               if ((EndpointData->EndpointAddress & ENDPOINT_DIR_MASK) == ENDPOINT_DIR_IN)
                  DataINEndpoint = EndpointData;
        }
 
                  DataINEndpoint = EndpointData;
        }
 
@@ -131,10 +131,14 @@ uint8_t ProcessConfigurationDescriptor(void)
  */
 uint8_t DComp_NextKeyboardInterface(void* CurrentDescriptor)
 {
  */
 uint8_t DComp_NextKeyboardInterface(void* CurrentDescriptor)
 {
-       if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface)
+       USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t);
+
+       if (Header->Type == DTYPE_Interface)
        {
        {
+               USB_Descriptor_Interface_t* Interface = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Interface_t);
+
                /* Check the HID descriptor class, break out if correct class interface found */
                /* Check the HID descriptor class, break out if correct class interface found */
-               if (DESCRIPTOR_CAST(CurrentDescriptor, USB_Descriptor_Interface_t).Class    == HID_CSCP_HIDClass)
+               if (Interface->Class == HID_CSCP_HIDClass)
                {
                        return DESCRIPTOR_SEARCH_Found;
                }
                {
                        return DESCRIPTOR_SEARCH_Found;
                }
@@ -147,24 +151,21 @@ uint8_t DComp_NextKeyboardInterface(void* CurrentDescriptor)
  *  configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration
  *  descriptor processing if an incompatible descriptor configuration is found.
  *
  *  configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration
  *  descriptor processing if an incompatible descriptor configuration is found.
  *
- *  This comparator searches for the next IN Endpoint descriptor inside the current interface descriptor,
- *  aborting the search if another interface descriptor is found before the required endpoint.
+ *  This comparator searches for the next Endpoint descriptor inside the current interface descriptor, aborting the
+ *  search if another interface descriptor is found before the required endpoint.
  *
  *  \return A value from the DSEARCH_Return_ErrorCodes_t enum
  */
 uint8_t DComp_NextKeyboardInterfaceDataEndpoint(void* CurrentDescriptor)
 {
  *
  *  \return A value from the DSEARCH_Return_ErrorCodes_t enum
  */
 uint8_t DComp_NextKeyboardInterfaceDataEndpoint(void* CurrentDescriptor)
 {
-       if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Endpoint)
-       {
-               if (DESCRIPTOR_CAST(CurrentDescriptor, USB_Descriptor_Endpoint_t).EndpointAddress & ENDPOINT_DESCRIPTOR_DIR_IN)
-                 return DESCRIPTOR_SEARCH_Found;
-       }
-       else if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface)
-       {
-               return DESCRIPTOR_SEARCH_Fail;
-       }
+       USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t);
 
 
-       return DESCRIPTOR_SEARCH_NotFound;
+       if (Header->Type == DTYPE_Endpoint)
+         return DESCRIPTOR_SEARCH_Found;
+       else if (Header->Type == DTYPE_Interface)
+         return DESCRIPTOR_SEARCH_Fail;
+       else
+         return DESCRIPTOR_SEARCH_NotFound;
 }
 
 /** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's
 }
 
 /** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's
@@ -177,9 +178,11 @@ uint8_t DComp_NextKeyboardInterfaceDataEndpoint(void* CurrentDescriptor)
  */
 uint8_t DComp_NextHID(void* CurrentDescriptor)
 {
  */
 uint8_t DComp_NextHID(void* CurrentDescriptor)
 {
-       if (DESCRIPTOR_TYPE(CurrentDescriptor) == HID_DTYPE_HID)
+       USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t);
+
+       if (Header->Type == HID_DTYPE_HID)
          return DESCRIPTOR_SEARCH_Found;
          return DESCRIPTOR_SEARCH_Found;
-       else if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface)
+       else if (Header->Type == DTYPE_Interface)
          return DESCRIPTOR_SEARCH_Fail;
        else
          return DESCRIPTOR_SEARCH_NotFound;
          return DESCRIPTOR_SEARCH_Fail;
        else
          return DESCRIPTOR_SEARCH_NotFound;