Я пытаюсь получить данные с нестандартного устройства на основе микросхемы FTDI 2232H.
Я использую простой режим FIFO с асинхронной синхронизацией, и скорость входящих данных составляет 3,2 МБ / с.
Все отлично работает с тестовым кодом на моем ПК, но у меня возникают проблемы с получением данных на моем Toshiba Thrive.
Сбой драйвера Android от TDI, поэтому я кодирую с использованием Java.
Я могу получить более 95% данных, но время от времени они «распыляются», и я получаю порции тех же 4-5 КБ данных два или три раза, а затем возвращаюсь к хорошим данным.
Я не буду слишком быстрым для Thrive или Android, потому что ранее у меня были данные с удвоенной скоростью (6,4 МБ / с), и они также получали около 95% от этого.(Так что у него не должно быть проблем с половинной скоростью.)
Кажется, что есть какая-то ошибка в буферизации (или двойной буферизации), которая происходит в Android.(Это не буфер в FTDI 2232H, потому что повторяющиеся данные больше, чем внутренний буфер чипа 4K.)
Код установки прост, и снова он работает ~ почти ~ отлично.
Цикл, в котором происходит захват данных, очень прост:
while(!fStop)
if(totalLen < BIG_BUFF_LEN-IN_BUFF_LEN)
{
len=conn.bulkTransfer(epIN, inBuff, IN_BUFF_LEN, 0);
System.arraycopy(inBuff, 0, bigBuff, totalLen, len);
totalLen+=len;
}
Если вы считаете, что это задержка для массива - я все равно теряю данные, даже если я закомментирую эту строку.
IN_BUFF_LEN - 16384 (массовый перенос не вернет больше, чем этот, даже если я увеличу размер inBuff).
БольшойBuff составляет несколько мегабайт.
Как дополнительный вопрос - даКто-нибудь знает, как передать указатель на bulkTransfer, который будет заполнять bigBuff напрямую - со смещением (не начиная с позиции '0'?