尝试与Arduino UNO通信时,UsbDeviceConnection.controlTransfer()失败

时间:2014-06-01 03:50:24

标签: android usbserial android-host-api

尽管有claimedInterface d,拥有正确的权限等,但当调用controlTransfer()时,它返回-1。 Logcat没有显示任何有趣的内容。 我正在使用this code作为指南。

查看来源herehere, 我知道设备是正确打开的(getFileDescriptor()返回一个正确的值)。这意味着ioctl调用失败。 我无法访问errno。

有什么想法吗?

private static UsbInterface getSerialInterface(UsbDevice device)
{
    for (int i = device.getInterfaceCount() - 1; i >= 0; i--)
    {
        UsbInterface iface = device.getInterface(i);
        if (iface.getInterfaceClass() == UsbConstants.USB_CLASS_CDC_DATA)
            return iface;
    }
    return null;
}

private byte[] getLineEncoding(int baudRate) {
    final byte[] lineEncodingRequest = { (byte) 0x80, 0x25, 0x00, 0x00, 0x00, 0x00, 0x08 };
    if (baudRate != 9600)
        throw new UnsupportedOperationException("Bad Baud rate.");
}


private boolean openSerialEndpoints(UsbDevice device)
{
    mConnection = mManager.openDevice(device);
    if (mConnection == null) return false;
    UsbInterface iface = getSerialInterface(device);
    if (iface == null) {
        closeSerialEndpoints();
        return false;
    }
    if (!mConnection.claimInterface(iface, true)) {
        Log.e(TAG, "Claiming interface failed!");
        closeSerialEndpoints();
        return false;
    }
    Log.d(TAG, "controlTransfer.");
    if (mConnection.getFileDescriptor() == -1)
        Log.d(TAG, "NOt Opened!!");
    // Arduino setup.
    if (mConnection.controlTransfer(0x21, 0x22, 0, 0, null, 0, 0) <= 0) {
        Log.d(TAG, "Control transfer 1 failed.");    // This fails
        return false;
    }
    if (mConnection.controlTransfer(0x21, 0x20, 0, 0, getLineEncoding(9600), 7, 0) <= 0) {
        Log.d(TAG, "Control transfer 2 failed.");
        return false;
    }
 }

0 个答案:

没有答案