this software.\r
*/\r
\r
-#include "USBMode.h"\r
+#include "../HighLevel/USBMode.h"\r
+\r
#if defined(USB_CAN_BE_HOST)\r
\r
#define INCLUDE_FROM_HOSTCHAPTER9_C\r
#include "HostChapter9.h"\r
\r
-USB_Host_Request_Header_t USB_HostRequest;\r
-\r
uint8_t USB_Host_SendControlRequest(void* BufferPtr)\r
{\r
- uint8_t* HeaderStream = (uint8_t*)&USB_HostRequest;\r
+ uint8_t* HeaderStream = (uint8_t*)&USB_ControlRequest;\r
uint8_t* DataStream = (uint8_t*)BufferPtr;\r
bool BusSuspended = USB_Host_IsBusSuspended();\r
uint8_t ReturnStatus = HOST_SENDCONTROL_Successful;\r
- uint16_t DataLen = USB_HostRequest.wLength;\r
+ uint16_t DataLen = USB_ControlRequest.wLength;\r
\r
USB_Host_ResumeBus();\r
\r
if ((ReturnStatus = USB_Host_WaitMS(1)) != HOST_WAITERROR_Successful)\r
- return ReturnStatus;\r
+ goto End_Of_Control_Send;\r
\r
- Pipe_SelectPipe(PIPE_CONTROLPIPE);\r
Pipe_SetToken(PIPE_TOKEN_SETUP);\r
Pipe_ClearErrorFlags();\r
- Pipe_ClearSetupSent();\r
\r
Pipe_Unfreeze();\r
\r
- for (uint8_t HeaderByte = 0; HeaderByte < sizeof(USB_Host_Request_Header_t); HeaderByte++)\r
+ for (uint8_t HeaderByte = 0; HeaderByte < sizeof(USB_Request_Header_t); HeaderByte++)\r
Pipe_Write_Byte(*(HeaderStream++));\r
\r
- Pipe_ClearSetupOUT();\r
+ Pipe_ClearSETUP();\r
\r
- if ((ReturnStatus = USB_Host_Wait_For_Setup_IOS(USB_HOST_WAITFOR_SetupSent)))\r
+ if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_SetupSent)) != HOST_SENDCONTROL_Successful)\r
goto End_Of_Control_Send;\r
\r
- Pipe_ClearSetupSent();\r
Pipe_Freeze();\r
\r
if ((ReturnStatus = USB_Host_WaitMS(1)) != HOST_WAITERROR_Successful)\r
goto End_Of_Control_Send;\r
\r
- if ((USB_HostRequest.bmRequestType & CONTROL_REQTYPE_DIRECTION) == REQDIR_DEVICETOHOST)\r
+ if ((USB_ControlRequest.bmRequestType & CONTROL_REQTYPE_DIRECTION) == REQDIR_DEVICETOHOST)\r
{\r
Pipe_SetToken(PIPE_TOKEN_IN);\r
\r
{\r
Pipe_Unfreeze();\r
\r
- if ((ReturnStatus = USB_Host_Wait_For_Setup_IOS(USB_HOST_WAITFOR_InReceived)))\r
+ if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_InReceived)) != HOST_SENDCONTROL_Successful)\r
goto End_Of_Control_Send;\r
\r
if (!(Pipe_BytesInPipe()))\r
}\r
\r
Pipe_Freeze();\r
- Pipe_ClearSetupIN();\r
+ Pipe_ClearIN();\r
}\r
}\r
\r
Pipe_SetToken(PIPE_TOKEN_OUT);\r
Pipe_Unfreeze();\r
\r
- if ((ReturnStatus = USB_Host_Wait_For_Setup_IOS(USB_HOST_WAITFOR_OutReady)))\r
+ if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_OutReady)) != HOST_SENDCONTROL_Successful)\r
goto End_Of_Control_Send;\r
\r
- Pipe_ClearSetupOUT();\r
+ Pipe_ClearOUT();\r
\r
- if ((ReturnStatus = USB_Host_Wait_For_Setup_IOS(USB_HOST_WAITFOR_OutReady)))\r
+ if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_OutReady)) != HOST_SENDCONTROL_Successful)\r
goto End_Of_Control_Send;\r
}\r
else\r
\r
while (DataLen)\r
{\r
- if ((ReturnStatus = USB_Host_Wait_For_Setup_IOS(USB_HOST_WAITFOR_OutReady)))\r
+ if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_OutReady)) != HOST_SENDCONTROL_Successful)\r
goto End_Of_Control_Send;\r
\r
while (DataLen && (Pipe_BytesInPipe() < USB_ControlPipeSize))\r
DataLen--;\r
}\r
\r
- Pipe_ClearSetupOUT();\r
+ Pipe_ClearOUT();\r
}\r
\r
- if ((ReturnStatus = USB_Host_Wait_For_Setup_IOS(USB_HOST_WAITFOR_OutReady)))\r
+ if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_OutReady)) != HOST_SENDCONTROL_Successful)\r
goto End_Of_Control_Send;\r
\r
Pipe_Freeze();\r
Pipe_SetToken(PIPE_TOKEN_IN);\r
Pipe_Unfreeze();\r
\r
- if ((ReturnStatus = USB_Host_Wait_For_Setup_IOS(USB_HOST_WAITFOR_InReceived)))\r
+ if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_InReceived)) != HOST_SENDCONTROL_Successful)\r
goto End_Of_Control_Send;\r
\r
- Pipe_ClearSetupIN();\r
+ Pipe_ClearIN();\r
}\r
\r
End_Of_Control_Send:\r
return ReturnStatus;\r
}\r
\r
-static uint8_t USB_Host_Wait_For_Setup_IOS(const uint8_t WaitType)\r
+static uint8_t USB_Host_WaitForIOS(const uint8_t WaitType)\r
{\r
+ #if (USB_HOST_TIMEOUT_MS < 0xFF)\r
+ uint8_t TimeoutCounter = USB_HOST_TIMEOUT_MS; \r
+ #else\r
uint16_t TimeoutCounter = USB_HOST_TIMEOUT_MS;\r
+ #endif\r
\r
- while (!(((WaitType == USB_HOST_WAITFOR_SetupSent) && Pipe_IsSetupSent()) ||\r
- ((WaitType == USB_HOST_WAITFOR_InReceived) && Pipe_IsSetupINReceived()) ||\r
- ((WaitType == USB_HOST_WAITFOR_OutReady) && Pipe_IsSetupOUTReady())))\r
+ while (!(((WaitType == USB_HOST_WAITFOR_SetupSent) && Pipe_IsSETUPSent()) ||\r
+ ((WaitType == USB_HOST_WAITFOR_InReceived) && Pipe_IsINReceived()) ||\r
+ ((WaitType == USB_HOST_WAITFOR_OutReady) && Pipe_IsOUTReady())))\r
{\r
uint8_t ErrorCode;\r
\r