Discussion:
Communication to Cypress USB Driver is interrupted when user remove a thumbdrive in Windows 7
(too old to reply)
Marlon
2011-02-23 03:22:16 UTC
Permalink
Hi,

Is anybody else experiencing this problem? It only happens in Windows
7. I tried it in Windows XP and could not reproduce there. Basically
I have a C++ app that recieves streaming data from our firmware. In a
separate thread I have a loop that calls BeginDataXfer() (Cypress USB
API Call) and when the event is signaled it calls FinishDataXfer()
(Cypress USB API Call). Everything is working fine until a user
inserts a thumbdrive to do other stuff and when he pulled it out I get
this error from FinishDataXfer(). This happens 50% of the time, so I
think it's a timing issue but I don't know how to work around it.

Here's my environment:

MS Visual Studio 2010

32-bit Windows 7 Professional,

Cypress driver 3.4.2.0,

The chip we are using is the Cypress Chip CY7C68001-56PVC.

The application is as a high speed USB interface to the DSP processor.

Here's a code snippet within the thread:

case WAIT_OBJECT_0+2: //overlapped read operation done

{
if(pInContext!=NULL && BulkInEpt!=NULL)
{
nLength=nBufferSize;

::ResetEvent(t_osRead.hEvent);
if(BulkInEpt->FinishDataXfer(szReceiveBuffer, nLength,
&t_osRead,pInContext))
{
szReceiveBuffer[nLength]=0;
pThis->UpdateTotalXFerBytes(nLength);
pThis->ApppendToReplyProcessQueue(szReceiveBuffer,
nLength);

//Start an async. read again
nLength=nBufferSize;

pInContext=BulkInEpt-
BeginDataXfer(szReceiveBuffer,nLength,&t_osRead);
// be nice and make sure giving time to
ReplyProcessThread

Sleep(0);
}
else
{
DWORD dwLastError=::GetLastError();
MessageBox.Show( "Reply-receive failed,
reconnecting...error code"+dwLastError);

}
}
}

break;
BTW, the GetLastError() always returns ERROR_IO_PENDING even before
the user removes a thumbdrive which another interesting phenomena.
Any insight would be appreciated.

Thank you.
Marlon
2011-02-24 23:39:18 UTC
Permalink
Hi,
Is anybody else experiencing this problem?  It only happens in Windows
7.  I tried it in Windows XP and could not reproduce there.  Basically
I have a C++ app that recieves streaming data from our firmware.  In a
separate thread I have a loop that calls BeginDataXfer() (Cypress USB
API Call) and when the event is signaled it calls FinishDataXfer()
(Cypress USB API Call).  Everything is working fine until a user
inserts a thumbdrive to do other stuff and when he pulled it out I get
this error from FinishDataXfer().  This happens 50% of the time, so I
think it's a timing issue but I don't know how to work around it.
MS Visual Studio 2010
32-bit Windows 7 Professional,
Cypress driver 3.4.2.0,
The chip we are using is the Cypress Chip CY7C68001-56PVC.
The application is as a high speed USB interface to the DSP processor.
case WAIT_OBJECT_0+2: //overlapped read operation done
{
   if(pInContext!=NULL && BulkInEpt!=NULL)
   {
       nLength=nBufferSize;
        ::ResetEvent(t_osRead.hEvent);
        if(BulkInEpt->FinishDataXfer(szReceiveBuffer, nLength,
&t_osRead,pInContext))
         {
                szReceiveBuffer[nLength]=0;
                pThis->UpdateTotalXFerBytes(nLength);
                pThis->ApppendToReplyProcessQueue(szReceiveBuffer,
nLength);
               //Start an async. read again
                 nLength=nBufferSize;
                 pInContext=BulkInEpt-
BeginDataXfer(szReceiveBuffer,nLength,&t_osRead);
                 // be nice and make sure giving time to
ReplyProcessThread
Sleep(0);
          }
         else
          {
                  DWORD dwLastError=::GetLastError();
                  MessageBox.Show( "Reply-receive failed,
reconnecting...error code"+dwLastError);
           }
       }
 }
break;
BTW, the GetLastError() always returns  ERROR_IO_PENDING even before
the user removes a thumbdrive which another interesting phenomena.
Any insight would be appreciated.
Thank you.
The workaround in this Knowledge Base article worked after rebooting
the pc. But I have to use the "Safely Remove Hardware and Media" from
the system tray for it to work properly. If I just remove the USB
thumbdrive I still get the disconnection error.

http://support.microsoft.com/kb/2401954

Loading...