3
votes

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
Any code how you call this 'read' function? What is buffer? what is device?RvdK
See code above( byte[] buffer = new byte[1024] so it seems to be ok with it). It's samsung galaxy tab2 10.1 (android ICS) and another usb lib is working ok (including read()). But it does not have all necessary features so i'd prefer official drivers but working4ntoine

1 Answers

3
votes

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");
        }
    }