2012-05-03 11 views
12

मैं यूएसबी, मेरे डिवाइस पर डेटा भेजने और प्राप्त करने की कोशिश कर रहा हूं, एसर आइकोनिया ए 500 में डिवाइस और सबकुछ से कनेक्ट करने के लिए आवश्यक सब कुछ है, जो ठीक है और ठीक से काम करता है, लेकिन जब मैं डेटा भेजने और प्राप्त करने का प्रयास करता हूं यह उम्मीद के रूप में व्यवहार नहीं करता है। यह मेरा कोड हैडेटा स्थानांतरित करना यूएसबी

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 उपकरणों पर एक त्रुटि थी अंत यह अभी भी वापसी होगी कुछ और दो। क्या मेरा कोड भी सही है? मैं इसे सर्वरबॉक्स द्वारा सीरियल आलेख के लिए यूएसबी के आधार पर आधारित करता हूं।

उत्तर

16

मैं गलत बॉड दर पर डेटा भेजने की कोशिश कर रहा था।

यहां कोड है जो काम करता है। इसे एफटीडीआई उपकरणों का उपयोग करने वाले हर किसी के लिए पोस्ट करना और मदद की ज़रूरत है।

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); 
      } 
     } 
    }; 
+1

आपको बहुत धन्यवाद –

+0

कोई समस्या नहीं। थोड़ी देर के बाद से मैंने ऐसा किया। – FabianCook

+0

क्या आप अपना आयात विवरण शामिल कर सकते हैं? – rolls

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