Официальные драйверы FTDI для Android read() не работают

Я использую официальные драйверы с сайта http://www.ftdichip.com/Android.htm.

03-20 13:37:52.359: WARN/FTDI(4453): начало чтения

03-20 13:37:52.359: WARN/FTDI(4453): доступно 6 байт

03-20 13:37:57.960:WARN/FTDI(4453): прочитано 0 байт

03-20 13:37:57.960: WARN/FTDI(4453): чтение завершено

Исходный код для этого тривиален:

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

Их служба поддержки не ответила мне даже через неделю. Я на Android 4.0.4 с платой на базе Arduino Duemilanove ftdi.


person 4ntoine    schedule 20.03.2013    source источник
comment
Любой код, как вы называете эту функцию «чтения»? Что такое буфер? что такое устройство?   -  person RvdK    schedule 20.03.2013
comment
См. код выше ( байт [] буфер = новый байт [1024], поэтому с ним все в порядке). Это samsung galaxy tab2 10.1 (android ICS), и другая USB-библиотека работает нормально (включая чтение()). Но он не имеет всех необходимых функций, поэтому я бы предпочел официальные драйверы, но работающие   -  person 4ntoine    schedule 20.03.2013


Ответы (1)


Да я сделал это..

Вы должны следовать этому, чтобы читать входящие данные:

  1. вызывать restartInTask() после открытия
  2. получить доступные входные байты перед чтением
  3. только для чтения, если количество доступных байтов > 0

кусок рабочего кода:

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");
        }
    }
person 4ntoine    schedule 23.03.2013
comment
Я понимаю, что это старый вопрос, но у меня похожая проблема (см. мой вопрос: stackoverflow.com/questions/22985558/). Однако ваше решение не работает для меня. - person Bovaz; 10.04.2014