LINUX.ORG.RU

История изменений

Исправление vbr, (текущая версия) :

Не совсем понял про какой цикл вы пишите

Тут

но поток внутри ядра живёт по своим законам

Я извиняюсь, неясно написал. В андроиде драйвер в юзерспейсе, это просто библиотека на жаве. Там нет доступа к ядерному драйверу, ядро даёт доступ к «сырому» USB (что бы это ни значило), а драйвер этот уже его разбирает и взаимодействует.

Вы лучше попробуйте не читать на андройде совсем, послать туда с компа много много байт, допустим 200, причём известного содержимого, допустим возрастающая последовательность, а потом прочитать разом и посмотреть сколько прочитается. Получите реальный размер буфера приёма на андройд.

Нисколько не читается. Если быть точным, пакеты по 28 байтов. Вот 28 байтов и приходит в мой коллбэк, даже 56 не приходит. Насколько я понял, там 64 байта некий внутренний usb read buffer, видимо к этим 28 байтам ещё заголовки добавляются и в 64 уже больше одного пакета не влезает. Если я добавляю sleep(1) (1 мс), то скорость падает примерно в 2 раза (т.е. вместо примерно 1000 чтений в секунду получается примерно 500 чтений в секунду), если sleep(10), то падает в 10 раз. На компьютере такой же «алгоритм» с такими же sleep-ами пакеты вообще не теряет, они там буферизуются, пока читающий поток «спит» и потом сразу всем скопом отдаются. Но предполагаю, что буферизуются они где-то в ядре, ну или где-то в библиотеке, куда я доступа не имею (проверял на chrome/webserial и java/jserial).

А вобще, такие скорости (>115200) критичны к качеству/длине кабеля.

Кабель обычный качественный USB-C.

Исправление vbr, :

Не совсем понял про какой цикл вы пишите

Тут

но поток внутри ядра живёт по своим законам

Я извиняюсь, неясно написал. В андроиде драйвер в юзерспейсе, это просто библиотека на жаве. Там нет доступа к ядерному драйверу, ядро даёт доступ к «сырому» USB (что бы это ни значило), а драйвер этот уже его разбирает и взаимодействует.

Вы лучше попробуйте не читать на андройде совсем, послать туда с компа много много байт, допустим 200, причём известного содержимого, допустим возрастающая последовательность, а потом прочитать разом и посмотреть сколько прочитается. Получите реальный размер буфера приёма на андройд.

Нисколько не читается. Если быть точным, пакеты по 28 байтов. Вот 28 байтов и приходит в мой коллбэк, даже 56 не приходит. Насколько я понял, там 64 байта некий внутренний usb read buffer, видимо к этим 28 байтам ещё заголовки добавляются и в 64 уже больше одного пакета не влезает. Если я добавляю sleep(1) (1 мс), то скорость падает примерно в 2 раза (т.е. вместо примерно 1000 чтений в секунду получается примерно 500 чтений в секунду), если sleep(10), то падает в 10 раз. На компьютере такой же «алгоритм» с такими же sleep-ами пакеты вообще не теряет, они там буферизуются. Но предполагаю, что буферизуются они где-то в ядре, ну или где-то в библиотеке, куда я доступа не имею (проверял на chrome/webserial и java/jserial).

А вобще, такие скорости (>115200) критичны к качеству/длине кабеля.

Кабель обычный качественный USB-C.

Исправление vbr, :

Не совсем понял про какой цикл вы пишите

Тут

но поток внутри ядра живёт по своим законам

Я извиняюсь, неясно написал. В андроиде драйвер в юзерспейсе, это просто библиотека на жаве. Там нет доступа к ядерному драйверу, ядро даёт доступ к «сырому» USB (что бы это ни значило), а драйвер этот уже его разбирает и взаимодействует.

Вы лучше попробуйте не читать на андройде совсем, послать туда с компа много много байт, допустим 200, причём известного содержимого, допустим возрастающая последовательность, а потом прочитать разом и посмотреть сколько прочитается. Получите реальный размер буфера приёма на андройд.

Нисколько не читается. Если быть точным, пакеты по 28 байтов. Вот 28 байтов и приходит в мой коллбэк, даже 56 не приходит. Насколько я понял, там 64 байта некий внутренний usb read buffer, видимо к этим 28 байтам ещё заголовки добавляются и в 64 уже больше одного пакета не влезает.

А вобще, такие скорости (>115200) критичны к качеству/длине кабеля.

Кабель обычный качественный USB-C.

Исходная версия vbr, :

Не совсем понял про какой цикл вы пишите

Тут

но поток внутри ядра живёт по своим законам

Я извиняюсь, неясно написал. В андроиде драйвер в юзерспейсе, это просто библиотека на жаве. Там нет доступа к ядерному драйверу, ядро даёт доступ к «сырому» USB (что бы это ни значило), а драйвер этот уже его разбирает и взаимодействует.