1

USB経由で接続されたカメラにbulkTransfer経由で短いデータパッケージ(2文字のみ)を送信したい。ホストとしてAndroid4.0.3でSamsungGalaxyS2を使用しています。すべて問題ないようです。受け入れてください...実際にはデータは送信されていません。理論的には、メソッドbulkTransferは正の値を返します。これは、データが転送されたことを意味しますが、目に見える効果はありません。コードは次のとおりです。

     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ホストについてのすべてを読みました...だから私をそこに向けないでください。助けてくれてありがとう。

4

1 に答える 1

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

    }
于 2015-04-19T17:50:27.363 に答える