Android USB изохронная передача данных - PullRequest
6 голосов
/ 17 января 2012

В настоящее время я пытаюсь найти способ обработки передачи данных USB на изохронной конечной точке на моем планшете Android 3.2 (поддерживается режим хоста).После написания некоторого прототипа кода я заметил, что в файле констант для USB_ENDPOINT_XFER_ISOC говорится, что «Изохронный тип конечной точки (в настоящее время не поддерживается)».

Возможно ли это без рутирования устройства?Если так, то как бы я поступил так?

В идеале я надеялся остаться в рамках Java API, но если это возможно только через NDK, я должен был бы заняться этим вместо этого.Я также понимаю, что могут быть некоторые проблемы с пропускной способностью USB, основанные на следующем сообщении: Пользовательский режим USB изохронная передача с устройства на хост

Ответы [ 2 ]

7 голосов
/ 30 января 2015

Я написал класс Java для изохронной передачи данных через USB под Android (или Linux): UsbIso

Он использует JNA для доступа к USBFS API через вызовы IOCTL.

6 голосов
/ 23 января 2012

Вы "можете" сделать это без рута, я считаю.

Вам нужно будет сделать все это с помощью некоторого собственного кода C, взаимодействующего с устройством USB с помощью USBFS.Большая проблема связана с отсутствием документации по Linux Linux usbfs.В основном все должно быть сделано через ioctls.Тем не менее, вы открываете устройство, как обычно с Java.Затем вы передаете файловый дескриптор из USBDeviceConnection

Добавьте к этому вам потребуется самостоятельно проанализировать все дескрипторы USB.Вы можете получить к ним, снова от USBDeviceConnection .Переход от дескриптора к дескриптору - это просто найти документацию о том, что означает каждый дескриптор, это БОЛЬШАЯ головная боль, но вы можете найти большую часть документации на www.usb.org.

Я написал большую часть кода, которыйМне нужно было выполнить синтаксический анализ аудиоустройств, и я попытался передать изохронную передачу, а затем начал получать ошибки.

После перехода на libusb я обнаружил, что проблема в моем случае была в том, чтоаудиоустройство также имело контроллеры HID, и драйвер по умолчанию следил за ними и крал всю пропускную способность от изохронной передачи.Если бы я знал это раньше, я мог бы продолжить с не-root-не-libusb метод.Как и раньше, я получал изохронные передачи, работающие через lib usb, но для этого требовалось рутированное устройство: (

В какой-то момент я вернусь к нему.

В целом, я довольноконечно, это возможно, но это не будет легко !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...