Android bulkTransfer在读取数据时返回-1,但是缓冲区中确实存在一些数据

我在galaxy tab p7300上编写一个应用程序,通过otg电缆与一个密钥(scsi设备)进行通信。 我可以用bulkTransfer()首次读取数据,但不能在下一次。 然后,我使用Ellisys Visual USB来嗅探数据,我发现这个密钥真的返回了13个字节的数据。 但在Android客户端(GT-P7300),我收到-1 bulkTransfer返回。 我已经用完了我的想法。 感谢任何能给我一点线索的人。

  • USB_DEVICE_ATTACHED意图不发射
  • 通过USB连接两个Android设备
  • Android USB OTG:以编程方式closures端口的电源
  • 使用`com.android.future.usb.accessory`库时,应用程序不会启动
  • Nexus 10 - 在Windows 7或Linux上对adb不可见
  • Android上USB麦克风的AudioSource值
  • Android的USB主机通信
  • Prestigio Multipad PMP3370B USB驱动程序
  • 当使用USB批量传输时,这里列出了事务处理失败时要检查的事项

    a)validation已经通过bulkTransfer函数的端点方向

    b)确保缓冲区有足够的长度来存储传入的数据

    c) 长度字段也许是最重要的。 如果您知道响应的确切大小,请使用它。

    d) 超时参数 。 如果向设备发送查询,并且在收听响应时没有提供足够的超时,则bulkTransfer可以返回-1。

    它看起来像超时正在影响你的情况下的行为。 我的build议是使用每个响应的长度字段中的确切字节数,并使用更长的超时时间(如1000),因此您需要足够的时间来完成批量请求。

    发布解决scheme为时已晚,但如果将来有人需要帮助,可以从这里得到答案。

    我面临同样的问题。 我正在使用Android(三星Galaxy S3)作为USB主机设备。 我想到了使用USB BulkTransfer读取端点和写入端点不传输数据。 我试图切换terminal的主机模式的情况下,它识别并成功地写/读数据。

      mReadEndpoint = mDataInterface.getEndpoint(0);// tweaking endpoints // 1 was for read and 0 was for write mWriteEndpoint = mDataInterface.getEndpoint(1); 

    PS有一个名为“USB设备信息”的Android应用程序。 它帮助我了解了我的USB设备的接口和端点。