【问题标题】:USB Communication with DTR/DTE enabled启用 DTR/DTE 的 USB 通信
【发布时间】: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 缓冲区,能否分享代码?

标签: android usb host


【解决方案1】:

我终于找到了答案:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-30
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 2012-12-19
    相关资源
    最近更新 更多