X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/6a10d6b465be27db090d760dc0fbe722c94e4344..09575f9607e12ddf7284f6c8974a332a88d4ed3b:/LUFA/Drivers/USB/LowLevel/HostChapter9.c diff --git a/LUFA/Drivers/USB/LowLevel/HostChapter9.c b/LUFA/Drivers/USB/LowLevel/HostChapter9.c index fe168b724..42e3262ff 100644 --- a/LUFA/Drivers/USB/LowLevel/HostChapter9.c +++ b/LUFA/Drivers/USB/LowLevel/HostChapter9.c @@ -28,49 +28,45 @@ this software. */ -#include "USBMode.h" +#include "../HighLevel/USBMode.h" + #if defined(USB_CAN_BE_HOST) #define INCLUDE_FROM_HOSTCHAPTER9_C #include "HostChapter9.h" -USB_Host_Request_Header_t USB_HostRequest; - uint8_t USB_Host_SendControlRequest(void* BufferPtr) { - uint8_t* HeaderStream = (uint8_t*)&USB_HostRequest; + uint8_t* HeaderStream = (uint8_t*)&USB_ControlRequest; uint8_t* DataStream = (uint8_t*)BufferPtr; bool BusSuspended = USB_Host_IsBusSuspended(); uint8_t ReturnStatus = HOST_SENDCONTROL_Successful; - uint16_t DataLen = USB_HostRequest.wLength; + uint16_t DataLen = USB_ControlRequest.wLength; USB_Host_ResumeBus(); if ((ReturnStatus = USB_Host_WaitMS(1)) != HOST_WAITERROR_Successful) - return ReturnStatus; + goto End_Of_Control_Send; - Pipe_SelectPipe(PIPE_CONTROLPIPE); Pipe_SetToken(PIPE_TOKEN_SETUP); Pipe_ClearErrorFlags(); - Pipe_ClearSetupSent(); Pipe_Unfreeze(); - for (uint8_t HeaderByte = 0; HeaderByte < sizeof(USB_Host_Request_Header_t); HeaderByte++) + for (uint8_t HeaderByte = 0; HeaderByte < sizeof(USB_Request_Header_t); HeaderByte++) Pipe_Write_Byte(*(HeaderStream++)); - Pipe_ClearSetupOUT(); + Pipe_ClearSETUP(); - if ((ReturnStatus = USB_Host_Wait_For_Setup_IOS(USB_HOST_WAITFOR_SetupSent))) + if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_SetupSent)) != HOST_SENDCONTROL_Successful) goto End_Of_Control_Send; - Pipe_ClearSetupSent(); Pipe_Freeze(); if ((ReturnStatus = USB_Host_WaitMS(1)) != HOST_WAITERROR_Successful) goto End_Of_Control_Send; - if ((USB_HostRequest.bmRequestType & CONTROL_REQTYPE_DIRECTION) == REQDIR_DEVICETOHOST) + if ((USB_ControlRequest.bmRequestType & CONTROL_REQTYPE_DIRECTION) == REQDIR_DEVICETOHOST) { Pipe_SetToken(PIPE_TOKEN_IN); @@ -80,7 +76,7 @@ uint8_t USB_Host_SendControlRequest(void* BufferPtr) { Pipe_Unfreeze(); - if ((ReturnStatus = USB_Host_Wait_For_Setup_IOS(USB_HOST_WAITFOR_InReceived))) + if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_InReceived)) != HOST_SENDCONTROL_Successful) goto End_Of_Control_Send; if (!(Pipe_BytesInPipe())) @@ -93,19 +89,19 @@ uint8_t USB_Host_SendControlRequest(void* BufferPtr) } Pipe_Freeze(); - Pipe_ClearSetupIN(); + Pipe_ClearIN(); } } Pipe_SetToken(PIPE_TOKEN_OUT); Pipe_Unfreeze(); - if ((ReturnStatus = USB_Host_Wait_For_Setup_IOS(USB_HOST_WAITFOR_OutReady))) + if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_OutReady)) != HOST_SENDCONTROL_Successful) goto End_Of_Control_Send; - Pipe_ClearSetupOUT(); + Pipe_ClearOUT(); - if ((ReturnStatus = USB_Host_Wait_For_Setup_IOS(USB_HOST_WAITFOR_OutReady))) + if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_OutReady)) != HOST_SENDCONTROL_Successful) goto End_Of_Control_Send; } else @@ -117,7 +113,7 @@ uint8_t USB_Host_SendControlRequest(void* BufferPtr) while (DataLen) { - if ((ReturnStatus = USB_Host_Wait_For_Setup_IOS(USB_HOST_WAITFOR_OutReady))) + if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_OutReady)) != HOST_SENDCONTROL_Successful) goto End_Of_Control_Send; while (DataLen && (Pipe_BytesInPipe() < USB_ControlPipeSize)) @@ -126,10 +122,10 @@ uint8_t USB_Host_SendControlRequest(void* BufferPtr) DataLen--; } - Pipe_ClearSetupOUT(); + Pipe_ClearOUT(); } - if ((ReturnStatus = USB_Host_Wait_For_Setup_IOS(USB_HOST_WAITFOR_OutReady))) + if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_OutReady)) != HOST_SENDCONTROL_Successful) goto End_Of_Control_Send; Pipe_Freeze(); @@ -138,10 +134,10 @@ uint8_t USB_Host_SendControlRequest(void* BufferPtr) Pipe_SetToken(PIPE_TOKEN_IN); Pipe_Unfreeze(); - if ((ReturnStatus = USB_Host_Wait_For_Setup_IOS(USB_HOST_WAITFOR_InReceived))) + if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_InReceived)) != HOST_SENDCONTROL_Successful) goto End_Of_Control_Send; - Pipe_ClearSetupIN(); + Pipe_ClearIN(); } End_Of_Control_Send: @@ -155,13 +151,17 @@ End_Of_Control_Send: return ReturnStatus; } -static uint8_t USB_Host_Wait_For_Setup_IOS(const uint8_t WaitType) +static uint8_t USB_Host_WaitForIOS(const uint8_t WaitType) { + #if (USB_HOST_TIMEOUT_MS < 0xFF) + uint8_t TimeoutCounter = USB_HOST_TIMEOUT_MS; + #else uint16_t TimeoutCounter = USB_HOST_TIMEOUT_MS; + #endif - while (!(((WaitType == USB_HOST_WAITFOR_SetupSent) && Pipe_IsSetupSent()) || - ((WaitType == USB_HOST_WAITFOR_InReceived) && Pipe_IsSetupINReceived()) || - ((WaitType == USB_HOST_WAITFOR_OutReady) && Pipe_IsSetupOUTReady()))) + while (!(((WaitType == USB_HOST_WAITFOR_SetupSent) && Pipe_IsSETUPSent()) || + ((WaitType == USB_HOST_WAITFOR_InReceived) && Pipe_IsINReceived()) || + ((WaitType == USB_HOST_WAITFOR_OutReady) && Pipe_IsOUTReady()))) { uint8_t ErrorCode;