2012-10-28 22 views
10

FTDI cihazları için USB verilerinin okunması için gönderilen bir soru buldum. Transferring data USB Bu kodu üretken cihaz için kullandım ve usb, connect.bulkTransfer() öğesinin -1 vermesi dışında algılanabilir.USB aygıtından veri aktarımı (üretken) android cihaza

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() + " >==<"); 
} 

Herhangi bir değişiklik yapmam gerektiğini bana söyleyebilir mi? Şimdiden teşekkür ederim.

+0

Çözüm buldunuz mu? – user427969

cevap

0

Birkaç sorun var.

Yorumlanan satırın sorun yaşadığınız yer olduğunu varsayalım. Kod girintinizi yeniden biçimlendirmek ve daha fazla bilgi sağlamak isteyebilirsiniz. Her durumda, Sorununuz burada gerçekleşiyor varsayarak:

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

görüyorum acil sorun - epOut, uç nokta veri gönderiyor hangi boş. Tabii ki başarısız olur. Hiçbir şeye veri gönderiyorsun.

epOUT = usbIf.getEndpoint(i); 

şiddetle en azından öneririm, önce orijinal kodu anladığınızdan emin olun veya çalışma vardır: Ben size kopyalanan örnek koduna gönderilen linki takip bunlar bir çizgi sergilemek değişiklikler yapmaya başlamadan önce kendi programınızda. DON'T sadece sorununuzu gidermek için yukarıdaki kod satırını kopyalayın.