当前位置:操作系统 > 安卓/Android >>

android usb host 读写USB设备

关于如何监听设备插拔以及获取设备权限我就不说了,大家可以在网上搜一下有很多这方面的文章,我这里就说一下如何读写数据。


 

          UsbInte易做图ce usbInte易做图ce = usbDevice.getInte易做图ce(0); 
//USBEndpoint为读写数据所需的节点  
UsbEndpoint inEndpoint = usbInte易做图ce.getEndpoint(0);  //读数据节点  
UsbEndpoint outEndpoint = usbInte易做图ce.getEndpoint(1); //写数据节点  
UsbDeviceConnection connection = usbManager.openDevice(usbDevice); 
connection.claimInte易做图ce(usbInte易做图ce, true); 
 
//发送数据  
byte[] byte2 = new byte[64]; 
int out = connection.bulkTransfer(outEndpoint, cmd, cmd.length, 3000); 
 
//读取数据1   两种方法读取数据  
int ret = connection.bulkTransfer(inEndpoint, byte2, byte2.length, 3000); 
Log.e("ret", "ret:"+ret); 
for(Byte byte1 : byte2){ 
    System.err.println(byte1); 
} 
 
//读取数据2  
/*int outMax = outEndpoint.getMaxPacketSize();
int inMax = inEndpoint.getMaxPacketSize();
ByteBuffer byteBuffer = ByteBuffer.allocate(inMax);
UsbRequest usbRequest = new UsbRequest();
usbRequest.initialize(connection, inEndpoint);
usbRequest.queue(byteBuffer, inMax);
if(connection.requestWait() == usbRequest){
    byte[] retData = byteBuffer.array();
    for(Byte byte1 : retData){
        System.err.println(byte1);
    }
}*/ 

                        UsbInte易做图ce usbInte易做图ce = usbDevice.getInte易做图ce(0);
   //USBEndpoint为读写数据所需的节点
   UsbEndpoint inEndpoint = usbInte易做图ce.getEndpoint(0);  //读数据节点
   UsbEndpoint outEndpoint = usbInte易做图ce.getEndpoint(1); //写数据节点
   UsbDeviceConnection connection = usbManager.openDevice(usbDevice);
   connection.claimInte易做图ce(usbInte易做图ce, true);
   
   //发送数据
   byte[] byte2 = new byte[64];
   int out = connection.bulkTransfer(outEndpoint, cmd, cmd.length, 3000);
   
   //读取数据1   两种方法读取数据
   int ret = connection.bulkTransfer(inEndpoint, byte2, byte2.length, 3000);
   Log.e("ret", "ret:"+ret);
   for(Byte byte1 : byte2){
    System.err.println(byte1);
   }
   
   //读取数据2
   /*int outMax = outEndpoint.getMaxPacketSize();
   int inMax = inEndpoint.getMaxPacketSize();
   ByteBuffer byteBuffer = ByteBuffer.allocate(inMax);
   UsbRequest usbRequest = new UsbRequest();
   usbRequest.initialize(connection, inEndpoint);
   usbRequest.queue(byteBuffer, inMax);
   if(connection.requestWait() == usbRequest){
    byte[] retData = byteBuffer.array();
    for(Byte byte1 : retData){
     System.err.println(byte1);
    }
   }*/

首先得到可以操作USB设备的节点Endpoint,0为读数据节点,1未写数据节点。
然后使用connection.bulkTransfer(endpoint, buffer, length, timeout) 发送数据。

我这里读数据的时候有两种方法,读数据1和读数据2

注意:写数据时传入的是写数据节点OutEndpoint,读数据时传入的是读数据节点InEndpoint。

 

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,