WinUsb_ReadPipe返回False和Timeout

时间:2017-05-05 06:21:22

标签: c# winusb

我必须将应用程序从C ++(一个工作的)转换为C#。但是,在新的C#代码中,我无法使用WinUsb_ReadPipe读取数据,尽管在其他操作中成功,例如WinUsb_GetDescriptor,WinUsb_QueryDeviceInformation,WinUsb_Initialize,WinUsb_WritePipe。

在我设置的WinUsb_SetPipePolicy(读取)中,

  • Raw_IO = true
  • AUTO_CLEAR_STALL = True
  • TRANSFER_TIMEOUT = 1000 // 1s

对于WinUsb_SetPipePolicy(写入),我只设置TRANSFER_TIMEOUT = 1000。

当我执行WinUsb_ReadPipe时,事务FAIL和Last错误是121(ERROR_SEM_TIMEOUT)。

这是我用来读取管道的代码。

        if (!(InTEGRAusbHandle.IsInvalid)) 
        {
            do
            {
                bytesReaded = nBytesToRead;

                try
                {
                    isSuccess = NativeMethods.WinUsb_ReadPipe(
                                              InTEGRAusbHandle,
                                              InTEGRA_BULK_IN.PipeId, //PipeId = 131
                                              bRxBuffer, //bRxBuffer[65536]
                                              nBytesToRead, //64
                                              ref bytesReaded,
                                              IntPtr.Zero);
                }
                catch (Exception ex)
                {
                    isSuccess = false;
                    return false;
                    throw;
                }
                if (!isSuccess)
                {
                    System.Console.WriteLine(Marshal.GetLastWin32Error()); 
                }

                timeoutCounter++;
            } while ((isSuccess == false) && (timeoutCounter <= 1));}

执行代码后,我得到了

  • isSuccess = FALSE
  • bytesReaded = 0

0 个答案:

没有答案