Transferencia de datos desde USB (prolífico) a dispositivo Android

Encontré una pregunta publicada para la lectura de datos USB para dispositivos FTDI. Transferencia de datos USB He utilizado este código para el dispositivo prolífico, y el usb puede ser detectado, etc, excepto que el conn.bulkTransfer () da un -1.

private class UsbRunnable implements Runnable { private final UsbDevice mDevice; UsbRunnable(UsbDevice dev) { mDevice = dev; } public void run() {//here the main USB functionality is implemented UsbDeviceConnection conn = mUsbManager.openDevice(mDevice); if (!conn.claimInterface(mDevice.getInterface(1), true)) { l("in run(), no connection"); return; } l("in run(), connection"); 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, 0xC04E, 0, null, 0, 0);// baudrate // 38400 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; //conn.bulkTransfer(epOUT, new byte[]{msData}, 1, 0); UsbInterface usbIf = mDevice.getInterface(0); for (int i = 0; i < usbIf.getEndpointCount(); i++) { l("EP: " + String.format("0x%02X", usbIf.getEndpoint(i) .getAddress())); l("Type:"+usbIf.getEndpoint(i).getType()); if (usbIf.getEndpoint(i).getType() == UsbConstants.USB_ENDPOINT_XFER_INT) { l("Bulk Endpoint"); l("direction: "+usbIf.getEndpoint(i).getDirection()); if (usbIf.getEndpoint(i).getDirection() == UsbConstants.USB_DIR_IN) epIN = usbIf.getEndpoint(i); } else l("no bulk"); l("epIN: "+epIN.toString()); } for (;;) {// this is the main loop for transferring try { Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } // This is where it is meant to receive byte[] buffer = new byte[38400]; StringBuilder str = new StringBuilder(); l("bulk transfer thing: " + conn.bulkTransfer(epIN, buffer, 38400, 1000)); if (conn.bulkTransfer(epIN, buffer, 38400, 1000) > 0 ) { l("bulk transfer is success"); for (int i = 2; i < 64; i++) { if (buffer[i] != 0) { str.append((char) buffer[i]); } else { l(str); break; } } } // this shows the complete string l(str); if (mStop) { mConnectionHandler.onUsbStopped(); return; } l("sent " + counter); counter++; counter = (byte) (counter % 16); } } } // END MAIN LOOP private BroadcastReceiver mPermissionReceiver = new PermissionReceiver( new IPermissionListener() { public void onPermissionDenied(UsbDevice d) { l("Permission denied on " + d.getDeviceId()); } }); private static interface IPermissionListener { void onPermissionDenied(UsbDevice d); } public final static String TAG = "USBController"; private void l(Object msg) { Log.d(TAG, ">==< " + msg.toString() + " >==<"); } private void e(Object msg) { Log.e(TAG, ">==< " + msg.toString() + " >==<"); } 

¿Puede alguien decirme qué cambios debo hacer? Gracias de antemano.

Hay varias cuestiones.

Supongo que la línea comentada es donde usted está teniendo problemas. Es posible que desee volver a formatear su sangría de código y proporcionar más información. En cualquier caso, asumiendo que su problema está ocurriendo aquí:

 byte counter=0; //conn.bulkTransfer(epOUT, new byte[]{msData}, 1, 0); 

El problema inmediato que veo – epOut, el punto final al que está enviando datos es nulo. Por supuesto, fallará. Estás enviando datos a nada. He seguido el enlace que publicó en el código de ejemplo que copió, que tienen una línea que muestra:

 epOUT = usbIf.getEndpoint(i); 

Yo sugeriría fuertemente por lo menos, primero asegúrese de que entiende el código original o lo tiene trabajando en su propio programa antes de empezar a hacer cambios. NO sólo copie la línea de código anterior para "arreglar" su problema.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.