不成功的bulkTransfer - Android 4.0.3

时间:2012-04-25 11:06:17

标签: android usb host

我想通过bulkTransfer将短数据包(仅2个字符)发送到通过USB连接的相机。我使用三星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;

            } 
           }

在我开始bulkTransfer之前还有什么需要包含的吗?在开始bulkTransfer之前是否需要controlTransfer?还有什么我可能会忘记的。 请理解,因为这是我第一个使用USB通信的应用程序,并且网上的资源不多。我已经在developer.android上阅读了有关usb主机的所有信息......所以请不要指示我。非常感谢您的帮助。

1 个答案:

答案 0 :(得分: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;
            }
        }

    }