2012-05-03 11 views
12

Próbuję wysyłać i odbierać dane przez USB, moje urządzenie, Acer Iconia A500 ma wszystko, co niezbędne do połączenia z urządzeniem i wszystkim, co jest w porządku i działa poprawnie, ale kiedy próbuję wysyłać i odbierać dane nie zachowuje się zgodnie z oczekiwaniami. To jest mój kodPrzesyłanie danych USB

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

Jego oznaczało powrót tablicę bajtów długości około 80 znaków, ale to tylko zwraca dwa bajty z powrotem, które są 1 i 96, jeśli nie było błędu na urządzeniach USB zakończyć to jeszcze powrócić kilka więcej niż dwa. Czy mój kod jest bliski korekty? Oparłem to na USB na seryjny artykuł przez serwerbox.

Odpowiedz

16

Próbowałem wysłać dane z niewłaściwą prędkością transmisji.

Oto kod, który działa. Publikowanie go dla każdego, kto korzysta z urządzeń FTDI i potrzebuje pomocy.

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

Dziękuję bardzo –

+0

Bez problemu. Minęło trochę czasu, odkąd to zrobiłem. – FabianCook

+0

Czy możesz dołączyć swoje instrukcje importu? – rolls