2012-10-28 11 views
10

मुझे एफटीडीआई उपकरणों के लिए यूएसबी डेटा पढ़ने के लिए एक प्रश्न मिला। Transferring data USB मैंने इस कोड का उपयोग प्रबल डिवाइस के लिए किया था, और यूएसबी का पता लगाया जा सकता है, सिवाय इसके कि conn.bulkTransfer() एक -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() + " >==<"); 
} 

क्या कोई मुझे बता सकता है कि मुझे किन परिवर्तनों की आवश्यकता है? पहले ही, आपका बहुत धन्यवाद।

+0

क्या आपको समाधान मिला? – user427969

उत्तर

0

कई मुद्दे हैं।

मुझे लगता है कि टिप्पणी की गई लाइन है जहां आपको समस्याएं आ रही हैं। आप अपने कोड इंडेंटेशन को दोबारा सुधारना और अधिक जानकारी प्रदान करना चाहते हैं। किसी भी मामले में, यह सोचते हैं कि आपकी समस्या यहां हो रहा है:

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

तत्काल समस्या यह है कि मैं देख रहा हूँ - epOut, अंत बिंदु, जिसमें आप डेटा भेज रहे हैं रिक्त है। तो निश्चित रूप से यह असफल हो जाएगा। आप कुछ भी डेटा भेज रहे हैं।

epOUT = usbIf.getEndpoint(i); 

मैं दृढ़ता से कम से कम सुझाव है, तो आपको पहले सुनिश्चित करें कि आप मूल कोड को समझते हैं या यह काम कर रहा है: मैं लिंक है कि आप उदाहरण कोड है कि आप की नकल की पर पोस्ट किए गए पीछा किया, वे एक लाइन प्रदर्शित है परिवर्तन करने से पहले अपने स्वयं के कार्यक्रम में। न करें अपनी समस्या को "ठीक करने के लिए" कोड की उपरोक्त पंक्ति कॉपी करें।

संबंधित मुद्दे