USB_HostState = HOST_STATE_Attached_WaitForDeviceSettle;\r
break;\r
case HOST_STATE_Attached_WaitForDeviceSettle:\r
+ #if HOST_DEVICE_SETTLE_DELAY_MS > 0\r
_delay_ms(1);\r
\r
if (!(WaitMSRemaining--))\r
\r
USB_HostState = HOST_STATE_Attached_WaitForConnect;\r
}\r
+ #else\r
+ USB_HostState = HOST_STATE_Attached_WaitForConnect; \r
+ #endif\r
\r
break;\r
case HOST_STATE_Attached_WaitForConnect: \r
break;\r
}\r
\r
- Pipe_SetInfiniteINRequests();\r
- \r
USB_ControlRequest = (USB_Request_Header_t)\r
{\r
.bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE),\r
USB_INT_Enable(USB_INT_DDISCI);\r
}\r
\r
-uint8_t USB_Host_SetDeviceConfiguration(uint8_t ConfigNumber)\r
+uint8_t USB_Host_SetDeviceConfiguration(const uint8_t ConfigNumber)\r
{\r
USB_ControlRequest = (USB_Request_Header_t)\r
{\r
return USB_Host_SendControlRequest(NULL);\r
}\r
\r
+uint8_t USB_Host_GetDeviceDescriptor(void* const 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