關於如何監聽裝置插拔以及擷取裝置許可權我就不說了,大家可以在網上搜一下有很多這方面的文章,我這裡就說一下如何讀寫資料。
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。