2012-02-16 120 views
0

我有第三方USB设备,插入Windows机器时,被识别为串行设备并分配给COM 4端口。我可以像使用通过串口连接的设备一样与设备进行通信。例如,我可以通过USB连接将“abc”串行写入设备。Android 3.1+ USB作为虚拟COM端口

我一直在寻找一种方式在Android中做类似的事情。如果我尝试Usb主机方法,并使用UsbManager打开UsbDevice,我可以得到一个接口,带有2个端点。我尝试使用UsbDeviceConnection中的方法发送控制消息,但该方法对于所有内容都返回-1(尽管我不知道应该使用该方法的参数)。

有没有办法让我可以写的OutputStream将发送字节到USB设备?现在我正在考虑重新编译内核以包含虚拟COM端口驱动程序,并编写一些本地代码以便能够执行此操作。

谢谢!

编辑:我正在使用FTDI串行至USB转换器电路。这与Android兼容吗?

+0

请你解释一下或者给我一个约你处理如何与设备通信链路。我需要处理一个场景,就像你的场景一样,但我不知道如何通过FTDI串口向USB转换器发送android设备的数据到串口。 – 2015-03-26 19:03:01

回答

1

如果您的设备中的Linux内核支持FTDI,则可以将该设备作为正常的COM端口访问。它将被命名为/dev/ttyUSB0

如果您的内核不支持这种类型的设备,您可以使用UsbHost接口编写自己的驱动程序。检查内核的FTDI驱动程序源代码以获取指导。

+1

谢谢!我已经做了一些进一步的研究,如果你想从Android应用程序中像com端口那样访问它,你需要root权限。一种不同的方式是在你的Android应用程序中写一个“软驱动器”。如果你希望它能够“直接脱离市场”,这可以说是最好的办法。您可以通过Android USB API发出控制传输命令来设置波特率,停止位等,然后使用带有1个字节bulkTransfer()的for循环。我相信这是[this](http://slickdevlabs.com/slick-usb-2-serial-library/)的工作原理。 – ZachM 2012-02-22 11:12:15

0

如果你不介意生根您的手机和写一些C,您可以使用FTDI在这里的Android使用Android驱动程序通信:

http://www.ftdichip.com/Drivers/D2XX.htm

有一个libftd2xx-jni.so那里你可以链接你的C代码 - 我已经测试过它,它的工作原理。

0

在常见情况下,强烈建议不要使用生硬设备,因为我可以为我的设备执行此操作,但是我无法在安卓市场上发布的公共应用程序执行此操作。在这种情况下,我认为controlTransfer()是处理它的唯一方法。