【问题标题】:virtual com port not working on Android虚拟 com 端口无法在 Android 上运行
【发布时间】:2018-01-20 23:00:20
【问题描述】:

我们有一个嵌入式硬件,它有两个通过 USB 实现的虚拟 COM 端口。在 Windows 操作系统上,我们能够正确检测和读取/写入这些虚拟 COM 端口。我们使用超级终端对其进行了测试。 但是当我们使用Android时,它能够打开两个端口,但读/写工作在一个COM端口上。它不适用于第二个虚拟 COM 端口。

我正在使用https://github.com/felHR85/UsbSerial 这个代码来探测虚拟 COM 端口。 它是一个 CDCSerial 设备。 我可以看到,在调试两个接口时,检测到了两个接口,并且两个接口都成功声明了 IN 和 OUT 端点。但写入仅在第一个接口上成功,在第二个接口上失败。 对于第二个接口,我发现 connection.bulkTransfer (UsbDeviceConnection.bulkTransfer) 失败,它返回 -1 并且无法找出为什么相同的代码/配置适用于第一个虚拟 COM 端口但不适用于第二个

[下面的界面正在运行] UsbInterface[mId=1,mClass=10,mSubclass=0,mProtocol=0,mEndpoints=[Landroid.os.Parcelable;@41a7b9e0] [这个工作] UsbEndpoint[mAddress=129,mAttributes=2,mMaxPacketSize=64,mInterval=0] UsbEndpoint[mAddress=2,mAttributes=2,mMaxPacketSize=64,mInterval=0]

[下面的界面不工作] UsbInterface[mId=3,mClass=10,mSubclass=0,mProtocol=0,mEndpoints=[Landroid.os.Parcelable;@41a7bd10]
UsbEndpoint[mAddress=132,mAttributes=2,mMaxPacketSize=64,mInterval=0] UsbEndpoint[mAddress=5,mAttributes=2,mMaxPacketSize=64,mInterval=0]

VID=1003 (0x3EB) PID=9253 (0x2425)

有没有人尝试过在 Android 上使用多个虚拟 COM 端口?任何调试提示都会有很大帮助。

【问题讨论】:

    标签: android usb virtual


    【解决方案1】:

    我们发现了问题,其中一位同事帮助调试了问题。 UsbDeviceConnection.controltransfer 调用中的变量是硬编码的。

    问题位置: 在文件https://github.com/felHR85/UsbSerial/blob/master/usbserial/src/main/java/com/felhr/usbserial/CDCSerialDevice.java

    在方法中 setControlCommand 和 getLineCoding,对 connection.controlTransfer 的调用将第 4 个变量(int 索引)硬编码为 0,该变量应根据为数据传输选择的接口而变化

    int response = connection.controlTransfer(CDC_REQTYPE_HOST2DEVICE, request, value,0, data, dataLength, USB_TIMEOUT);

    int controlTransfer (int requestType, 整数请求, 整数值, 整数索引, 字节[] 缓冲区, 整数长度, int 超时)

    接口 ID 1 的数据传输变量索引应为 0,接口 ID 3 的数据传输变量索引应为 2

    接口 0 = 批量接口 1 的 CDC Assoc 接口

    接口 1 = CDC 实际批量接口(PC 上的 COM PORT 1)

    批量接口 3 的接口 2 CDC Assoc 接口

    接口 3 = CDC 实际批量接口(PC 上的 COM PORT 2)

    现在两个接口都可以工作了。

    【讨论】:

      猜你喜欢
      • 2013-02-21
      • 1970-01-01
      • 2011-11-27
      • 2021-01-28
      • 2011-09-05
      • 1970-01-01
      • 2015-08-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多