【发布时间】:2018-03-29 12:44:36
【问题描述】:
我开发了一个 Android 应用程序,它连接到外部 USB 设备以发送和接收消息。
我在这里遵循了官方 Android Host USB API 的指南(以及其他一些 SO 帖子): https://developer.android.com/guide/topics/connectivity/usb/host.html
一切正常,除了一件事: 当我的应用程序未连接时,外部 USB 设备似乎正在发送数据,这导致它的 USB 缓冲区溢出 - 这会停止设备。
根据设备制造商的说法,解决方案是启用 DTR/DTE(我不得不承认我并不真正了解它是什么)。但这显然可以让他们检查我的应用是否正在监听,然后才发送他们的数据。
那么,您能否分享一个如何在 Android USB 连接上启用 DTR/DTE 的代码示例?
更新:
经过更多搜索,我似乎需要使用 UsbDeviceConnection.controlTransfer 方法 - 但我不知道参数应该是什么。
【问题讨论】:
-
您说的是 USB 转串口适配器,对吧?您如何获得一个更好的缓冲区溢出时不会“停止”的缓冲区?缓冲区填满是 USB 转串口适配器必须准备的正常情况,如果您的设备无法处理它,那么它就有缺陷。我怀疑适配器没问题,而您只是遇到了软件问题,例如您可能需要在应用程序启动时刷新 RX 缓冲区,这样您就不会最终将旧数据读入应用程序。根据您提供的信息水平,很难说出正确的解决方案是什么。
-
谢谢大卫,这也是我的第一个想法 - USB 设备应该处理缓冲区填充问题 - 但是,我仍然希望找到一种从 Android 端解决这个问题的方法
-
@DavidGrayson:如何刷新 RX 缓冲区,能否分享代码?