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

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

Интеграция Open Source-решений  

Open Source в облачной среде

Облачные решения становятся всё более популярными в мире. Компании стремятся использовать их для

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

Автоматизация  

Нейросеть вам в руки! Как использовать ИИ для автоматизации задач

Использование ИИ для автоматизации задач помогает компании получить конкурентное преимущество, поскольку объединение

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

Рынок труда  

Специалист по этическому ИИ, инженер по квантовым вычислениям или аналитик по метавселенной?

Новые тенденции в развитии ИТ могут привести к возникновению новых специальностей в

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

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

Учитесь убеждать и побеждать

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

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

Сетевая инфраструктура  

Как удаленная работа меняет подход к сетевой инфраструктуре?

С увеличением числа сотрудников, работающих из дома, организации сталкиваются с необходимостью создания

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

Мониторинг  

Какой мониторинг нужен сегодня?

По мнению экспертов ГК InfoWatch, действия сотрудников – самая распространенная причина инцидентов

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

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

Руководство для тех, кто увлечен ИИ, программированием. И дизайном

Накануне лета издательство «БХВ» выпустило книжные новинки, от которых любителям чтения будет

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

Мобильные приложения  

Искусственный интеллект в мобильных приложениях: возможности и перспективы

Обзор современных применений ИИ в мобильных приложениях, анализ перспектив развития этой технологии,

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

ИТ-образование  

Как сделать ИТ-образование эффективным?

Эксперты ИТ-отрасли отвечают на вопросы «СА». Обсуждаем ключевые аспекты для улучшения образовательных

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

Work-life balance  

Как айтишнику найти баланс между работой и личной жизнью?

Обсуждаем инструменты для эффективного управления временем, снижения уровня стресса и достижения гармонии. На

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

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

Всё самое нужное – под одной обложкой

Отличительная черта книжных новинок, выпущенных недавно издательством «БХВ» – это их универсальность. Не просто

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

ИТ-инфраструктура  

Системы мониторинга ИТ-инфраструктуры-2025

Без мониторинга ИТ-инфраструктуры не обходится ни одна компания, хотя бы потому, что

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

Открытое ПО  

Безопасность Open Source: рискуем или контролируем?

Компания «Кросс технолоджис» изучила, как используется ПО с открытым кодом в компаниях

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

Работа с нейросетью  

Скажи, есть ли у тебя AI, и я скажу, кто ты

Недавно сервис по поиску работы SuperJob выяснил, что каждый второй россиянин уже

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

19.12.2017г.
Просмотров: 4796
Комментарии: 0
Основы блокчейна

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

19.12.2017г.
Просмотров: 5050
Комментарии: 0
Java 9. Полный обзор нововведений

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

16.02.2017г.
Просмотров: 9122
Комментарии: 0
Опоздавших не бывает, или книга о стеке

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

17.05.2016г.
Просмотров: 12561
Комментарии: 0
Теория вычислений для программистов

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

30.03.2015г.
Просмотров: 14069
Комментарии: 0
От математики к обобщенному программированию

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

18.02.2014г.
Просмотров: 15816
Комментарии: 0
Рецензия на книгу «Читаем Тьюринга»

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

13.02.2014г.
Просмотров: 10691
Комментарии: 0
Читайте, размышляйте, действуйте

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

12.02.2014г.
Просмотров: 8710
Комментарии: 0
Рисуем наши мысли

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

10.02.2014г.
Просмотров: 6952
Комментарии: 4
Страна в цифрах

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

18.12.2013г.
Просмотров: 6068
Комментарии: 0
Большие данные меняют нашу жизнь

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

18.12.2013г.
Просмотров: 4989
Комментарии: 0
Компьютерные технологии – корень зла для точки роста

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

04.12.2013г.
Просмотров: 4636
Комментарии: 0
Паутина в облаках

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

03.12.2013г.
Просмотров: 4867
Комментарии: 1
Рецензия на книгу «MongoDB в действии»

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

Друзья сайта  

 Программирование 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-45
E-mail: sa@samag.ru