Я искал то же самое, что и вы. После того, как я погуглил и попробовал сам, мне удалось создать что-то вроде этого:
Декларация:
int AndroidAccessory::read(void *buff, int len, unsigned int nakLimit);
Считывает данные с устройства Android в массив, на который указывает buff . Он читает len количество байтов. Чтение останавливается, когда считывается len байт или nakLimit количество NAK, полученных от контроллера USB. В случае Full Speed USB NAK будет генерироваться каждые 1 мс. (по ссылке второго источника).
Возвращаемым значением является количество байтов доступных , а не количество прочитанных байтов. Если вы прочитали меньше байтов, чем доступно, эти дополнительные байты, похоже, будут игнорироваться.
В своих экспериментах я обнаружил, что интервал NAK намного меньше. С моим Arduino Mega ADK я обнаружил, что одна секунда ожидания примерно равна nakLimit 14000.
Источники: