环境:android 平板4.1 ,OTG线,串口转usb线,开发板

-------------------------------------------------

任务:使用平板发送指令给开发板,开发板接受后,比如开始打印、

即使用android host 来连接外设。

基础知识:

做usb通信,首先要先弄清楚哪边是HOST那边是SLAVE。

比如你的android手机做host,要获得slave,用UsbDevice表示slave

要是你的android手机做slave,要获得host,用UsbAccessory表示host

以前没有接触过android USB Host编程。来到这个公司后,第一个任务就是写一个android平板的usb host 的demo,和打印机,ic卡等通信。

一、说一下USB HOST的用处:

USB设备分为HOST(主设备)和SLAVE(从设备),只有当一台HOST与一台SLAVE连接时才能实现数据的传输。android支持实现了android外设协议的USB硬件。Android外设和主机模式,在android3.1或者更高的平台上直接支持。但是,对USB主机和外设模式的支持,最终还是要取决于设备的硬件,而不仅仅是看平台的等级。 我上网搜了一下,早期的一些夏新的手机,以及htc的WM手机支持USB HOST功能,而现在的android手机中支持USB HOST的还很非常少,查到的支持USB HOST功能的手机有三星的I9250,HTC手机暂未发现,现在测试使用的HTC T328w不支持USB HOST功能。所以,测试条件不太充分。 另外,USB HOST的主要用处,一般是android手机做HOST主设备,用来控制其他一些元器件,比如,单片机,鼠标,游戏手柄,数码相机,等等。 说到手机的usb host 一般用OTG线连接usb外界设备,但是OTG是什么呢? 今天我才懂,惭愧啊, 这里在简单说明下:OTG即On-The-Go,是近年来发展起来的技术,主要应用是让不同的USB设备和移动设备之间连接,进行数据交换。主要应用是在一些高端手机和平板上,在具有OTG功能的平板或手机上,我们可以连接各种USB设备,例如鼠标、键盘、U盘等,这对于移动办公来说还是有一定作用的。尤其是对U盘、读卡器等设备的读取,在身边没有电脑的情况就可利用移动设备直接使用这些设备。

连接无线键鼠,鼠标移动尚算灵敏,但是部分输入法使用键盘打字会出现严重的延迟,而且暂时还没试出哪个输入法支持USB键盘的中文输入。

连接U盘,这个算比较常见的一个用途,效果不错。

而很少把手机端当做从设备,与电脑端通过USB HOST进行通信的。另外看到一个人说不能通过USB HOST方式与电脑实现通信: 二、通过socket方式进行连接 开始的时候看到一个例子说是通过USB HOST实现的PC与手机端进行连接,我根据查到的资料和自己的理解觉得大概是如下的意思: 1.基于socket编程方式,在android手机端和pc端进行连接传输数据。 2.连接时,需要通过adb forward方式进行端口转发,才能连接的上去。 3.需要用到broadcast来进行,在server端用adb shell 命令开启android端的socket连接服务。 4.主要基于android.hardware.usb包下的UsbManager 类和UsbAccessory类。 5.然后就是一些IO操作,IO处理及关闭优化。 最关键的两点就是: 1)端口转发: Runtime.getRuntime().exec(“adb forwardtcp :12580tcp:10086 ”); 在服务端监听10086端口。 2)在server端java程序中使用adb 命令启动client端的service。 Runtime.getRuntime().exec(“adb shell am broadcast –a NotifyServiceStart”); 后来测试多次发现,这个方式没有用到USB HOST的方式,依然是socket通信,只不过是进行了一下端口转发。 另外,关于socket通信时,写的android程序在模拟器上可以与PC上的server端进行通信,而把程序装到真机上时,就不能实现通信,这个问题的主要原因是PC端和手机上的无线网络不在一个网段,无法进行连接。 三、串口通信,hid访问 在网上查到一些关于USB HOST的开发都是基于基于android端与一些单片机进行串口通信的,串口转usb

USB HID

是Human Interface Device的缩写,由其名称可以了解HID设备是直接与人交互的设备,例如键盘、鼠标与游戏杆等。不过HID设备并不一定要有人机接口,只要符合HID类别规范的设备都是HID设备。 mini usb 以前的手机的usb那样 micro usb 现在手机的usb口那样 总结: 串口通信才是本次完成任务的重点, 既然android的SDK里,在3.0以后,已经有支持usb外设, 所以我此次想法,先试试用java来,即SDK里的API来和usb外设通信。 其实SDK里的API实现也是在jni来ndk编程,网上还有一些c/c++的api,不懂如何。 usb HID模式 ,串口转usb两种,开始我以为要分开这两种情况。 其实,usb相关的设备(无论是直接usb还是串口转usb)都是可以和android host设备通信的。 最近在android平板上开发一个程序,可以通过mini Usb控制外部设备,外部设备接口是串口转USB。平板和外部设备之间通过OTG线连接,设备由平板供电。
系统本意是想通过平板可以向设备发送串口指令。
在串口转usb编写程序,我可以连接到设备,也可以发送数据,不是-1了,但是 数据都是错的,原因后来发现是,在设置波特率的时候,没有效果,为什么没效果呢 因为串口转usb线里有一个芯片, 不同型号的芯片,设置波特率的方式不同,即 mDeviceConnection.controlTransfer(0x40, 0x03, baud, index, null, 0, 0); // set // baudrate 上面的方法的参数值不同。 纠结了好久,参考了国外的大哥写的,才调通了FT的芯片。

在开发串口,还有一些串口的测试工具在附件里。

更多相关文章

  1. USB设备驱动程序学习笔记(一)
  2. android 串口(serial port)没有权限问题
  3. 解决mac下adb devices命令找不到设备
  4. Android串口编程 8.1 Rk3288
  5. 1.活用Android线程间通信的Message机制

随机推荐

  1. Android中使用WebView, WebChromeClient
  2. android的几种网络请求方式详解
  3. Android(安卓)4高级编程(第三版)Android简
  4. Android常用类库介绍
  5. Android--Activity的四种启动模式和onNew
  6. Android使用Application总结
  7. android 如何依赖android:sharedUserId更
  8. android线程学习
  9. android ExpandableListView
  10. 编写自定义的 Android(安卓)Preference