启用DTR/DTE的USB通信

启用DTR/DTE的USB通信

问题描述:

我开发了一个Android应用程序,它连接到外部USB设备以发送和接收消息。启用DTR/DTE的USB通信

我跟着官方Android主机USB API,这里的指导方针(以及其他一些SO帖): https://developer.android.com/guide/topics/connectivity/usb/host.html

一切正常,除了一两件事: 看来,外部USB设备当我的应用程序没有连接时发送数据,导致它的USB缓冲区溢出 - 这会停止设备。

根据设备制造商的解决方案将是启用DTR/DTE(我不得不承认我真的不明白它是什么)。但是,这显然会使他们能够检查我的应用程序是否正在侦听,然后才发送它们的数据。

那么,你能分享一个代码示例如何在Android的USB连接上启用DTR/DTE吗?

更新:

经过一些搜索,似乎我需要使用UsbDeviceConnection.controlTransfer方法 - 但我不知道的参数应该是什么。

+0

你在谈论一个USB转串口适配器,对不对?你如何得到一个更好的,当缓冲区溢出时不会“停止”的?填满缓冲区是USB-to-serial适配器必须准备好的正常情况,如果你的设备无法处理它,那么它是有缺陷的。我怀疑适配器是否正常,你只是遇到了一个软件问题,比如当你的应用程序启动时你可能需要刷新RX缓冲区,这样你最终不会将旧数据读入应用程序。根据您提供的信息级别,很难说出正确的解决方案。 –

+0

感谢大卫,这是我的第一个想法 - USB设备应该处理缓冲区填充问题 - 但是,我仍然在寻找一种方法来解决这个从Android方面 – Daniel

+0

@DavidGrayson:我怎么冲洗RX缓冲区,请你分享一下代码吗? – Daniel

我终于找到了答案:

connection.controlTransfer(0x21, 0x22, 0x1, 0, null, 0, 0); 

我在这里找到:Android USB host read from device