我有一个第三方USB设备,当插入Windows机器时,被识别为串行设备并分配给COM 4端口 . 我可以像使用通过串行端口连接的设备一样与设备通信 . 例如,我可以通过USB连接将“abc”串行写入设备 .
我一直在寻找一种在Android中做类似事情的方法 . 如果我尝试使用Usb Host方法,并使用UsbManager打开UsbDevice,我可以得到一个带有2个 endpoints 的接口 . 我尝试使用UsbDeviceConnection中的方法发送控制消息,但该方法为所有内容返回-1(尽管我不知道该方法的参数应该使用什么) .
有没有办法获得一个可以写入的OutputStream,它会将字节发送到USB设备?现在我正在重新编译内核以包含虚拟COM端口驱动程序并编写一些本机代码以便能够执行此操作 .
谢谢!
编辑:我正在使用FTDI串口转USB转换器电路 . 这与Android兼容吗?
4 回答
如果设备中的linux内核支持FTDI,则可以将此设备作为普通COM端口访问 . 它将被命名为
/dev/ttyUSB0
.如果您的内核不支持此类设备,您可以使用UsbHost接口编写自己的驱动程序 . 检查内核的FTDI驱动程序源代码以获取指南 .
您可以使用第三方驱动程序,
来自SlickDevLabs的这个驱动程序工作得很好,但花费你100美元 .
http://slickdevlabs.com/slick-usb-2-serial-library/
如果你不介意生根你的手机并写一些C,你可以使用Android驱动程序在Android中与FTDI进行通信:
http://www.ftdichip.com/Drivers/D2XX.htm
有一个libftd2xx-jni.so在那里,你可以链接你的C代码 - 我已经测试了它,它的工作原理 .
在常见的情况下,生根设备是强烈推荐的,因为我可以为我的设备执行此操作,但我无法为在Android市场上发布的公共应用程序执行此操作 . 在那种情况下,我认为controlTransfer()是处理它的唯一方法 .