Android телефоны с usb host

Работаем с USB Custom HID на Android


В современных Android — приложениях для взаимодействия с другими устройствами чаще всего используются беспроводные протоколы передачи данных, как например Bluetooth. В годы, когда часть устройств имеют беспроводную зарядку, сложно представить себе связку Android устройства и периферийного модуля, в которой необходимо использование проводных интерфейсов. Однако когда такая необходимость возникает, на ум сразу же приходит USB.

Давайте разберем с вами гипотетический кейс. Представьте, что к вам приходит заказчик и говорит: “Мне нужно Android приложение для управления устройством сбора данных и вывода этих самых данных на экран. Есть одно НО — приложение надо написать на одноплатный компьютер с операционной системой Android, а периферийное устройство подключено по USB”

Звучит фантастически, но и такое иногда случается. И тут как нельзя кстати пригодится глубокое знание USB стека и его протоколов, но данная статья не об этом. В данной статье мы рассмотрим, как управлять периферийным устройством по протоколу USB Custom HID с Android устройства. Для простоты напишем Android-приложение (HOST), которое будет управлять светодиодом на периферийным устройством (DEVICE) и получать состояние кнопки (нажатия). Код для периферийной платы приводить не буду, кому интересно — пишите в комментариях.

Итак, приступим.

Теория. Максимально коротко

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

Для общения по USB на периферийном устройстве необходимо реализовать интерфейс взаимодействия. Разные функции (например, USB HID, USB Mass Strorage или USB CDC) будут реализовывать свои интерфейсы, а некоторые будут иметь несколько интерфейсов. Каждый интерфейс содержит в себе конечные точки — специальные каналы связи, своего рода буферы обмена.

На моем периферийном устройстве реализован Custom HID с одним интерфейсом и с двумя конечными точками, одной для приёма, другой для передачи. Обычно информация с существующими на устройстве интерфейсами и конечными точками написана в спецификации на устройство, в противном случае определить их можно через специальные программы, к примеру USBlyzer.

Устройства в USB HID общаются через репорты. Что такое репорты? Так как данные передаются через конечные точки, то нам надо как-то идентифицировать, а также распарсить в соответствие с протоколом. Устройства не просто кидают друг другу байты данных, а обмениваются пакетами, имеющими четко определенную структуру, которая описывается на устройстве в специальном дескрипторе репорта. Таким образом, по дескриптору репорта, мы можем точно определить, какой идентификатор, структуру, размер и частоту передачи имеют те или иные данные. Идентификация пакета происходит по первому байту, который представляет из себя ID репорта. Например данные о состоянии кнопки, идут в репорта с а светодиодом мы управляем через репорт с >

Подальше от железа, поближе к Android

В Android поддержка USB устройств появилась начиная с API версии 12 (Android 3.1) Для работы с периферийным устройством нам необходимо реализовать режим USB host. Работа с USB достаточно неплохо описана в документации.

Для начала необходимо идентифицировать ваше подключаемое устройство, среди всего разнообразия USB девайсов. USB девайсы идентифицируются по сочетанию vid (vendor id) и pid (product id). Создадим в папке xml файл device_filter.xml со следующим содержимым:

Читайте также:  Invest in android apps

Теперь необходимо внести соответствующие разрешения и action (если вам они необходимы) в манифест приложения:

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

Для начала необходимо получить UsbManager, найти устройство, интерфейс и конечные точки устройства. Это необходимо делать при каждом подключении устройства.

Здесь мы видим те самые интерфейсы и конечные точки, речь о которых шла в прошлом разделе. Зная номер интерфейса, мы находим обе конечные точки, на прием и передачу, и инициируем usb соединение. На этом все, теперь можно читать данные.

Как я уже говорил ранее, устройства общаются через репорты.

В метод sendReport мы передаем массив байт, в котором нулевым байтом является репорт ID, берем текущее USB подключение к устройству и выполняем передачу. В качестве параметров в метод BulkTransfer передаем номер конечной точки, данные, их размер и таймаут передачи. Стоит отметить, что класс UsbDeviceConnection имеет методы для реализации обмена данными с устройством USB — методы bulkTransfer и controlTransfer. Их использование зависит от типа передачи, который поддерживает та или иная конечная точка. В данном случае используем bulkTransfer, хотя для HID чаще всего характерно использование конечных точек с типом control. Но у нас Custom HID, так что делаем что хотим. Про тип передачи советую почитать отдельно, так как от него зависит объем и частота передаваемых данных.

Для получения данных необходимо знать размер получаемых данных, который можно, как знать заранее, так и получить из конечной точки.

Метод получения данных по USB HID является синхронным и блокирующим и выполнять его необходимо в другом потоке, кроме того, репорты от устройства могут приходить постоянно, либо в любое время, поэтому необходимо реализовать постоянный опрос репорта, чтобы не пропустить данные. Сделаем это при помощи RxJava:

Получив массив байт, мы должны проверить нулевой байт, так как он является report ID и в соответствии с ним парсить полученные данные.

По завершении всех действий с USB нужно закрыть соединение. Можно выполнять это в onDestroy activity или в onCleared во ViewModel.

Заключение

В статье рассмотрен очень небольшой и примитивный, исключительно демонстративный код с реализацией для конкретного устройства. Конечно, классов USB существует много, не только HID и для них естественно реализация будет иная. Однако все методы достаточно неплохо документированы и имея хорошее представление о USB стеке можно легко разобраться в том, как их применять.

Источник

Десять смартфонов с поддержкой USB-OTG

По итогам апреля аналитики отмечают, что на фоне общего подъёма рынка мобильных устройств доля ноутбуков и нетбуков продолжает падать. Во многом это происходит потому, что современные смартфоны становятся не просто мощнее, но и функционально ближе к нетбукам. Например, многие модели сегодня оснащаются поддержкой USB On-The-Go. С её помощью к смартфону можно напрямую подключить практически любое пассивное оборудование: флэшку, картридер или жёсткий диск с разъёмом USB, принтер, игровой контроллер и даже проводную клавиатуру с мышью.

Поскольку операционная система Android основана на ядре Linux, теоретически (начиная с версии 2.3) смартфоны должны поддерживать на подключаемых по USB накопителях файловые системы FAT16/FAT32 и ext3/ext4. На практике ограничения зависят от конкретной программной реализации в данном смартфоне.

Сегодня USB в режиме хоста можно встретить у семи актуальных смартфонов под управлением ОС Android 4.x и трёх героев прошлых лет, всё ещё встречающихся в продаже. Рассмотрим эту десятку поближе.

Читайте также:  Android tv приставка ax95 db

Samsung Galaxy Note II

Смартфон выделяется экраном HD Super AMOLED с диагональю 5,5″ и разрешением 1280×720. Сочетание четырёхъядерного процессора Samsung Exynos 4412 и 2 Гб оперативной памяти выглядит более чем привлекательно. Аккумулятор ёмкостью 11,5 Вт×ч (3100 мА×ч) позволяет не думать постоянно о розетке. Полтора–два дня именно активного использования сегодня могут предложить немногие смартфоны.

Посмотрите, как к Samsung Galaxy Note II подключают по USB игровой контроллер Playstation 3 (первые три с половиной минуты ролика можно пропустить).

Модель выпускается в вариантах с 16 и 32 Гб встроенной памяти. Существует модификация GALAXY Note II LTE с поддержкой Long Term Evolution в диапазонах 800, 1800 и 2600 МГц. Внедрение LTE в России затянулось. Крупнейшие операторы связи получили соответствующие лицензии почти год назад, но планируют начать использовать 3GPP LTE только с лета 2013 года.

Samsung Galaxy S III

Этот смартфон мало отличается от Note II, поскольку фактически послужил его прообразом. При том же разрешении и типе дисплея он меньше (диагональ S III – 4,8″). С другой стороны, изображение на нём ещё более чёткое (306 точек на дюйм вместо 265 у Note II). Процессор установлен такой же (Exynos 4412), но его частота ниже, а объём оперативной памяти вдвое меньше – всего гигабайт. Также модель получила аккумулятор более скромной ёмкости – 2100 мА×ч. На смартфоне установлена операционная система Android 4.0.

Картридер и жёсткий диск, мышь и клавиатура – всё это подключается в следующем ролике к Samsung Galaxy S III через интерфейс USB-OTG за три минуты.

Смартфон также существует в вариантах с 16 и 32 Гб встроенной памяти. Версия S III mini c 8 Гб не имеет поддержки USB-OTG.

Подключение по USB интересно и возможностью прямой печати. Далеко не все принтеры оснащены модулем Wi-Fi, а распечатать документ прямо со смартфона бывает необходимо. На Samsung Galaxy S III процесс выглядит так.

Samsung Galaxy S4

Флагман среди смартфонов Samsung под управлением последней актуальной версии Android 4.2. Оснащён пятидюймовым Super AMOLED экраном с разрешением FullHD и впечатляющей плотностью пикселей – 441 на дюйм. В смартфоне установлены восьмиядерный процессор Samsung Exynos 5410, мощный графический ускоритель PowerVR SGX544MP3 и 2 Гб оперативной памяти. Ложка дёгтя: при такой начинке ёмкость аккумулятора всё равно меньше, чем у Note II, – 2600 мА×ч.

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

Разделение по объёму флэш-памяти аналогично предыдущим моделям – 16 и 32 Гб. Недавно появилась новая модификация с 64 Гб встроенной памяти.

Sony Xperia acro S

Это более доступный смартфон с поддержкой функции USB-хост. Выделяется пылевлагозащищённым корпусом, выполненным по стандарту IP57. Аппарат получился более компактный за счёт экрана с диагональю 4,3″ и разрешением 1280×720. Используются двухъядерный процессор Qualcomm MSM8260, гигабайт оперативной памяти и аккумулятор ёмкостью 1910 мА×ч.

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

Sony Xperia acro S работает под управлением ОС Android 4.0 и доступна в одном варианте – с 16 ГБ встроенной памяти. Впрочем, с учётом USB-OTG и поддержки карт формата microSD ёмкостью до 32 ГБ это трудно назвать недостатком.

Читайте также:  Просмотр с андроид регистратор

Sony Xperia Z

Один из смартфонов Sony верхнего ценового диапазона. Подобно Samsung Galaxy S4, он оснащается пятидюймовым экраном с разрешением FullHD, но его тип не Super AMOLED, а более привычный TFT. Аналогично Xperia acro S, корпус выполнен в соответствии со стандартом защиты от пыли и влаги IP57.

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

В Sony Xperia Z используется четырёхъядерный процессор Qualcomm APQ8064 и 2 ГБ ОЗУ. Аккумулятор несъёмный, ёмкостью 2330 мА×ч. Смартфон поддерживает даже больше диапазонов LTE (800, 850, 1800, 2100 и 2600), чем специализированная версия Samsung Galaxy Note II LTE.

Sony Xperia ZL

Отличия этой модификации от предыдущей минимальные и довольно странные. Корпус лишился защиты по стандарту IP57. Зачем-то появился ИК-порт и добавлен TV-выход. При этом убраны гироскоп и датчик приближения. Зато в плане поддержки LTE смартфон на сегодня лидирует. Он работает в восьми диапазонах LTE – от 700 до 2600 МГц.

В представленном ниже ролике к Sony Xperia ZL подключили геймпад. Играть в Dead Trigger стало гораздо удобнее.

Аккумулятор практически такой же – несъёмный, ёмкостью 2370 мА×ч. Как и в предыдущей модели, установлена операционная система Android 4.1.

LG Optimus G

Смартфон привлекает внимание экраном с матрицей True HD IPS Plus. Разрешение 1280×720 при диагонали 4,7″ выглядит вполне адекватно, однако другие производители уже используют FullHD на дисплеях таких размеров.

Все функции USB-хоста работают аналогично предыдущим моделям, но USB-порт современных смартфонов можно использовать и по-другому. Благодаря поддержке стандарта MHL, через micro-USB разъём можно выводить видео в разрешении Full HD на экран внешнего монитора или телевизора.

Так же, как и Sony Xperia Z(L), Optimus G оснащается четырёхъядерным процессором Qualcomm APQ8064 и двумя гигабайтами оперативной памяти. Смартфон поддерживает пять диапазонов LTE (800, 900, 1800, 2100 и 2600 МГц). Optimus G не имеет слота для карты памяти, но объём встроенной памяти вдвое больше, чем у Xperia Z(L), – 32 Гб. В качестве слабого места (как и у большинства современных смартфонов) можно указать аккумулятор. Здесь применяется несъёмный вариант батареи с ёмкостью 2100 мА×ч.

Sony Xperia sola

Этот смартфон продаётся с установленной ОС Android 2.3, однако есть возможность обновить версию до 4.0.4. После обновления функция USB-host проявит себя во всей красе.

Сейчас этот смартфон выглядит компромиссным вариантом. Самыми слабыми местами можно назвать объём оперативной памяти (512 МБ) и аккумулятор ёмкостью всего 1320 мА×ч

Поддержка USB-OTG также анонсирована для ZTE Nubia Z5 – смартфона с пятидюймовым Full HD экраном под управлением Android 4.1. В ожидании начала официальных продаж можно ознакомиться с его обзором в этом видеоролике.

У некоторых смартфонов поддержка USB-OTG может быть активирована нестандартным образом, однако такой твик требует использовать активный USB-хаб (с собственным питанием).

Помимо смартфонов под управлением Android интерфейс USB On-The-Go применялся компанией Nokia для устройств с ОС Symbian Belle. Сейчас из них ещё продаются, пожалуй, только Nokia C7-00 и Nokia 808 PureView.

Несмотря на бесперспективность ОС Symbian, слабую конфигурацию и завышенную цену, эти смартфоны ещё находят своих приверженцев.

Работу режима USB-хост пока трудно назвать идеальной, но пользователям чаще требуются нехитрые операции, да и список поддерживаемых устройств постоянно растёт.

Источник

Оцените статью