Передача данных USB

Я пытаюсь отправить и получить данные через USB, мое устройство, Acer Iconia A500 имеет все необходимое для подключения к устройству и всему, что хорошо и работает правильно, но когда я пытаюсь отправить и получить данные, он не ведет себя как ожидается. Это мой код

for( ; ; ) { //this is the main loop for transferring String get = "$getPos"; byte[] getBytes = get.getBytes(); conn.bulkTransfer( epOUT, getBytes, getBytes.length, 500 ); try { Thread.sleep( 500 ); byte[] buffer = new byte[4096]; conn.bulkTransfer( epIN, buffer, 4096, 500 ); StringBuilder byStr = new StringBuilder(); for( int i = 0; i < buffer.length; i++ ) { if( buffer[i] != 0 ) { byStr.append( buffer[i] + ", " ); } } l( byStr ); } catch( InterruptedException e ) { e.printStackTrace(); } if( mStop ) { mStopped = true; return; } l( "sent " + counter ); counter++; counter = (byte)( counter % 16 ); } 

Его предназначено для возврата массива байтов длиной около 80 символов, но он возвращает только два байта назад, которые равны 1 и 96, если на USB-устройствах была ошибка, он все равно вернет еще несколько, а затем два. Является ли мой код даже близким к правильному? Я основывал его на серийной статье USB на сервере.

Solutions Collecting From Web of "Передача данных USB"

Я пытался отправить данные по неверной скорости передачи.

Вот код, который работает. Проводка его для всех, кто использует устройства FTDI и нуждается в помощи.

 private Runnable mLoop = new Runnable() { @Override public void run() { UsbDevice dev = sDevice; if (dev == null) return; UsbManager usbm = (UsbManager) getSystemService(USB_SERVICE); UsbDeviceConnection conn = usbm.openDevice(dev); l("Interface Count: " + dev.getInterfaceCount()); l("Using " + String.format("%04X:%04X", sDevice.getVendorId(), sDevice.getProductId())); if (!conn.claimInterface(dev.getInterface(0), true)) return; conn.controlTransfer(0x40, 0, 0, 0, null, 0, 0);// reset // mConnection.controlTransfer(0×40, // 0, 1, 0, null, 0, // 0);//clear Rx conn.controlTransfer(0x40, 0, 2, 0, null, 0, 0);// clear Tx conn.controlTransfer(0x40, 0x02, 0x0000, 0, null, 0, 0);// flow // control // none conn.controlTransfer(0x40, 0x03, 0x0034, 0, null, 0, 0);// baudrate // 57600 conn.controlTransfer(0x40, 0x04, 0x0008, 0, null, 0, 0);// data bit // 8, parity // none, // stop bit // 1, tx off UsbEndpoint epIN = null; UsbEndpoint epOUT = null; byte counter = 0; UsbInterface usbIf = dev.getInterface(0); for (int i = 0; i < usbIf.getEndpointCount(); i++) { l("EP: " + String.format("0x%02X", usbIf.getEndpoint(i) .getAddress())); if (usbIf.getEndpoint(i).getType() == UsbConstants.USB_ENDPOINT_XFER_BULK) { l("Bulk Endpoint"); if (usbIf.getEndpoint(i).getDirection() == UsbConstants.USB_DIR_IN) epIN = usbIf.getEndpoint(i); else epOUT = usbIf.getEndpoint(i); } else { l("Not Bulk"); } } for (;;) {// this is the main loop for transferring try { Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } String get = "$fDump G" + "\n"; l("Sending: " + get); byte[] by = get.getBytes(); // This is where it sends l("out " + conn.bulkTransfer(epOUT, by, by.length, 500)); // This is where it is meant to receive byte[] buffer = new byte[4096]; StringBuilder str = new StringBuilder(); if (conn.bulkTransfer(epIN, buffer, 4096, 500) >= 0) { for (int i = 2; i < 4096; i++) { if (buffer[i] != 0) { str.append((char) buffer[i]); } else { l(str); break; } } } // this shows the complete string l(str); if (mStop) { mStopped = true; return; } l("sent " + counter); counter++; counter = (byte) (counter % 16); } } };