Неудачная массовая передача — Android 4.0.3

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

            } 
           }

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


person Magda    schedule 25.04.2012    source источник


Ответы (1)


Возможно, интерфейс неправильный Вы используете 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;
            }
        }

    }
person DJphy    schedule 19.04.2015