Oops - restore deleted MissileLauncher project, fix all spelling errors for "missile...
[pub/USBasp.git] / LUFA / Drivers / USB / LowLevel / Host.c
index 02a1c21..421719b 100644 (file)
@@ -214,9 +214,9 @@ uint8_t USB_Host_WaitMS(uint8_t MS)
 \r
        while (MS)\r
        {\r
-               if (FrameElapsed)\r
+               if (USB_INT_HasOccurred(USB_INT_HSOFI))\r
                {\r
-                       FrameElapsed = false;\r
+                       USB_INT_Clear(USB_INT_HSOFI);\r
                        MS--;\r
                }\r
                                        \r
@@ -259,9 +259,9 @@ static void USB_Host_ResetDevice(void)
        USB_Host_ResetBus();\r
        while (!(USB_Host_IsBusResetComplete()));\r
 \r
-       USB_Host_ResumeBus();   \r
-       \r
-       FrameElapsed = false;\r
+       USB_Host_ResumeBus();\r
+\r
+       USB_INT_Clear(USB_INT_HSOFI);\r
 \r
        for (uint8_t MSRem = 10; MSRem != 0; MSRem--)\r
        {\r
@@ -270,10 +270,9 @@ static void USB_Host_ResetDevice(void)
                   looked for - if it is found within 10ms, the device is still\r
                   present.                                                        */\r
 \r
-               if (FrameElapsed)\r
+               if (USB_INT_HasOccurred(USB_INT_HSOFI))\r
                {\r
-                       FrameElapsed = false;\r
-                       \r
+                       USB_INT_Clear(USB_INT_HSOFI);\r
                        USB_INT_Clear(USB_INT_DDISCI);\r
                        break;\r
                }\r
@@ -286,4 +285,56 @@ static void USB_Host_ResetDevice(void)
 \r
        USB_INT_Enable(USB_INT_DDISCI);\r
 }\r
+\r
+uint8_t USB_Host_SetDeviceConfiguration(uint8_t ConfigNumber)\r
+{\r
+       USB_ControlRequest = (USB_Request_Header_t)\r
+               {\r
+                       .bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE),\r
+                       .bRequest      = REQ_SetConfiguration,\r
+                       .wValue        = ConfigNumber,\r
+                       .wIndex        = 0,\r
+                       .wLength       = 0,\r
+               };\r
+\r
+       Pipe_SelectPipe(PIPE_CONTROLPIPE);\r
+       \r
+       return USB_Host_SendControlRequest(NULL);\r
+}\r
+\r
+uint8_t USB_Host_GetDeviceDescriptor(USB_Descriptor_Device_t* DeviceDescriptorPtr)\r
+{\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
+               };\r
+\r
+       Pipe_SelectPipe(PIPE_CONTROLPIPE);\r
+       \r
+       return USB_Host_SendControlRequest(DeviceDescriptorPtr);\r
+}\r
+\r
+uint8_t USB_Host_ClearPipeStall(uint8_t EndpointNum)\r
+{\r
+       if (Pipe_GetPipeToken() == PIPE_TOKEN_IN)\r
+         EndpointNum |= (1 << 7);\r
+\r
+       USB_ControlRequest = (USB_Request_Header_t)\r
+               {\r
+                       .bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_ENDPOINT),\r
+                       .bRequest      = REQ_ClearFeature,\r
+                       .wValue        = FEATURE_ENDPOINT_HALT,\r
+                       .wIndex        = EndpointNum,\r
+                       .wLength       = 0,\r
+               };\r
+\r
+       Pipe_SelectPipe(PIPE_CONTROLPIPE);\r
+       \r
+       return USB_Host_SendControlRequest(NULL);\r
+}\r
+\r
 #endif\r