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 ,