问题
I'm using official drivers from http://www.ftdichip.com/Android.htm
03-20 13:37:52.359: WARN/FTDI(4453): read starting
03-20 13:37:52.359: WARN/FTDI(4453): 6 bytes available
03-20 13:37:57.960:WARN/FTDI(4453): 0 bytes read
03-20 13:37:57.960: WARN/FTDI(4453): read finished
The source code for this is trivial:
public int read(byte[] buffer, int timeout) throws IOException {
Log.w(TAG, "read starting");
try {
Log.w(TAG, device.getQueueStatus() + " bytes available");
int read = device.read(buffer);
Log.w(TAG, read + " bytes read");
return read;
} finally {
Log.w(TAG, "read finished");
}
}
Their support department did not reply to me, even after a week. I'm on Android 4.0.4, with a Arduino Duemilanove ftdi-based board.
回答1:
Yes, i did it..
You have to follow this in order to read incoming data:
- invoke restartInTask() after opening
- get available input bytes before reading
- read only if available bytes count > 0
working code snippet:
public int read(byte[] buffer, int timeout) throws IOException {
params.setReadTimeout(timeout);
Log.w(TAG, "read starting");
try {
int available = device.getQueueStatus();
Log.w(TAG, available + " bytes available");
if (available <= 0)
return 0;
int read = device.read(buffer, available, timeout);
Log.w(TAG, read + " bytes read");
return read;
} finally {
Log.w(TAG, "read finished");
}
}
来源:https://stackoverflow.com/questions/15518214/official-ftdi-android-drivers-read-is-not-working