Android应用中怎么将USB装换为串口通信

  

Android应用中怎么将USB装换为串口通信?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

<强>,Android USB转串口通信开发实例详解

<强> 1。发现设备

 UsbManager UsbManager=(UsbManager) context.getSystemService (Context.USB_SERVICE);
  UsbDevice> Map<字符串;usbList=usbManager.getDeviceList (); 

通过UsbManager这个系统提供的类,我们可以枚举出当前连接的所有usb设备,我们主要需要的是UsbDevice对象,关于UsbDevice这个类,官方是这样注释的:

 (usbDevice)) {
  usbPermissionReceiver=new usbPermissionReceiver ();//申请权限
  目的意图=new意图(ACTION_DEVICE_PERMISSION);
  PendingIntent mPermissionIntent=PendingIntent。getBroadcast(上下文,0,意图,0);
  IntentFilter permissionFilter=new IntentFilter (ACTION_DEVICE_PERMISSION);
  上下文。registerReceiver (usbPermissionReceiver permissionFilter);
  usbManager。requestPermission (usbDevice mPermissionIntent);
  }

这里我们声明一个广播UsbPermissionReceiver,当接受到授权成功的广播后做一些其他处理:

私有类UsbPermissionReceiver BroadcastReceiver{延伸
  公共空间> usbInterface=usbDevice.getInterface (0); 

同样的,一个usbInterface有多个UsbEndpoint,有控制端口和数据端口等,因此我们需要根据类型和数据流向来找到我们需要的数据输入和输出两个端口:

 (int指数=0;指数& lt;usbInterface.getEndpointCount ();指数+ +){
  UsbEndpoint点=usbInterface.getEndpoint(指数);
  如果(point.getType ()==UsbConstants.USB_ENDPOINT_XFER_BULK) {
  如果(point.getDirection ()==UsbConstants.USB_DIR_IN) {
  usbEndpointIn=点;
  }else if (point.getDirection ()==UsbConstants.USB_DIR_OUT) {
  usbEndpointOut=点;
  }
  }
  }

最后,才是真正的打开usb设备,我们需要和usb外设建立一个UsbDeviceConnection,它的注释很简介的说明了它的用途:

 usbDeviceConnection=usbManager.openDevice (usbDevice); 

到这里,理论上平板和usb外设之间的连接已经建立了,也可以首发数据了,但是,我们大部分情况下还需要对usb串口进行一些配置,比如波特率,停止位,数据控制等,不然两边配置不同,收到的数据会乱码。具体怎么配置,就看你使用的串口芯片是什么了,目前流行的有pl2303, ch440等,由于篇幅问题,需要具体配置串口代码的朋友私信我我发给你。

<强> 3。数据传输

到这里,我们已经可以与usb外设进行数据传输了,首先来看怎么向usb设备发送数据。


在第二步中,我们已经获取了数据的输出端口usbEndpointIn,我们向外设发送数据就是通过这个端口来实现的。来看怎么用:

 int ret=usbDeviceConnection。bulkTransfer (usbEndpointOut、数据数据。长度,DEFAULT_TIMEOUT); 

bulkTransfer这个函数用于在给定的端口进行数据传输,第一个参数就是此次传输的端口,这里我们用的输出端口,第二个参数是要发送的数据,类型为字节数组,第三个参数代表要发送的数据长度,最后一个参数是超时,返回值代表发送成功的字节数,如果返回1,那就是发送失败了。


同理,我们已经找到了数据输入端口usbEndpointIn,因为数据的输入是不定时的,因此我们可以另开一个线程,来专门接受数据,接受数据的代码如下:

 int inMax=inEndpoint.getMaxPacketSize ();
  ByteBuffer ByteBuffer=ByteBuffer.allocate (inMax);
  UsbRequest UsbRequest=new UsbRequest ();
  usbRequest。初始化(连接,inEndpoint);
  usbRequest。队列(byteBuffer, inMax);
  如果(connection.requestWait ()==usbRequest) {
  byte [] retData=https://www.yisu.com/zixun/byteBuffer.array ();
  (字节byte1: retData) {
  System.err.println (byte1);
  }
  }

Android应用中怎么将USB装换为串口通信