diff options
author | Dean Camera <dean@fourwalledcubicle.com> | 2012-02-20 18:47:25 +0000 |
---|---|---|
committer | Dean Camera <dean@fourwalledcubicle.com> | 2012-02-20 18:47:25 +0000 |
commit | 4068efbd1898058854f9ca5a967bc5ad5a851759 (patch) | |
tree | 2b69bbeafedf62cae42634354d4c4ea3401f9fdb /LUFA/Drivers/USB/Core | |
parent | 6c738343ae7bab9bd96aa5fc29d5656d966647b5 (diff) | |
download | lufa-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')
-rw-r--r-- | LUFA/Drivers/USB/Core/HostStandardReq.c | 46 | ||||
-rw-r--r-- | LUFA/Drivers/USB/Core/HostStandardReq.h | 1 |
2 files changed, 27 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; diff --git a/LUFA/Drivers/USB/Core/HostStandardReq.h b/LUFA/Drivers/USB/Core/HostStandardReq.h index d4f418743..35c8dd3f2 100644 --- a/LUFA/Drivers/USB/Core/HostStandardReq.h +++ b/LUFA/Drivers/USB/Core/HostStandardReq.h @@ -278,6 +278,7 @@ /* Function Prototypes: */ #if defined(__INCLUDE_FROM_HOSTSTDREQ_C) + static uint8_t USB_Host_SendControlRequest_PRV(void* const BufferPtr); static uint8_t USB_Host_WaitForIOS(const uint8_t WaitType); #endif #endif |