X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/6a10d6b465be27db090d760dc0fbe722c94e4344..1f83abe6f42c302cf3af7e16e5bb02d886a2c82a:/LUFA/Drivers/USB/HighLevel/USBTask.c diff --git a/LUFA/Drivers/USB/HighLevel/USBTask.c b/LUFA/Drivers/USB/HighLevel/USBTask.c index 69670232b..5202cc834 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) { @@ -82,10 +83,13 @@ static void USB_HostTask(void) { uint8_t ErrorCode = HOST_ENUMERROR_NoError; uint8_t SubErrorCode = HOST_ENUMERROR_NoError; + uint8_t PrevPipe = Pipe_GetCurrentPipe(); static uint16_t WaitMSRemaining; static uint8_t PostWaitState; + Pipe_SelectPipe(PIPE_CONTROLPIPE); + switch (USB_HostState) { case HOST_STATE_WaitForDevice: @@ -94,7 +98,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 +156,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,16 +169,16 @@ 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 = 8, }; - uint8_t DataBuffer[PIPE_CONTROLPIPE_DEFAULT_SIZE]; + uint8_t DataBuffer[8]; if ((SubErrorCode = USB_Host_SendControlRequest(DataBuffer)) != HOST_SENDCONTROL_Successful) { @@ -198,7 +202,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 +214,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 +253,7 @@ static void USB_HostTask(void) USB_ResetInterface(); } + + Pipe_SelectPipe(PrevPipe); } #endif