aboutsummaryrefslogtreecommitdiffstats
path: root/LUFA/Drivers/USB/Class/Host
diff options
context:
space:
mode:
Diffstat (limited to 'LUFA/Drivers/USB/Class/Host')
-rw-r--r--LUFA/Drivers/USB/Class/Host/MassStorage.c12
-rw-r--r--LUFA/Drivers/USB/Class/Host/StillImage.c18
2 files changed, 16 insertions, 14 deletions
diff --git a/LUFA/Drivers/USB/Class/Host/MassStorage.c b/LUFA/Drivers/USB/Class/Host/MassStorage.c
index 14b7741db..dfa954c5c 100644
--- a/LUFA/Drivers/USB/Class/Host/MassStorage.c
+++ b/LUFA/Drivers/USB/Class/Host/MassStorage.c
@@ -166,19 +166,21 @@ static uint8_t MS_Host_SendCommand(USB_ClassInfo_MS_Host_t* const MSInterfaceInf
static uint8_t MS_Host_WaitForDataReceived(USB_ClassInfo_MS_Host_t* const MSInterfaceInfo)
{
- uint16_t TimeoutMSRem = COMMAND_DATA_TIMEOUT_MS;
+ uint16_t TimeoutMSRem = COMMAND_DATA_TIMEOUT_MS;
+ uint16_t PreviousFrameNumber = USB_Host_GetFrameNumber();
Pipe_SelectPipe(MSInterfaceInfo->Config.DataINPipeNumber);
Pipe_Unfreeze();
while (!(Pipe_IsINReceived()))
{
- if (USB_INT_HasOccurred(USB_INT_HSOFI))
+ uint16_t CurrentFrameNumber = USB_Host_GetFrameNumber();
+
+ if (CurrentFrameNumber != PreviousFrameNumber)
{
- USB_INT_Clear(USB_INT_HSOFI);
- TimeoutMSRem--;
+ PreviousFrameNumber = CurrentFrameNumber;
- if (!(TimeoutMSRem))
+ if (!(TimeoutMSRem--))
return PIPE_RWSTREAM_Timeout;
}
diff --git a/LUFA/Drivers/USB/Class/Host/StillImage.c b/LUFA/Drivers/USB/Class/Host/StillImage.c
index 42c3feca6..e08fc76af 100644
--- a/LUFA/Drivers/USB/Class/Host/StillImage.c
+++ b/LUFA/Drivers/USB/Class/Host/StillImage.c
@@ -179,7 +179,8 @@ uint8_t SImage_Host_SendBlockHeader(USB_ClassInfo_SI_Host_t* const SIInterfaceIn
uint8_t SImage_Host_ReceiveBlockHeader(USB_ClassInfo_SI_Host_t* const SIInterfaceInfo,
SI_PIMA_Container_t* const PIMAHeader)
{
- uint16_t TimeoutMSRem = COMMAND_DATA_TIMEOUT_MS;
+ uint16_t TimeoutMSRem = COMMAND_DATA_TIMEOUT_MS;
+ uint16_t PreviousFrameNumber = USB_Host_GetFrameNumber();
if ((USB_HostState != HOST_STATE_Configured) || !(SIInterfaceInfo->State.IsActive))
return PIPE_RWSTREAM_DeviceDisconnected;
@@ -187,17 +188,16 @@ uint8_t SImage_Host_ReceiveBlockHeader(USB_ClassInfo_SI_Host_t* const SIInterfac
Pipe_SelectPipe(SIInterfaceInfo->Config.DataINPipeNumber);
Pipe_Unfreeze();
- while (!(Pipe_IsReadWriteAllowed()))
+ while (!(Pipe_IsINReceived()))
{
- if (USB_INT_HasOccurred(USB_INT_HSOFI))
+ uint16_t CurrentFrameNumber = USB_Host_GetFrameNumber();
+
+ if (CurrentFrameNumber != PreviousFrameNumber)
{
- USB_INT_Clear(USB_INT_HSOFI);
- TimeoutMSRem--;
+ PreviousFrameNumber = CurrentFrameNumber;
- if (!(TimeoutMSRem))
- {
- return PIPE_RWSTREAM_Timeout;
- }
+ if (!(TimeoutMSRem--))
+ return PIPE_RWSTREAM_Timeout;
}
Pipe_Freeze();