Внешние устройства для андроид

Работа с устройствами 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 периферией достаточно проста и логична. Безусловно, реализация протоколов некоторых конкретных устройств не блещет простотой — но это проявится в любой системе в одинаковой степени.

Все приведенные примеры я взял из реального проекта, лишь исключил очевидные проверки, оставив только ключевые строки.

Источник

Wi-Fi адаптер через OTG

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

Идея реализации задумки с помощью внешнего беспроводного Wi-Fi адаптера или «свистка», поддерживающего желанный режим монитора, рушилась десятки раз из-за новых и новых ошибок и потери веры в то, что это вообще возможно, но переросла в данную статью.

Читайте также:  Add permissions android app

Итак, как подключить внешний Wi-Fi адаптер к устройству на Android или бег с препятствиями на дистанции «вставил — netcfg wlan0 up»:

Должно быть в наличии:

  1. Телефон на Android
  2. Поддержка OTG и сам OTG
  3. Terminal Emulator
  4. ROOT
  5. Исходники ядра

FAQ — структура выглядит так:

  • Внешний Wi-Fi адаптер («свисток»)
  • Его firmware
  • Linux дистрибутив
  • ADB (не обязательно, но так удобнее)
  • Мой случай:

    1. Samsung GT-P5100 Galaxy Tab 2 10.1, Андроид 4.2.2
    2. OTG «30-pin — USB»
    3. Terminal Emulator for Android
    4. ROOT
    5. Исходники стокового ядра 3.0.31-1919150 с сайта Самсунг
    6. Адаптер TP-LINK TL-WN722N на чипсете AR9271
    7. ath9k_htc/htc_9271.fw
    8. Дистрибутив Ubuntu 15.04 в VMware
    9. android-tools-adb

    Начну. Но попрошу учесть, что далее все рассматривается для вышеперечисленного набора и алгоритм, скорее всего, не является универсальным, но отклонения незначительны.

    I. Старт

    Первым делом необходимо добыть фирмварь вашего адаптера. Вставляю адаптер в компьютер и выполняю команду dmesg . Нахожу:

    Где слово правее слова driver — искомая информация. У меня это — ath9k_htc. Гуглю для него firmware. Качаю. Закидываю .fw-файл на телефон в /system/etc/firmware

    Затем устанавливаю ADB:

    apt-get install android-tools-adb

    Третьим этапом качаю тулчейн (компилятор под ARM) отсюда. Там большой архив, мне нужна лишь папка android-platform_prebuilt-android-sdk-adt_r20-0-ga4062cc.zip\android-platform_prebuilt-a4062cc\linux-x86\toolchain\arm-eabi-4.4.3, которую я распаковываю в произвольное место.

    II. Разгон

    Для начала пишу терминале:

    Затем перехожу в терминале в каталог с исходниками ядра, загруженными ранее, пишу

    make help и получаю тучу информации, среди которой нужно найти нечто, заканчивающееся на _defconfig, у меня это:

    И в завершении запускаю графическую конфигурацию ядра:

    Появляется вот такое окно:

    Продвигаюсь по маршрутам:

      Networking support → Wireless
      Спускаюсь к Generic IEEE 802.11 Networking stack (mac80211) и нажимаю на пробел, наблюдая появление значка М перед этим пунктом

    Device Drivers -> Network device support → Wireless LAN
    Ставлю М у своего чипсета, в моем случае — Atheros Wireless Cards
    Затем перехожу в сам этот раздел и внутри отмечаю все тем же пробелом и знаком M нужный мне пункт.

    Сохраняю. Возвращаюсь в терминал, а если вы его закрыли, то в и каталог с исходниками тоже, и выполняю сначала make modules_prepare , а следом просто make . Результат потребует ожидания. Мой итоговый набор:

    Потребуются модули (.ko-файлы), включающие слово ath и mac80211.ko. Переношу их на телефон.

    Можно использовать adb, работая через компьютер, а можно не использовать и работать через терминал телефона, печатая команды пальцами по экрану. Я выбрал adb.

    Напомню, как он работает. Подключаю телефон через USB (отладка, естественно, включена) и выполняю:

    adb start-server
    adb shell
    su

    Я в телефоне и под рутом.

    Смотрю, какие модули уже есть командой lsmod и выгружаю их все, если это возможно, командой rmmod имямодуля

    Затем перехожу в каталог с вышеперечисленными модулями:

    cd /sdcard/ваш путь/

    Можно убедиться в их наличии командой ls .

    Загружаю их командой insmod имямодуля в такой и только такой последовательности (иначе просто не загрузится, выдавая ошибку):

    ath.ko
    ath9k_hw.ko
    ath9k_common.ko
    mac80211.ko
    ath9k_htc.ko

    III. Препятствия

    В этом и вся соль, без которой статья была бы слишком простой.

    1. Версии

    Естественно, первая ошибка возникает на первом этапе.

    Смотрю, что скажет об этом буфер сообщений ядра, выполнив команду dmesg :

    Не совпадают версии. 3.0.31 не есть 3.0.31-1919150.

    Открываю тот самый Makefile в исходниках ядра и в самом верху файла нахожу:

    VERSION = 3
    PATCHLEVEL = 0
    SUBLEVEL = 31
    EXTRAVERSION =
    NAME = Sneaky Weasel

    VERSION = 3
    PATCHLEVEL = 0
    SUBLEVEL = 31
    EXTRAVERSION = -1919150
    NAME = Sneaky Weasel

    И сохраняю.
    Заключительный этап пройдет в каталоге /include/config, где в файле kernel.release я поменяю 3.0.31 на 3.0.31-1919150
    Снова make modules_prepare , make и далее по предыдущему пункту.

    2. ewma

    Загружая mac80211.ko снова имею ошибку, о которой dmesg скажет следующее:

    Чудом прочитав на одном из англоязычных форумов опасное, но единственное в интернете, «решение», я перехожу в /net/mac80211/ и в файлах rx.c и sta_info.c и просто удаляю [либо комментирую (//)] строки ewma_add(&sta->avg_signal, -status->signal); и ewma_init(&sta->avg_signal, 1024, 8); соответственно.

    Опять перекомпилирую модули и двигаюсь дальше.

    3. Светодиод

    При загрузке ath9k_htc.ko и mac80211.ko очередные ошибки, у mac80211.ko это:

    А у ath9k_htc.ko это:

    Если ieee80211_-ошибки от ath9k_htc.ko это потому что я пытаюсь его загрузить до mac80211.ko, то led_-ошибки от обоих модулей от того, что телефон не понимает, что делать со светодиодом на моем адаптере. Тут два варианта развития событий.

    Читайте также:  Astral battle для андроид

    В первом просто убирается в графической конфигурации ядра значок [*] напротив
    Networking support → Wireless → Enable LED triggers и Device Drivers → LED Support.

    А во втором этот самый значок заморожен и снять его нельзя. Это значит, что при выборе моего адаптера, автоматически выбирается «поддержка» светодиода, убрать которую нельзя. Конечно же, это мой случай:

    Кнопка помощи по Device Drivers → LED Support выводит следующую информацию по разделу:


    config ATH9K_HTC
    tristate «Atheros HTC based wireless cards support»
    depends on USB && MAC80211
    select ATH9K_HW
    select MAC80211_LEDS
    select LEDS_CLASS
    select NEW_LEDS
    select ATH9K_COMMON
    .


    config ATH9K_HTC
    tristate «Atheros HTC based wireless cards support»
    depends on USB && MAC80211
    select ATH9K_HW
    select ATH9K_COMMON
    .

    и сохраняю. Теперь можно снимать галочки:

    Здесь и вовсе исчез пункт:

    Опять и снова перекомпиляция, новые модули и т.п.

    Вуаля. Все модули загружены. Выключаю Wi-Fi на телефоне и подключаю адаптер. Но светодиод на нем, как вы уже догадались, работать не будет. Оно и не нужно.

    4. Версия firmware


    [ 7582.477874] C0 [ khubd] ath9k_htc 1-1:1.0: ath9k_htc: Please upgrade to FW version 1.3
    .

    Просто качаем другой фирмварь, но уже требуемой версии, и кладем его вместо прошлого.

    IV. Финиш

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

    Ну а как и зачем зачастую используется режим монитора, вы и так все знаете. Спасибо за внимание!

    Источник

    Выбор есть: 9 аксессуаров, которые превратят смартфон в полезный прибор

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

    USB-эндоскопы

    Практичный аксессуар поможет заглянуть внутрь кондиционера, не разбирая его, исследовать детали двигателя авто и «посетить» множество других труднодоступных мест. Мини-эндоскоп повысит шансы на успешные поиски упавшего в раковину кольца или исчезнувшей за шкафом гайки. Компактная камера на гибком проводе длиной до 5 метров будет передавать видеоотчёт на ваш смартфон в режиме реального времени. Для большего удобства устройства оснащаются регулируемой подсветкой, а благодаря дополнительным насадкам при необходимости можно подцепить какую-нибудь деталь и вытащить её.

    Мини-эндоскоп поддерживает шесть режимов подсветки — видеосъёмку в разрешении 640×480 пикселей можно вести в полной темноте. На проводе размещён пульт с кнопкой фотосъёмки и колесом регулировки подсветки. USB-эндоскоп имеет стандарт защиты IP67, а потому «прогулки» по трубам ему не страшны. Благодаря диаметру головки камеры 7 мм и фокусному расстоянию 5 см исследовать можно даже самые труднодоступные пространства. В комплекте несколько насадок: с магнитом и крючком, чтобы было проще подцепить и достать пропажу, и насадка-зеркало для лучшего обзора. Гаджет работает в паре с приложением и доступен в нескольких версиях: с длиной провода 1 метр, 1,5 метра и 2 метра.

    Второй вариант USB-эндоскопа с проводом до 5 метров предлагает большую свободу действий. Модель с фокусным расстоянием от 3 до 8 см ведёт видео-, фото- и звукозапись. Диаметр головки камеры составляет 7 мм, так что эндоскоп прошмыгнёт практически куда угодно: с ним можно заглянуть под плинтус или даже проверить «апартаменты» аквариумных рыбок — гаджет имеет стандарт защиты IP67. Как и предыдущая модель, эндоскоп включает шесть режимов светодиодной подсветки и небольшой пульт управления, а в комплект поставки входят насадки с крючком, магнитом и зеркалом. Отснятые материалы можно сохранить и в любой момент пересмотреть их.

    OBD-сканеры

    С этим практичным аксессуаром диагностику электроники авто можно проводить самому. Адаптер работает в паре со смартфоном, и последний берёт на себя роль компьютера. Гаджет не только выявляет ошибки и расшифровывает их, но и помогает стирать сообщения о них. Таким образом, недорогое устройство позволяет экономить не только время и нервы автовладельца, но и в некоторых случаях — деньги на услугах автосервисов. Узнать о совместимости адаптера с моделью вашего «железного коня» можно в описании товара, и в случае сомнений уточнить у продавца.

    Автосканер Neaxpeak NX102 с версией прошивки 1.5 поддерживает 10 протоколов и работает вместе с мобильными приложениями Torque Pro с поддержкой русского языка и DashCommand с поддержкой английского. Всё, что необходимо для бортовой диагностики, так это подключить адаптер к 16-контактному разъёму и установить соединение по Bluetooth. Такой прибор пригодится не только для сброса ошибок, но и для наглядной демонстрации показаний датчиков, которые на приборной панели не отображаются.

    Читайте также:  Android studio wireless debugging

    OBD-сканер Foxwell с чипом PIC18F25K80 получил версию прошивки 1.5 и поддержку Bluetooth. Работает устройство в паре со смартфонами на Android с приложением Torque Pro с поддержкой русского языка. Для устройств на iOS по ссылке предлагается приобрести Wi-Fi-версию. Помимо чтения, расшифровки и удаления ошибок, в режиме реального времени он определит и такие параметры, как обороты и нагрузка двигателя, состояние топливной системы и расход горючего, абсолютное давление воздуха и многое другое. От предыдущего адаптера модель отличается формой, расцветкой и большими габаритами — 8,5 x 4,5 x 2,5 см.

    Беспроводные микроскопы

    Преимущество беспроводных микроскопов заключается в их компактности и небольшом весе — с карманным устройством работать можно где угодно. Мобильные гаджеты не требуют установки для того, чтобы исследовать объекты, и предлагают настраиваемую яркую подсветку для более комфортного использования. Портативный вариант стоит меньше крупногабаритных собратьев, но также эффективен в работе: при пайке, проверке ювелирных изделий, денежных купюр или текстиля. Ещё такой гаджет понравится и просто любознательным пользователям.

    Эта модель микроскопа работает в связке с устройствами на iOS и Android посредством приложения с поддержкой английского языка. Гаджет с увеличением до 1 000x передаёт на смартфон видео в разрешение 640×480 пикселей с частотой 20 кадров в секунду. Внутри установлен Wi-Fi модуль и аккумулятор ёмкостью 750 мАч, который обеспечит до 2,5 часов работы. За удобное использование отвечает регулируемая подсветка с восемью встроенными диодами, рабочий диапазон до 10 м и фокусное расстояние 0 мм

    40 мм. Габариты составляют 142 x 37 мм, а вес — 100 граммов.

    В комплект беспроводного микроскопа входит подставка размерами 120×160 мм, на которой можно зафиксировать объект исследования. Камера с увеличением до 1 000 раз получила объектив с диафрагмой f/4,5 и углом обзора 16 градусов, поэтому рассмотреть в подробностях удастся всё. Запись видео ведётся в разрешении 720p. Аккумулятор ёмкостью 800 мАч обеспечивает до 3 часов работы, а регулируемая подсветка из восьми встроенных диодов делает эту работу более комфортной. Габариты микроскопа составляют 130×32 мм.

    IR-модули

    Если ваш смартфон не оснащён ИК-передатчиком, то его можно добавить, прикупив внешний модуль под аудиоразъём 3,5 мм. Полезный аксессуар с поддержкой приёма и передачи сигнала превратит смартфон в универсальный пульт. С его помощью можно управлять телевизорами, кондиционерами, ТВ-приставками, фотоаппаратами, проекторами и другой техникой.

    Внешний ИК-модуль работает на дистанции до 5-8 м: можно с комфортом расположиться на диване перед телевизором и оттуда же управлять ТВ-приставкой. Компактный аксессуар совместим со смартфонами на Android и iOS, оснащённых миниджеком. Работает модуль в паре с мобильным приложением Tasogo с поддержкой английского языка, которое «знает» множество различных производителей техники. Для того чтобы превратить смартфон в универсальный пульт ДУ, необходимо подключить внешний модуль и в настройках приложения выбрать модель ТВ, бокса или фотоаппарата. Модуль можно «натренировать» на любую технику, используя оригинальный пульт. Для этого достаточно их «познакомить», направив друг на друга.

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

    Алкотестер

    Алкотестер — полезная вещица для автовладельцев. Доступное устройство габаритами не больше коробка спичек убережёт от проблем с автоинспекцией, а ещё показания независимого электронного «эксперта» могут спасти жизнь.

    Универсальный алкотестер от Ipega не нуждается в источнике питания, поскольку работает от смартфона. Он оснащён экраном, на котором отображаются показатели в двух единицах измерения: г/л (промилле) и % ВАС. Тестирование осуществляется бесконтактным способом, поэтому не придётся докупать мундштуки или стерилизовать их. Экран алкотестера получил ещё и световую индикацию, которая станет дополнительной подсказкой: зелёная — опьянения нет, концентрация алкоголя 0,00 промилле; жёлтая — небольшое опьянение, концентрация алкоголя от 0,2 до 0,5 промилле (0,02%-0,05% ВАС); красная — опьянение достаточно сильное, концентрация алкоголя более 0,8 промилле (0,08% ВАС).

    Хватает ли вам того, что может предложить смартфон? Делитесь в комментариях, как бы вы расширили функциональность гаджета.

    Источник

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