Rename PDIProtocol.c/.h to XPROGProtocol.c/.h as it will now handle both TPI and...
[pub/USBasp.git] / LUFA / Drivers / USB / LowLevel / Host.c
index 9186f1c..6d425b2 100644 (file)
@@ -66,10 +66,12 @@ void USB_Host_ProcessNextHostState(void)
                        USB_HostState = HOST_STATE_Powered_WaitForDeviceSettle;\r
                        break;\r
                case HOST_STATE_Powered_WaitForDeviceSettle:\r
-                       #if HOST_DEVICE_SETTLE_DELAY_MS > 0\r
-                       _delay_ms(1);\r
-\r
-                       if (!(WaitMSRemaining--))\r
+                       if (WaitMSRemaining--)\r
+                       {\r
+                               _delay_ms(1);\r
+                               break;\r
+                       }\r
+                       else\r
                        {\r
                                USB_Host_VBUS_Manual_Off();\r
 \r
@@ -79,9 +81,6 @@ void USB_Host_ProcessNextHostState(void)
                                \r
                                USB_HostState = HOST_STATE_Powered_WaitForConnect;\r
                        }\r
-                       #else\r
-                       USB_HostState = HOST_STATE_Powered_WaitForConnect;                      \r
-                       #endif\r
                        \r
                        break;\r
                case HOST_STATE_Powered_WaitForConnect:         \r
@@ -297,11 +296,11 @@ uint8_t USB_Host_GetDeviceDescriptor(void* const DeviceDescriptorPtr)
 {\r
        USB_ControlRequest = (USB_Request_Header_t)\r
                {\r
-                       bmRequestType: (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE),\r
-                       bRequest:      REQ_GetDescriptor,\r
-                       wValue:        (DTYPE_Device << 8),\r
-                       wIndex:        0,\r
-                       wLength:       sizeof(USB_Descriptor_Device_t),\r
+                       .bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE),\r
+                       .bRequest      = REQ_GetDescriptor,\r
+                       .wValue        = (DTYPE_Device << 8),\r
+                       .wIndex        = 0,\r
+                       .wLength       = sizeof(USB_Descriptor_Device_t),\r
                };\r
 \r
        Pipe_SelectPipe(PIPE_CONTROLPIPE);\r
@@ -309,6 +308,22 @@ uint8_t USB_Host_GetDeviceDescriptor(void* const DeviceDescriptorPtr)
        return USB_Host_SendControlRequest(DeviceDescriptorPtr);\r
 }\r
 \r
+uint8_t USB_Host_GetDeviceStringDescriptor(uint8_t Index, void* const Buffer, uint8_t BufferLength)\r
+{\r
+       USB_ControlRequest = (USB_Request_Header_t)\r
+               {\r
+                       .bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE),\r
+                       .bRequest      = REQ_GetDescriptor,\r
+                       .wValue        = (DTYPE_String << 8) | Index,\r
+                       .wIndex        = 0,\r
+                       .wLength       = BufferLength,\r
+               };\r
+\r
+       Pipe_SelectPipe(PIPE_CONTROLPIPE);\r
+       \r
+       return USB_Host_SendControlRequest(Buffer);\r
+}\r
+\r
 uint8_t USB_Host_ClearPipeStall(uint8_t EndpointNum)\r
 {\r
        if (Pipe_GetPipeToken() == PIPE_TOKEN_IN)\r