- Работа с устройствами USB в Android
- Права доступа
- Принтеры
- Преобразователи USB-Serial
- Резюме
- USB устройства для Android
- Android Open Accessory
- Презентация Android Open Accessory API and Development Kit (ADK) на Google I/O 2011
- Подключаем к Android устройствам практически любую периферию
- Что такое и как работает функция OTG на устройствах Android
- Что это такое?
- Какие устройства можно подключать через OTG?
- Какие смартфоны поддерживают технологию?
- Как проверить, поддерживает ли мой смартфон эту функцию?
Работа с устройствами USB в Android
В недавней статье на Geektimes в комментариях возник вопрос о поддержке в ОС Android периферии, подключенной к шине USB. Действительно, большинство вендорского ПО, к примеру, для работы с принтерами и МФУ, поддерживает только подключение по сети. Однако это не означает, что в самой ОС Android нет такой возможности — это означает лишь то, что большинство устройств не имеют полноценного USB хоста, и далеко не все имеют поддержку OTG. По сети же могут работать абсолютно все без исключения.
Большинство устройств на Android при наличии порта OTG поддерживают на уровне системы (ядра Linux или стандартных компонентов Android) следующие классы устройств:
- Устройства ввода — клавиатуры, мыши, джойстики (HID)
- Накопители (Mass Storage)
Несколько реже:
- Сотовые модемы
- Сетевые адаптеры
- Вебкамеры
Хабы поддерживаются при наличии полноценных хост-портов, но не поддерживаются на портах OTG.
Подробнее список устройств, поддерживаемых на уровне ядра Linux, можно получить в sysfs:
$ ls /sys/bus/usb/drivers
Если же модуль в принципе доступен в исходниках ядра Linux, но не включен в Android — не стоит рассчитывать на то, что его получится собрать и расставить на все целевые системы.
Однако, начиная с Android 3.1 (API 12), в системе содержатся средства, достаточные для поддержки на уровне приложения любой USB периферии. Данные средства описаны в разделе USB Host руководства по Android API. Здесь же я хочу привести примеры реальной работы с некоторыми видами устройств.
Права доступа
Как и для прочих действий, Android требует, чтобы приложение получило разрешение на доступ к USB периферии. Существует 2 способа получить такое разрешение:
- Задекларировать список устройств в AndroidManifest
- Явно показать пользователю диалог “разрешить”
Поскольку для моих задач лишние вопросы к пользователю были нежелательны, я использовал первый способ.
Итак, нам необходимо добавить в манифест следующее:
А в res/xml/device_filter.xml вписать следующее:
Отмечу, что хотя общепринято указывать VID:PID в 16-ричной системе счисления, здесь они должны быть указаны в десятичной. В документации заявляется, что возможно указание только класса, без VID и PID, но у меня это не стало работать.
Принтеры
На примере принтера я покажу, как непосредственно использовать API android.hardware.usb. На уровне передачи данных все принтеры поддерживают стандартый класс USB устройств:
Класс предельно простой. В рамках этого класса устройство должно поддерживать:
- Обязательный bulk out endpoind для отправки данных на принтер
- Опциональный bulk in endpoind для получения статуса принтера
- 3 управляющих запроса
Код, приведенный ниже, предоставляет функциональность, аналогичную устройству /dev/usb/lp в Linux. Далее нам нужен фильтр, преобразующий исходный документ в пакет данных, понятный конкретной модели принтера. Но это тема иной статьи. Как один из вариантов — можно собрать ghostscript с помощью NDK.
Для работы с устройством нам в первую очередь нужно:
1. Найти устройство. В примере для простоты я ищу первый попавшийся:
2. Получить endpoint’ы:
3. Непосредсвенно открыть устройство:
4. После этого мы можем читать и писать в устройство:
5. По завершении работы — закрыть устройство:
Преобразователи USB-Serial
В отличие от притеров, преобразователи USB-Serial гораздо менее стандартизированы. Существует несколько распространенных чипов, для которых существенно отличается установка параметров последовательного порта — битрейта, чётности и проч. К счастью, есть библиотека github.com/mik3y/usb-serial-for-android, поддерживающая практически все существующие чипы. Библиотека полностью скрывает USB API, сводя все необходимые действия к минимуму вызовов с минимумом параметров.
1. Найти и открыть устройство:
2. Установить параметры последовательного порта:
3. Читать и писать в порт:
4. По завершении работы — закрыть порт:
Резюме
Надеюсь, что мне удалось показать, что работа с USB периферией достаточно проста и логична. Безусловно, реализация протоколов некоторых конкретных устройств не блещет простотой — но это проявится в любой системе в одинаковой степени.
Все приведенные примеры я взял из реального проекта, лишь исключил очевидные проверки, оставив только ключевые строки.
Источник
USB устройства для Android
Одной из самых интересных новинок, представленных на Google I/O 2011, можно считать анонс полноценной работы Android устройств с USB.
Новый Android поддерживает два USB режима — хост (Host mode) и устройство (Accessory mode).
С хост режимом все просто и понятно — это подключение к Android устройству клавиатуры, мыши, цифровой камеры, внешних накопителей и т.д.
А вот с режимом USB устройства все намного интереснее. В этом режиме внешнее USB оборудование выступает в роли хоста для Android устройства и таким внешним оборудованием могут выступать док станции, роботизированные контроллеры, диагностическое и музыкальное оборудование, спортивные тренажеры, кардридеры и многое другое. USB оборудование для Android должно поддерживать протокол (Android accessory communication protocol)
Наглядно понять разницу между двумя режимами можно по схеме:
Когда Android устройство выступает в роли USB хоста, то оно питает шину. Когда же Android устройство находится в режиме USB устройства, то шину питает подключенное к нему оборудование.
Режимы USB хоста и USB устройства поддерживаются начиная с Android 3.1 (API level 12). Режим USB устройства также портирован в Android 2.3.4 (API level 10) в виде библиотеки, поддерживающей большой набор устройств. Производители оборудования сами решают добавить им в системный образ эту библиотеку или нет.
Android Open Accessory
Для разработки USB оборудования для Android предлагается Android Open Accessory Development Kit (ADK), который является имплементацией USB оборудования для Android и включает в себя макет на основе Arduino, код прошивки для Accessory mode и Android приложение для взаимодействия с оборудованием.
В роли аппаратного средства для разработки выступает набор RT-ADK&RT-ADS, который нам пытаются продать за
390$
Хотя это это всего лишь Arduino Mega2560, Circuits@Home USB Host Shield интегрированный в плату, и набор датчиков и элементов управления. Такой набор обойдется до 100$.
Кроме различных датчиков и индикаторов для Arduino существует большое количество плат расширения (Arduino shield), способных превратить USB устройство, например, в робота.
Презентация Android Open Accessory API and Development Kit (ADK) на Google I/O 2011
Android Open Accessory должен способствовать появлению большого числа разных аксессуаров для Android устройств.
В будущем планируется что Android Open Accessory кроме USB интерфейса будет также поддерживать и Bluetooth.
Источник
Подключаем к Android устройствам практически любую периферию
Наверняка не все знают, что к Android устройствам можно подключать обычную «компьютерную» периферию. Об этом нам рассказал Валентин Колягин, программист занимающийся разработкой Android систем. Это довольно удобно и в некоторых случаях позволяет обойтись без стационарного ПК. К примеру, можно подключить флэшку, клавиатуру или мышь. Подключение флэшки к устройству без слота для карт памяти даст нам дополнительный объем свободного места под файлы. Такой «трюк» можно использовать для просмотра фильмов на устройстве или просто для копирования документов на работе. Если у вас телефон с большим экраном или планшет, то гораздо удобнее будет вести переписку, набирать документы или просто «серфить» в сети интернет с помощью полноразмерной клавиатуры и мышки.
Перечисленную выше периферию можно подключить практически к любому Android устройству, который поддерживает USB Host через специальный переходник — он называется USB OTG. Однако, чтобы подключить другую периферию (джойстик, Wi-Fi адаптер, 3G модем, HDD диск) нужно производить уже некоторые манипуляции – иногда программные, а иногда и «железные».
Активный USB OTG
Активный OTG это кабель с дополнительным питанием. Некоторые модели телефонов, например, телефоны Motorola, которые поддерживают Lapdock, требуют для подключения любой периферии именно активный OTG. Другие же нуждаются в нем только для подключения особо «прожорливых» устройств, таких как например жесткий диск.
USB OTG с дополнительным питанием в продаже довольно трудно найти. Гораздо проще либо самостоятельно переделать обычный переходник, либо купить активный USB хаб.
Если же вы решите подключить джойстик к Android устройству старой версии (4.0 или 4.1), то вам придется устанавливать драйвера для него. А для этого вам нужно будет найти исходники ядра, и перекомпилировать его, предварительно поставив галочки в конфигах напротив поддержки игровых манипуляторов. Хотя для специалиста по созданию мобильного ПО это рядовая задача, сделать неподготовленному человеку это довольно сложно. Данная процедура должна выполняться в Linux среде, вы должны установить целый пакет необходимых библиотек, а также уметь исправлять ошибки компилятора по мере их появления. Поэтому самым верным шагом будет найти уже собранное кем-то ядро с уже включенной поддержкой геймпадов.
С Wi-Fi адаптерами дела обстоят почти также, но помимо перекомпиляции ядра, для некоторых моделей адаптеров вам нужно будет дополнительно найти прошивку. А когда вы пересоберете ядро и найдете все необходимые файлы, то управлять внешним Wi-Fi адаптером через привычный интерфейс у вас никак не получится – придется обходиться эмулятором терминала. Лично я потратил около двух дней чтобы заставить работать внешний адаптер на своем Motorola Atrix.
Хоть Android и считается довольно удобной операционной системой, но несколько более неординарные задачи выполняются на этой ОС довольно сложно. Особенно это касается поддержки оборудования, заранее не предусмотренного разработчиком. Если вы решите подключить к своему телефону тот же внешний Wi-Fi адаптер, то готовьтесь к тому, что вам придется изрядно повозиться и перечитать довольно много «мануалов».
А вы знали, что у нас есть Instagram и Telegram?
Подписывайтесь, если вы ценитель красивых фото и интересных историй!
Источник
Что такое и как работает функция OTG на устройствах Android
С каждым годом возможности смартфонов и планшетов Андроид превышают своих предшественников в несколько раз, предоставляя пользователям очень интересные и полезные функции. Теперь вы можете подключить к своему мобильному гаджету разные устройства, как к компьютеру. Такую возможность предоставляет технология OTG (One-The-Go).
Из статьи вы узнаете
Что это такое?
USB OTG — это переходник для вашего смартфона, который подключается к нему через Mini или Micro USB, а с другой стороны расположен USB-порт, в который можно вставлять не только флешки, но и другие типы гаджетов. Например, картридеры, внешние диски, игровые джойстики, клавиатуры и многие другие технические новинки, окружающие нас в повседневной жизни. Таким образом, функция OTG на Android значительно расширяет возможности смартфона, предоставляя пользователю больший спектр применения своего аппарата.
Также часто появляются вопросы о том, почему разработчики девайсов не встраивают отдельный USB-порт, чтобы не использовать сторонние переходники.
- Во-первых, это лишнее место на корпусе телефона. Практически все компании, занимающиеся производством техники, стараются уменьшать толщину корпуса и это огромное преимущество перед конкурентами, поэтому ни один производитель не пойдет на такой шаг.
- Во-вторых, такой порт будет активно потреблять дополнительную энергию, а это сильно бьет по общему расходу заряда батареи.
- В-третьих, на продаже аксессуаров зарабатывают огромные деньги партнеры разработчиков. То есть, в Андроид добавили поддержку USB OTG, побудили интерес к своей технологии, а партнеры предоставили на рынке те самые переходники, которые необходимы для работы. В итоге выигрывают все, даже потребитель!
Какие устройства можно подключать через OTG?
Благодаря этой технологии к телефону могут подключаться практически любые типы устройств. Но это только в теории. На практике же мы видим иную картину. Здесь многое зависит от разработчиков оболочек для конкретной версии операционной системы Андроид, от аппаратов, которые вы подключаете, от совместимости.
Без проблем можно подключать USB-накопители до 32 Гб. Можно попробовать и больше, например, на 64 Гб, но они работают не везде.
Также есть возможность подключения отдельных внешних накопителей, но здесь стоит учесть тот факт, что многим моделям попросту не хватит мощности питания от вашего телефона. Если есть возможность подключить питание через обычную розетку в дополнительном входе, то тогда проблем с передачей и корректным чтением списка файлов не возникнет.
Можно подключать компьютерную мышь, клавиатуру. Это очень полезно в тех случаях, когда пользователю необходимо что-то напечатать, а стандартная виртуальная клавиатура его не устраивает.
Если вы заядлый геймер, то сможете при помощи OTG в телефоне подключить и геймпад. Только учтите, что не все игры из Google Play поддерживают такую технологию и подобные устройства. Здесь многое зависит от самого разработчика приложения.
Присутствует возможность передачи контактов и сообщений через данную технологию, если соединить два устройства через один кабель. Еще можно присоединить лампу, работающую от USB-порта.
Если же у вас плохая фронтальная камера на смартфоне, то просто подключите внешнюю!
Эта технология удобна для фотографов, которые могут через картридер или USB просмотреть фотографии на своем устройстве, например, планшете или смартфоне. Даже можно подключать адаптеры для интернета, чтобы подключаться через оптоволокно!
Но и это еще не все! Нужно срочно распечатать документы? Подключите принтер! Сюда же можно добавить еще и монитор или телевизор.
В итоге пользователь получает полноценное устройство, с помощью которого можно управлять другими девайсами. А если учесть, что мощность некоторых телефонных аппаратов превосходит часть бюджетных компьютеров старых поколений, то в будущем и вовсе можно ожидать полной реализации всей работы с ПК на мобильном устройстве.
Какие смартфоны поддерживают технологию?
Андроид, начиная с версии 2.3, автоматически поддерживает эту технологию. Но здесь важно учесть, что многое зависит от оболочки производителя, который предоставляет смартфон. Android — это разработка Google, предоставляемая всем компаниям, где уже каждая компания дорабатывает ее на свой лад и может, как добавить что-то новое, так и удалить.
Некоторые производители убирают эту опцию лишь затем, чтобы сэкономить заряд батареи, повысив в целом его эффективность. Но на такие шаги идут только ради бюджетных моделей. Средний и высокий классы смартфонов 100% обладают такой технологией и поддерживают большой ассортимент подключаемых устройств.
Как проверить, поддерживает ли мой смартфон эту функцию?
Узнать, есть ли у меня поддержка OTG, можно разными способами.
Источник