我正在尝试使用Android版本3.1(构建HMJ37)在摩托罗拉Xoom上使用USB主机模式编写Android应用程序,使用新的Android主机USB API通过USB与使用Silicon Labs CP2102虚拟COM的设备进行通信端口接口(USB到串行桥)。我一直在使用Android开发人员网站上的AdbTest应用程序示例作为指南。
我在读取CP2102的UART端发送的字符时遇到了问题。单字节批量传输工作正常,但如果我要求超过1个字节的数据则不行。我知道数据存在,因为我可以使用USBDeviceConnection.controlTransfer()发送GET_COMM_STATUS命令,并看到CP2102上的InQueue缓冲区中有字符。但是,当我通过使用USBRequest.queue()(异步)或SBDeviceConnection.bulkTransfer()(同步)函数从In Endpoint请求多个字节时,返回的缓冲区包含无效字符。
这是有用的:
当我尝试在连胜中发送字符时出现问题。但是,我只是在UART端以9600波特率发送数据,并且没有发送这么多字符,我填满了CP2102上的缓冲区。
我使用Xoom作为设备的电源。我得到了相同的行为 两个不同的XOOM。我正在使用MOTOROLA XOOM的摩托罗拉相机连接套件作为我的USB主机线。
任何人都可以给我指导如何使这项工作?或者XOOM上的Honeycomb 3.1 USB主机API还不是很稳定吗?
答案 0 :(得分:0)
确保检查返回的字节数,这样就不会从缓冲区中消耗比实际返回的数据更多的数据。 还检查是否有多个线程正在访问缓冲区,如果访问缓冲区未正确同步,可能会破坏返回的数据。