break;\r
}\r
\r
- if (!(WaitMSRemaining--))\r
+ if (!(--WaitMSRemaining))\r
USB_HostState = PostWaitState;\r
}\r
\r
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
bool BusSuspended = USB_Host_IsBusSuspended();\r
uint8_t ErrorCode = HOST_WAITERROR_Successful;\r
\r
- USB_INT_Clear(USB_INT_HSOFI);\r
USB_Host_ResumeBus();\r
\r
while (MS)\r
USB_Host_ResetBus();\r
while (!(USB_Host_IsBusResetComplete()));\r
\r
+ USB_Host_ResumeBus();\r
+\r
USB_INT_Clear(USB_INT_HSOFI);\r
- USB_Host_ResumeBus(); \r
- \r
+\r
for (uint8_t MSRem = 10; MSRem != 0; MSRem--)\r
{\r
/* Workaround for powerless-pull-up devices. After a USB bus reset,\r
\r
if (USB_INT_HasOccurred(USB_INT_HSOFI))\r
{\r
+ USB_INT_Clear(USB_INT_HSOFI);\r
USB_INT_Clear(USB_INT_DDISCI);\r
break;\r
}\r
\r
USB_INT_Enable(USB_INT_DDISCI);\r
}\r
+\r
+uint8_t USB_Host_SetDeviceConfiguration(const 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(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