X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/6a10d6b465be27db090d760dc0fbe722c94e4344..a908773a13ee491f2f8907cdf57c26fb39e10658:/LUFA/Drivers/USB/HighLevel/USBTask.c diff --git a/LUFA/Drivers/USB/HighLevel/USBTask.c b/LUFA/Drivers/USB/HighLevel/USBTask.c index 69670232b..738dc1592 100644 --- a/LUFA/Drivers/USB/HighLevel/USBTask.c +++ b/LUFA/Drivers/USB/HighLevel/USBTask.c @@ -28,14 +28,15 @@ this software. */ -#include "../LowLevel/USBMode.h" +#include "USBMode.h" #define INCLUDE_FROM_USBTASK_C #include "USBTask.h" -volatile bool USB_IsSuspended; -volatile bool USB_IsConnected; -volatile bool USB_IsInitialized; +volatile bool USB_IsSuspended; +volatile bool USB_IsConnected; +volatile bool USB_IsInitialized; +USB_Request_Header_t USB_ControlRequest; #if defined(USB_CAN_BE_HOST) volatile uint8_t USB_HostState; @@ -64,7 +65,7 @@ static void USB_DeviceTask(void) Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP); - if (Endpoint_IsSetupReceived()) + if (Endpoint_IsSETUPReceived()) { ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { @@ -86,6 +87,10 @@ static void USB_HostTask(void) static uint16_t WaitMSRemaining; static uint8_t PostWaitState; + uint8_t PrevPipe = Pipe_GetCurrentPipe(); + + Pipe_SelectPipe(PIPE_CONTROLPIPE); + switch (USB_HostState) { case HOST_STATE_WaitForDevice: @@ -94,7 +99,7 @@ static void USB_HostTask(void) if ((SubErrorCode = USB_Host_WaitMS(1)) != HOST_WAITERROR_Successful) { USB_HostState = PostWaitState; - ErrorCode = HOST_ENUMERROR_WaitStage; + ErrorCode = HOST_ENUMERROR_WaitStage; break; } @@ -152,7 +157,7 @@ static void USB_HostTask(void) break; case HOST_STATE_Powered: Pipe_ConfigurePipe(PIPE_CONTROLPIPE, EP_TYPE_CONTROL, - PIPE_TOKEN_SETUP, PIPE_CONTROLPIPE, + PIPE_TOKEN_SETUP, ENDPOINT_CONTROLEP, PIPE_CONTROLPIPE_DEFAULT_SIZE, PIPE_BANK_SINGLE); if (!(Pipe_IsConfigured())) @@ -165,13 +170,13 @@ static void USB_HostTask(void) USB_HostState = HOST_STATE_Default; break; case HOST_STATE_Default: - USB_HostRequest = (USB_Host_Request_Header_t) + USB_ControlRequest = (USB_Request_Header_t) { - bmRequestType: (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE), - bRequest: REQ_GetDescriptor, - wValue: (DTYPE_Device << 8), - wIndex: 0, - wLength: PIPE_CONTROLPIPE_DEFAULT_SIZE, + .bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE), + .bRequest = REQ_GetDescriptor, + .wValue = (DTYPE_Device << 8), + .wIndex = 0, + .wLength = PIPE_CONTROLPIPE_DEFAULT_SIZE, }; uint8_t DataBuffer[PIPE_CONTROLPIPE_DEFAULT_SIZE]; @@ -198,7 +203,7 @@ static void USB_HostTask(void) Pipe_ResetPipe(PIPE_CONTROLPIPE); Pipe_ConfigurePipe(PIPE_CONTROLPIPE, EP_TYPE_CONTROL, - PIPE_TOKEN_SETUP, PIPE_CONTROLPIPE, + PIPE_TOKEN_SETUP, ENDPOINT_CONTROLEP, USB_ControlPipeSize, PIPE_BANK_SINGLE); if (!(Pipe_IsConfigured())) @@ -210,13 +215,13 @@ static void USB_HostTask(void) Pipe_SetInfiniteINRequests(); - USB_HostRequest = (USB_Host_Request_Header_t) + USB_ControlRequest = (USB_Request_Header_t) { - bmRequestType: (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE), - bRequest: REQ_SetAddress, - wValue: USB_HOST_DEVICEADDRESS, - wIndex: 0, - wLength: 0, + .bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE), + .bRequest = REQ_SetAddress, + .wValue = USB_HOST_DEVICEADDRESS, + .wIndex = 0, + .wLength = 0, }; if ((SubErrorCode = USB_Host_SendControlRequest(NULL)) != HOST_SENDCONTROL_Successful) @@ -249,5 +254,7 @@ static void USB_HostTask(void) USB_ResetInterface(); } + + Pipe_SelectPipe(PrevPipe); } #endif