aboutsummaryrefslogtreecommitdiffstats
path: root/LUFA/Drivers/USB/Core/HostStandardReq.c
diff options
context:
space:
mode:
authorDean Camera <dean@fourwalledcubicle.com>2012-02-20 18:47:25 +0000
committerDean Camera <dean@fourwalledcubicle.com>2012-02-20 18:47:25 +0000
commit4068efbd1898058854f9ca5a967bc5ad5a851759 (patch)
tree2b69bbeafedf62cae42634354d4c4ea3401f9fdb /LUFA/Drivers/USB/Core/HostStandardReq.c
parent6c738343ae7bab9bd96aa5fc29d5656d966647b5 (diff)
downloadlufa-4068efbd1898058854f9ca5a967bc5ad5a851759.tar.gz
lufa-4068efbd1898058854f9ca5a967bc5ad5a851759.tar.bz2
lufa-4068efbd1898058854f9ca5a967bc5ad5a851759.zip
Remove potentially unaligned uint32_t access in HIDParser.c, replace with standard C bit shifts.
Diffstat (limited to 'LUFA/Drivers/USB/Core/HostStandardReq.c')
-rw-r--r--LUFA/Drivers/USB/Core/HostStandardReq.c46
1 files changed, 26 insertions, 20 deletions
diff --git a/LUFA/Drivers/USB/Core/HostStandardReq.c b/LUFA/Drivers/USB/Core/HostStandardReq.c
index 649ad5e8f..ccade464b 100644
--- a/LUFA/Drivers/USB/Core/HostStandardReq.c
+++ b/LUFA/Drivers/USB/Core/HostStandardReq.c
@@ -38,17 +38,16 @@
uint8_t USB_Host_ConfigurationNumber;
-uint8_t USB_Host_SendControlRequest(void* const BufferPtr)
+static uint8_t USB_Host_SendControlRequest_PRV(void* const BufferPtr)
{
uint8_t* DataStream = (uint8_t*)BufferPtr;
- bool BusSuspended = USB_Host_IsBusSuspended();
uint8_t ReturnStatus = HOST_SENDCONTROL_Successful;
uint16_t DataLen = USB_ControlRequest.wLength;
USB_Host_ResumeBus();
if ((ReturnStatus = USB_Host_WaitMS(1)) != HOST_WAITERROR_Successful)
- goto End_Of_Control_Send;
+ return ReturnStatus;
Pipe_SetPipeToken(PIPE_TOKEN_SETUP);
Pipe_ClearError();
@@ -71,12 +70,12 @@ uint8_t USB_Host_SendControlRequest(void* const BufferPtr)
Pipe_ClearSETUP();
if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_SetupSent)) != HOST_SENDCONTROL_Successful)
- goto End_Of_Control_Send;
+ return ReturnStatus;
Pipe_Freeze();
if ((ReturnStatus = USB_Host_WaitMS(1)) != HOST_WAITERROR_Successful)
- goto End_Of_Control_Send;
+ return ReturnStatus;
if ((USB_ControlRequest.bmRequestType & CONTROL_REQTYPE_DIRECTION) == REQDIR_DEVICETOHOST)
{
@@ -89,7 +88,7 @@ uint8_t USB_Host_SendControlRequest(void* const BufferPtr)
Pipe_Unfreeze();
if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_InReceived)) != HOST_SENDCONTROL_Successful)
- goto End_Of_Control_Send;
+ return ReturnStatus;
if (!(Pipe_BytesInPipe()))
DataLen = 0;
@@ -109,12 +108,12 @@ uint8_t USB_Host_SendControlRequest(void* const BufferPtr)
Pipe_Unfreeze();
if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_OutReady)) != HOST_SENDCONTROL_Successful)
- goto End_Of_Control_Send;
+ return ReturnStatus;
Pipe_ClearOUT();
if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_OutReady)) != HOST_SENDCONTROL_Successful)
- goto End_Of_Control_Send;
+ return ReturnStatus;
}
else
{
@@ -126,7 +125,7 @@ uint8_t USB_Host_SendControlRequest(void* const BufferPtr)
while (DataLen)
{
if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_OutReady)) != HOST_SENDCONTROL_Successful)
- goto End_Of_Control_Send;
+ return ReturnStatus;
while (DataLen && (Pipe_BytesInPipe() < USB_Host_ControlPipeSize))
{
@@ -138,7 +137,7 @@ uint8_t USB_Host_SendControlRequest(void* const BufferPtr)
}
if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_OutReady)) != HOST_SENDCONTROL_Successful)
- goto End_Of_Control_Send;
+ return ReturnStatus;
Pipe_Freeze();
}
@@ -147,19 +146,11 @@ uint8_t USB_Host_SendControlRequest(void* const BufferPtr)
Pipe_Unfreeze();
if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_InReceived)) != HOST_SENDCONTROL_Successful)
- goto End_Of_Control_Send;
+ return ReturnStatus;
Pipe_ClearIN();
}
-
-End_Of_Control_Send:
- Pipe_Freeze();
-
- if (BusSuspended)
- USB_Host_SuspendBus();
-
- Pipe_ResetPipe(PIPE_CONTROLPIPE);
-
+
return ReturnStatus;
}
@@ -187,6 +178,21 @@ static uint8_t USB_Host_WaitForIOS(const uint8_t WaitType)
return HOST_SENDCONTROL_Successful;
}
+uint8_t USB_Host_SendControlRequest(void* const BufferPtr)
+{
+ bool BusSuspended = USB_Host_IsBusSuspended();
+ uint8_t ReturnStatus = USB_Host_SendControlRequest_PRV(BufferPtr);
+
+ Pipe_Freeze();
+
+ if (BusSuspended)
+ USB_Host_SuspendBus();
+
+ Pipe_ResetPipe(PIPE_CONTROLPIPE);
+
+ return ReturnStatus;
+}
+
uint8_t USB_Host_SetDeviceConfiguration(const uint8_t ConfigNumber)
{
uint8_t ErrorCode;