android usb host 讀寫USB設備

關於如何監聽設備插拔以及獲取設備權限我就不說瞭,大傢可以在網上搜一下有很多這方面的文章,我這裡就說一下如何讀寫數據。

 

          UsbInterface usbInterface = usbDevice.getInterface(0); 
//USBEndpoint為讀寫數據所需的節點  
UsbEndpoint inEndpoint = usbInterface.getEndpoint(0);  //讀數據節點  
UsbEndpoint outEndpoint = usbInterface.getEndpoint(1); //寫數據節點  
UsbDeviceConnection connection = usbManager.openDevice(usbDevice); 
connection.claimInterface(usbInterface, 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);
    }
}*/ 

                        UsbInterface usbInterface = usbDevice.getInterface(0);
   //USBEndpoint為讀寫數據所需的節點
   UsbEndpoint inEndpoint = usbInterface.getEndpoint(0);  //讀數據節點
   UsbEndpoint outEndpoint = usbInterface.getEndpoint(1); //寫數據節點
   UsbDeviceConnection connection = usbManager.openDevice(usbDevice);
   connection.claimInterface(usbInterface, 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。

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *