尽管有claimedInterface
d,拥有正确的权限等,但当调用controlTransfer()时,它返回-1。 Logcat
没有显示任何有趣的内容。
我正在使用this code作为指南。
查看来源here和here, 我知道设备是正确打开的(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;
}
}