Программирование USB в Android. Используем для связи интерфейс USB::Журнал СА 6.2014
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Подписка
Архив номеров
Где купить
Наука и технологии
Авторам
Рекламодателям
Контакты
   

  Опросы
  Статьи

День сисадмина  

Учите матчасть! Или как стать системным администратором

Лето – время не только отпусков, но и хорошая возможность определиться с профессией

 Читать далее...

День сисадмина  

Живой айтишник – это всегда движение. Остановка смерти подобна

Наши авторы рассказывают о своем опыте и дают советы начинающим системным администраторам.

 Читать далее...

Виртуализация  

Рынок решений для виртуализации

По данным «Обзора российского рынка инфраструктурного ПО и перспектив его развития», сделанного

 Читать далее...

Книжная полка  

Как стать креативным и востребованным

Издательский дом «Питер» предлагает новинки компьютерной литературы, а также книги по бизнесу

 Читать далее...

Книжная полка  

От создания сайтов до разработки и реализации API

В издательстве «БХВ» недавно вышли книги, которые будут интересны системным администраторам, создателям

 Читать далее...

Разбор полетов  

Ошибок опыт трудный

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

 Читать далее...

Принципы проектирования  

Dependency Inversion Principle. Принцип инверсии зависимостей в разработке

Мы подошли к последнему принципу проектирования приложений из серии SOLID – Dependency

 Читать далее...

Рынок труда  

Вакансия: Администратор 1С

Администратор 1С – это специалист, который необходим любой организации, где установлены программы

 Читать далее...

Книжная полка  

Книги для профессионалов, студентов и пользователей

Книги издательства «БХВ» вышли книги для тех, кто хочет овладеть самыми востребованными

 Читать далее...

Принципы проектирования  

Interface Segregation Principle. Принцип разделения интерфейсов в проектировании приложений

Эта статья из серии «SOLID» посвящена четвертому принципу проектирования приложений – Interface

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 10696
Комментарии: 0
Потоковая обработка данных

 Читать далее...

19.03.2018г.
Просмотров: 8944
Комментарии: 0
Релевантный поиск с использованием Elasticsearch и Solr

 Читать далее...

19.03.2018г.
Просмотров: 8979
Комментарии: 0
Конкурентное программирование на SCALA

 Читать далее...

19.03.2018г.
Просмотров: 5668
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 6358
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

12.03.2018г.
Просмотров: 3663
Комментарии: 0
Глубокое обучение с точки зрения практика

 Читать далее...

12.03.2018г.
Просмотров: 2655
Комментарии: 0
Изучаем pandas

 Читать далее...

12.03.2018г.
Просмотров: 3466
Комментарии: 0
Программирование на языке Rust (Цветное издание)

 Читать далее...

19.12.2017г.
Просмотров: 3458
Комментарии: 0
Глубокое обучение

 Читать далее...

19.12.2017г.
Просмотров: 5951
Комментарии: 0
Анализ социальных медиа на Python

 Читать далее...

Друзья сайта  

 Программирование USB в Android. Используем для связи интерфейс USB

Архив номеров / 2014 / Выпуск №6 (139) / Программирование USB в Android. Используем для связи интерфейс USB

Рубрика: Разработка /  Инструменты

Сергей Ильичев СЕРГЕЙ ИЛЬИЧЕВ, ЧОУ «ТПКГ», г. Тула, системный администратор и учитель информатики, sergil68@mail.ru

Программирование USB в Android
Используем для связи интерфейс USB

Попытаемся разобраться в том, как организовать обмен информацией между различными (в том числе и самостоятельно разработанными) электронными устройствами и аппаратами (планшетами или телефонами), работающими под управлением операционной системы (ОС) Android с использованием USB

Для того чтобы не запутать читателя, в статье первые будут называться просто «устройства», а вторые – «мобильные устройства».

Данная статья адресована прежде всего тем, у кого есть какое-либо электронное устройство (разработанное самостоятельно или кем-то еще), протокол обмена данными с которым хорошо известен (например, уже есть программа, работающая с этим устройством в ОС Windows/Linux), и хотелось бы иметь программу, работающую с ним еще и в Android.

USB и Android

Уже сравнительно давно, начиная с Android Honeycomb (версия 3.1), в ОС от Google появилась возможность использовать мобильное устройство в режиме хоста (Host mode), в котором оно питает шину и может определять подключенные устройства с помощью прикладного программного интерфейса (API) на языке Java (см. [1] и рис. 1).

Рисунок 1. Иллюстрация работы Android-устройства в режимах USB Host и Accessory (рисунок с сайта http://developer.android.com)

Рисунок 1. Иллюстрация работы Android-устройства в режимах USB Host и Accessory (рисунок с сайта http://developer.android.com)

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

USB Host API появился в Android в середине 2011 года, однако информации по его использованию на русском языке в сети до сих пор очень мало. Интерес к этому вопросу подогревает наличие на рынке мобильных устройств, на которых работает этот API, стоимостью менее 3000 руб. (см., например, тестирование в [2]).

Отметим, что USB – не единственный способ связи с тем же самодельным устройством. Android позволяет использовать еще Bluetooth, NFC, Wi-Fi P2P, SIP, а также стандартное сетевое подключение [3]. Так что в арсенале разработчика достаточно возможностей для осуществления своих самых смелых замыслов.

Другим распространенным вариантом связи с различными устройствами до сих пор является использование переходника USB-COM. Материал в сети по применению переходника USB-COM в Android есть – см., например, [4]. Популярность такого подключения обусловлена наличием большого количества уже разработанных с использованием различных микроконтроллеров устройств, связь с которыми осуществляется с помощью COM-порта (последовательного порта), что 10 лет назад являлось почти стандартным способом передать данные от компьютера к самодельной железке.

В сравнении с COM-портом использование USB позволяет существенно повысить скорость передачи данных и сделать этот процесс удобным для пользователя. Cкорость передачи, которая даже в случае низкоскоростных устройств (клавиатуры, мыши, джойстики) составляет 10-1500 Кбит/c, простота и невысокая стоимость кабельной системы и подключений, самоидентификация устройств с автоматическим конфигурированием, скрытие подробностей электрического подключения от конечного пользователя (плюс возможность отключения кабеля без выключения устройств), контроль ошибок и их восстановление на уровне протокола – вот неоспоримые преимущества данной технологии (см. [4], с. 12).

Вообще, говоря об использовании USB для передачи данных, не лишним будет упомянуть книгу П.Агурова «Интерфейс USB» [5].

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

Нельзя не указать и первоисточник данных по этому вопросу – сайт некоммерческой организации USB IF (USB Implementers Forum), занимающейся разработкой спецификаций этого интерфейса [6], правда, данный материал на английском языке. Однако именно там вы найдете исчерпывающие сведения об устройстве интерфейса USB. Есть неплохой перевод частей спецификации [7]. Интересующимся программными решениями со стороны микроконтроллера также можно посмотреть ссылку [8].

Немного о классах USB-устройств

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

Привести примеры программ связи для всех типов USB-устройств в рамках одной статьи по понятным причинам невозможно (начальные сведения о программировании различных типов устройств можно почерпнуть в [5]). Однако мы ограничимся тем, что приведем код, реализующий поиск нужного устройства и доступ к его контрольным точкам для обмена информацией.

Также разберем отправку данных на примере одного из типов USB-устройств, а именно класса устройств HID (human interface device – класс устройств для взаимодействия с человеком). Этот класс включает в себя «медленные» устройства, такие как клавиатура, мышь, джойстик, и примеров его реализации с помощью различных микроконтроллеров в сети достаточно (есть, например, и в [8]).

Почему именно класс HID так полюбился изготовителям различных самодельных устройств? Процитируем Википедию [9]: «Помимо детальных спецификаций классических устройств ввода (типа клавиатур и мышек), стандарт HID определяет особый класс устройств без детальных спецификаций. Этот класс именуется USB HID Consumer Control и представляет собой, по сути, нерегламентированный канал связи с устройством.

При этом устройство пользуется теми же стандартными для операционной системы драйверами, что и мышка с клавиатурой. Таким образом, можно создать USB-устройство, которое не требует создания и инсталляции специальных драйверов в большинстве распространенных компьютерных операционных систем». Остается добавить только, что работает эта спецификация и в ОС Android (не исключая прошивок CyanogenMod).

Одним из вариантов обмена данными с HID-устройством является передача по прерываниям (interrupt transfer), которая используется в том случае, когда необходимо передать пакеты данных небольшого размера (максимальный размер пакета зависит от скорости передачи и составляет от 64 до 1024 байт) через заданный временной интервал. Пакет для передачи называется репортом (англ. – report, см. [5], с. 71, 95).

Такой длины репорта обычно вполне хватает для обмена информацией с самодельным устройством. Например, 64 байта информации в одном пакете – это довольно много для контроллера, ведь для передачи состояний светодиода или простейшего датчика достаточно 1 бита информации.

Необходимые инструменты

Итак, нам понадобятся планшет или телефон с Android-версией не ниже 3.1. Здесь необходимо отметить, что вышеуказанный USB Host API полностью реализован не на всех мобильных устройствах (об этом упоминается и на сайтеdeveloper.android.com [1].

В некоторых планшетах/телефонах разъем USB используется только для зарядки и связи с персональным компьютером. Еще раз отправлю читателя к списку мобильных устройств, пригодных или непригодных для наших опытов [2].

Понадобятся также какое-либо USB-устройство (для первых опытов будет достаточно обычного USB-флеш-накопителя), переходник OTG (On-The-Go – см. рис. 2) и/или шнур USB для связи с устройством. В Википедии по поводу OTG говорится: «При подключении через USB OTG ранг устройства (ведущий или ведомый) определяется наличием или отсутствием перемычки между контактами 4 и 5 в штекере соединительного кабеля. В USB OTG-кабеле такая перемычка устанавливается лишь в одном из двух разъемов [10]». Соответственно нам необходима такая перемычка со стороны мобильного устройства.

Рисунок 2. Различия в схеме обычного USB-кабеля и OTG-кабеля (рисунок с сайта tech.firstpost.com)

Рисунок 2. Различия в схеме обычного USB-кабеля и OTG-кабеля (рисунок с сайта tech.firstpost.com)

Неплохим подспорьем в работе будет также программа USB Device Info, установленная из хранилища Google Play Market. Программа умеет определять подключенные к USB-разъему планшета/телефона устройства как с помощью Java API, так и с помощью ядра Linux. То есть если ваше устройство не определилось с помощью Java USB Host API в USB Device Info, то с большой вероятностью тщетно будет использовать для этого мобильного устройства какую-либо (в том числе и свою) Android-программу, написанную с помощью Java и USB Host API.

Иногда очень полезной бывает информация, выводимая командой lsusb операционной системы Linux. С ключами -v и -d lsusb выводит о USB-устройстве все, или почти все, что необходимо разработчику программного обеспечения для устройств этого класса.

Далее необходим компьютер с установленным Android SDK и интегрированной средой разработки (IDE) Eclipse с плагином ADT (хотя можно обойтись и только SDK). Как создать и установить приложение для Android, можно посмотреть, например, в [11, 12] или в сети Интернет. Ну и, конечно, необходимо хотя бы минимальное знание языка программирования Java, а также желание добиться результата, без него никак!

Отмечу, что на выяснение некоторых технических вопросов применения USB в Android автору потребовались недели кропотливого поиска информации.

Статью целиком читайте в журнале «Системный администратор», №6 за 2014 г. на страницах 70-74.

PDF-версию данного номера можно приобрести в нашем магазине.


Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-41
Fax: (499) 277-12-45
E-mail: sa@samag.ru