2012-04-25 15 views
1

バルク転送を使用して短いデータパッケージ(わずか2文字)をUSB経由で接続されたカメラに送信します。私はAndroid 4.0.3でSamsung Galaxy S2をホストとして使用しています。すべてがうまく見える、受け入れる...データは実際に送信されていません。理論的には、メソッドbulkTransferは正の値を返します。つまり、データは転送されていますが、目に見える効果はありません。コードは次のとおりです。バルク転送に失敗 - Android 4.0.3

 char ch = (char)34; 
    char[] record = {'P',ch}; 
    String r = record.toString(); 
    byte[] bytes = r.getBytes(Charset.forName("ASCII")); 
    int TIMEOUT = 10000; 
    boolean forceClaim = true; 
    UsbManager mUsbManager = (UsbManager) getSystemService(Context.USB_SERVICE); 
    UsbInterface intf = device.getInterface(0); 
    for (int i = 0; i < intf.getEndpointCount(); i++) { 
      UsbEndpoint ep = intf.getEndpoint(i); 
      if (ep.getType() == UsbConstants.USB_ENDPOINT_XFER_BULK) { 
      if (ep.getDirection() == UsbConstants.USB_DIR_OUT) { 
       endpoint = ep; 
       //Integer dir = endpoint.getDirection(); 
       UsbDeviceConnection connection = mUsbManager.openDevice(device); 
       if(connection!=null){devMessage+=" I connected";} 
       connection.claimInterface(intf, forceClaim); 
       Integer res = connection.bulkTransfer(endpoint, bytes, bytes.length, TIMEOUT); 
       if (res>0){devMessage += "some data transfered.";} 
       connection.releaseInterface(intf); 
      break; 

      } 
      } 

bulkTransferを開始する前に追加する必要がありますか? bulkTransferを開始する前にcontrolTransferが必要ですか?私が忘れているかもしれないことが他にありますか? これは私のUSB通信の最初のアプリであり、ネット上には多くのリソースがないので、ご理解ください。私はすでにdeveloper.androidのUSBホストに関するすべてを読んだので、そこで私に指示しないでください。助けてくれてありがとう。

答えて

0

インターフェイスが正しくない可能性がありますあなたはdevice.getInterface(0)を使用しています。だからこれは正しくないかもしれません。これを試してインターフェイスを入手してください。

for (int i = 0; i < device.getInterfaceCount(); i++) { 
     UsbInterface usbif = device.getInterface(i); 

     UsbEndpoint tOut = null; 
     UsbEndpoint tIn = null; 

     int tEndpointCnt = usbif.getEndpointCount(); 
     if (tEndpointCnt >= 2) { 
      for (int j = 0; j < tEndpointCnt; j++) { 
       if (usbif.getEndpoint(j).getType() == UsbConstants.USB_ENDPOINT_XFER_BULK) { 
        if (usbif.getEndpoint(j).getDirection() == UsbConstants.USB_DIR_OUT) { 
         tOut = usbif.getEndpoint(j); 
        } else if (usbif.getEndpoint(j).getDirection() == UsbConstants.USB_DIR_IN) { 
         tIn = usbif.getEndpoint(j); 
        } 
       } 
      } 

      if (tOut != null && tIn != null) { 
       // This interface have both USB_DIR_OUT 
       // and USB_DIR_IN of USB_ENDPOINT_XFER_BULK 
       usbInterface = usbif; 
       endpointOut = tOut; 
       endpointIn = tIn; 
      } 
     } 

    } 
関連する問題