用于Android设备的USB接口
图2: Android平板使用USB控制玩具赛车
代码创建
控制玩具车的用户接口相当的简化。在平板电脑的触摸屏上出现两个按钮,一个用于将车子向前移动,另一个用于向后移动。通过相应旋转平板电脑实现左右移动车子。无限控制信号可以被拆成字节串行传输。比如,字节"0X01"用于右转,"0X08"是向前。同样,两个值的组合"0X09"使车子右转且向前。
不需要为此应用编译一个专用的Android核,也不需要绕过厂商默认的登陆权限来登陆平板电脑。他们所需要的只是安装Android应用程序[http://www.nexus-computing.ch/files/Racer.apk],然后通过USB 接口插入Vinco板。Android平板和Vinculum II之间的连接,是使用新发布的Android USB 主控API来维护的。Android上的JAVA软件与使用USB 批量和控制传输的微处理器交互,因此是一个"软的"USB转串行驱动器。微控制器的固件被设为通过USB转串行驱动与平板电脑接口,它接收单个字节,将相应的无线摇控管脚拉低,最终控制玩具车。
下面几行的Java代码用于初始化串行通信:
UsbDeviceConnection conn = usbm.openDevice(dev);
conn.controlTransfer(0x40, 0, 0, 0, null, 0, 0);// reset
conn.controlTransfer(0x40, 0, 1, 0, null, 0, 0);// clear Rx
conn.controlTransfer(0x40, 0, 2, 0, null, 0, 0);// clear Tx
conn.controlTransfer(0x40, 0x03, 0x4138, 0, null, 0, 0);// set baudrate 9600
这些代码与libftdi函数非常类似:
int ftdi_usb_reset(struct ftdi_context *ftdi)
int ftdi_usb_purge_rx_buffer(struct ftdi_context *ftdi)
int ftdi_usb_purge_tx_buffer(struct ftdi_context *ftdi)
int ftdi_set_baudrate(struct ftdi_context *ftdi, int baudrate)
一旦连接被初始化,将通过Android操作系统的USB API作类似的进一步的批量传输。
结论
本文讨论的应用范例说明,尽管存在一定的困难,还是能够通过USB接口实现基于Android的控制功能。运用Android主控API结合合适的硬件和相关固件开发,只需要对Android操作系统和差异之处有极少的了解,就可以创建出设想的应用。
评论