Обмен информацией по USB

188
08 декабря 2021, 04:50

У меня следующая проблема - Настраиваю соединение по USB между терминалом и устройством android, соединение устанавливается если его настраивать через endPoints, однако так как у терминала только 1 EndPoint приходится использовать UsbSerial и вот с ним у меня возникает проблема.

UsbSerialProber.getDefaultProber().findAllDrivers() возвращает -1, почему это происходит и что делать если не находится ни один драйвер?

// этот метод не находит драйверов
List<UsbSerialDriver> availableDrivers = UsbSerialProber.getDefaultProber().findAllDrivers(usbManager); 
if (availableDrivers.isEmpty()) {
    return;
}
UsbSerialDriver driver = availableDrivers.get(0);
final UsbDeviceConnection connection2 = usbManager.openDevice(driver.getDevice());
if (connection == null) {
    // add UsbManager.requestPermission(driver.getDevice(), ..) handling here
    return;
}

Буду очень признателен если кто-то напишет или скинет ссылку на пример использования только 1 EndPoint для реализации обмена данными без UsbSerial

Answer 1

Эндпоинты это основа обмена по USB. Дальше обмен осуществляется либо через драйвер, который подключается к эндпоинтам и выдает устройство в диспечере устройств / devfs. Либо напрямую через libusb. При подключении через последний драйвер выгружается.

USBserial это простейший драйвер, который создает виртуальный ком порт и связывает его с усб устройством. Драйверу нужно знать какие устройства поддерживаются и если устройства нет в списке - подключиться к нему через ком порт можно только насильно. Но и если всё хорошо, то libusb также может отнять устройство у драйвера.

USBserial помогает с контролем потока данных, на нем можно гонять прямую передачу файлов через ядро. Также удобен для работы с консольными программами или с теми, где в настройках указывается устройство вручную пользователем.

Работа через эндпоинт проще в програмном режиме. Не стоит пинать устройство ннасильно, если оно не поддерживается потому как это требует привелегий и не надежно при переносе на другую систему или другое устройство.

READ ALSO
MySQL + Hibernate + Spring (кодировка)

MySQL + Hibernate + Spring (кодировка)

Столкнулся с такой проблемой, что в БД записываются "????" вместо кириллицыИзменил настройки проекта на кодировку UTF-8, поменял БД MySQL тоже...

80
Задача на массивы. Не могу решить

Задача на массивы. Не могу решить

Задание такое: 1Создать массив на 15 целых чисел

85
Как удалить первый элемент коллекции, используя iterator

Как удалить первый элемент коллекции, используя iterator

Если попытаться вызвать iteratorremove() до вызова next(), то мы получим исключение IllegalStateException

145
Как поместить строку в одинарные кавычки?

Как поместить строку в одинарные кавычки?

Как добавить в конец строки символ " ' " не вызывая два раза builderreplace?

163