2012-05-03 39 views
12

私のデバイスであるUSBを介してデータを送受信しようとしていますが、Acer Iconia A500には、デバイスやすべてに接続するのに必要なものがすべてあり、正常に動作しますが、データの送受信期待どおりに動作しません。この私のコードですデータの転送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); 
} 

USBデバイス上のエラーが発生した場合、その約80文字バイトの配列を返すことを意味しますが、それは唯一の1と96ですバック2つのバイトを返しますが、それはまだ戻ってくる終了します2つ以上。私のコードは正しいか?私はそれをサーバーボックスによるシリアル記事のUSBに基づいています。

答えて

16

間違ったボーレートでデータを送信しようとしました。

以下は、動作するコードです。 FTDIデバイスを使用していて助けが必要な人のために投稿してください。

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