2012-04-25 3 views
1

Я хочу отправить короткий пакет данных (всего 2 символа) через bulkTransfer на камеру, подключенную через USB. Я использую Samsung Galaxy S2 с Android 4.0.3 в качестве хоста. Все кажется прекрасным, согласитесь ... на самом деле данные не отправляются. Теоретически метод bulkTransfer возвращает положительное значение, то есть данные переносятся, но видимого эффекта нет. Код выглядит следующим образом:Unsuccessful 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; 

      } 
      } 

Есть ли что-нибудь еще, что мне нужно включить, прежде чем я начну переадресовать? Есть ли необходимость в controlTransfer перед запуском bulkTransfer? Есть ли что-нибудь еще, что я могу забыть. Пожалуйста, поймите, поскольку это мое первое приложение с USB-коммуникацией, и в сети не так много ресурсов. Я уже прочитал все о usb-хосте на developer.android ... поэтому, пожалуйста, не направляйте меня туда. Большое спасибо за любую помощь.

ответ

0

Может быть, интерфейс неправильный С помощью устройства.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; 
      } 
     } 

    }