Fix incorrect Event call name in USBInterrupt.c.
[pub/USBasp.git] / LUFA / Drivers / USB / Class / Host / HID.c
index 99e44a4..6652cdc 100644 (file)
 #include "../../HighLevel/USBMode.h"\r
 #if defined(USB_CAN_BE_HOST)\r
 \r
+#define INCLUDE_FROM_HID_CLASS_HOST_C\r
 #include "HID.h"\r
 \r
+uint8_t HID_Host_ConfigurePipes(USB_ClassInfo_HID_Host_t* HIDInterfaceInfo, uint16_t ConfigDescriptorSize,\r
+                                uint8_t* ConfigDescriptorData)\r
+{\r
+       uint8_t  FoundEndpoints = 0;\r
+\r
+       memset(&HIDInterfaceInfo->State, 0x00, sizeof(HIDInterfaceInfo->State));\r
+\r
+       if (DESCRIPTOR_TYPE(ConfigDescriptorData) != DTYPE_Configuration)\r
+         return HID_ENUMERROR_InvalidConfigDescriptor;\r
+       \r
+       do\r
+       {\r
+               if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,\r
+                                                                         DComp_HID_Host_NextHIDInterface) != DESCRIPTOR_SEARCH_COMP_Found)\r
+               {\r
+                       return HID_ENUMERROR_NoHIDInterfaceFound;\r
+               }\r
+       } while (HIDInterfaceInfo->Config.MatchInterfaceProtocol &&\r
+                DESCRIPTOR_PCAST(ConfigDescriptorData,\r
+                                 USB_Descriptor_Interface_t)->Protocol != HIDInterfaceInfo->Config.HIDInterfaceProtocol);\r
+\r
+       while (FoundEndpoints != ((1 << HID_FOUND_DATAPIPE_IN) | (1 << HID_FOUND_DATAPIPE_OUT)))\r
+       {\r
+               if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,\r
+                                             DComp_HID_Host_NextInterfaceHIDDataEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)\r
+               {\r
+                       if (FoundEndpoints == (1 << HID_FOUND_DATAPIPE_IN))\r
+                         break;\r
+                               \r
+                       return HID_ENUMERROR_EndpointsNotFound;\r
+               }\r
+               \r
+               USB_Descriptor_Endpoint_t* EndpointData = DESCRIPTOR_PCAST(ConfigDescriptorData, USB_Descriptor_Endpoint_t);\r
+\r
+               if (EndpointData->EndpointAddress & ENDPOINT_DESCRIPTOR_DIR_IN)\r
+               {\r
+                       Pipe_ConfigurePipe(HIDInterfaceInfo->Config.DataINPipeNumber, EP_TYPE_INTERRUPT, PIPE_TOKEN_IN,\r
+                                                          EndpointData->EndpointAddress, EndpointData->EndpointSize, PIPE_BANK_SINGLE);\r
+                       \r
+                       FoundEndpoints |= (1 << HID_FOUND_DATAPIPE_IN);\r
+               }\r
+               else\r
+               {\r
+                       Pipe_ConfigurePipe(HIDInterfaceInfo->Config.DataOUTPipeNumber, EP_TYPE_INTERRUPT, PIPE_TOKEN_OUT,\r
+                                                          EndpointData->EndpointAddress, EndpointData->EndpointSize, PIPE_BANK_SINGLE);\r
+                       \r
+                       FoundEndpoints |= (1 << HID_FOUND_DATAPIPE_OUT);                \r
+               }\r
+       }\r
+\r
+       return HID_ENUMERROR_NoError;\r
+}\r
+\r
+static uint8_t DComp_HID_Host_NextHIDInterface(void* CurrentDescriptor)\r
+{\r
+       if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface)\r
+       {\r
+               USB_Descriptor_Interface_t* CurrentInterface = DESCRIPTOR_PCAST(CurrentDescriptor,\r
+                                                                               USB_Descriptor_Interface_t);\r
+       \r
+               if (CurrentInterface->Class == HID_INTERFACE_CLASS)\r
+                 return DESCRIPTOR_SEARCH_Found;\r
+       }\r
+       \r
+       return DESCRIPTOR_SEARCH_NotFound;\r
+}\r
+\r
+static uint8_t DComp_HID_Host_NextInterfaceHIDDataEndpoint(void* CurrentDescriptor)\r
+{\r
+       if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Endpoint)\r
+       {\r
+               USB_Descriptor_Endpoint_t* CurrentEndpoint = DESCRIPTOR_PCAST(CurrentDescriptor,\r
+                                                                             USB_Descriptor_Endpoint_t);       \r
+\r
+               if (!(Pipe_IsEndpointBound(CurrentEndpoint->EndpointAddress)))\r
+                 return DESCRIPTOR_SEARCH_Found;\r
+       }\r
+       else if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface)\r
+       {\r
+               return DESCRIPTOR_SEARCH_Fail;\r
+       }\r
+\r
+       return DESCRIPTOR_SEARCH_NotFound;\r
+}\r
+\r
+void HID_Host_USBTask(USB_ClassInfo_HID_Host_t* HIDInterfaceInfo)\r
+{\r
+\r
+}\r
+\r
 #endif\r