代码之家  ›  专栏  ›  技术社区  ›  logonmanish

虚拟com端口在Android上不工作

  •  0
  • logonmanish  · 技术社区  · 7 年前

    但当我们使用安卓时,它可以同时打开两个端口,但读/写在一个COM端口上工作,而在第二个虚拟COM端口上不工作。

    我正在使用 https://github.com/felHR85/UsbSerial 此代码用于探测虚拟COM端口。 我可以看到,在调试时,检测到了这两个接口,并成功声明了这两个接口的输入和输出端点。但写操作只在第一个接口上成功,在第二个接口上失败。 对于第二个接口,我找到了连接。bulkTransfer(UsbDeviceConnection.bulkTransfer)失败,返回-1,无法找出为什么相同的代码/配置适用于第一个虚拟COM端口,但不适用于第二个虚拟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]

    USB接口[mId=3,mClass=10,MSUBLASS=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)

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

    1 回复  |  直到 7 年前
        1
  •  0
  •   logonmanish    7 年前

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

    在文件中 https://github.com/felHR85/UsbSerial/blob/master/usbserial/src/main/java/com/felhr/usbserial/CDCSerialDevice.java

    在方法中 setControlCommand和getLineCoding,调用连接。controlTransfer将第四个变量(int index)硬编码为0,应根据为数据传输选择的接口进行更改

    int响应=连接。controlTransfer(CDC\u REQTYPE\u HOST2DEVICE,request,value,0,data,dataLength,USB\u TIMEOUT);

    int请求, int值, int索引, 字节[]缓冲区, int超时)

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

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

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

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

    现在两个接口都在工作。