Я пытаюсь получить данные с пользовательского устройства на основе чипа FTDI 2232H.
Я использую простой режим Async FIFO, а скорость входящей передачи составляет 3,2 МБ/с.
Все работает отлично с тестовым кодом на моем ПК, но у меня проблемы с получением данных на моем Toshiba Thrive.
Драйвер TDI Android не работает, поэтому я кодирую с использованием Java.
Я могу получить 95% + данных отлично, но каждый раз данные "разбрызгиваются", и я получаю части из тех же 4-5K данных два или три раза, а затем обратно к хорошим данным.
Я не буду слишком быстрым для 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;
}
Если вы считаете это временной задержкой для arraycopy - я все еще теряю данные, даже если я прокомментирую эту строку.
IN_BUFF_LEN - 16384 (bulkTransfer не вернется больше, даже если я увеличиваю размер inBuff).
BigBuff - это несколько мегабайт.
В качестве второстепенного вопроса - кто-нибудь знает, как передать указатель на bulkTransfer, который будет заполнять bigBuff напрямую --- при смещении (не начиная с позиции "0"?