Official FTDI android drivers read() is not working

前提是你 提交于 2019-12-22 10:56:52

问题


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:

  1. invoke restartInTask() after opening
  2. get available input bytes before reading
  3. 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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!