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

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

Мониторинг  

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

Многие системные администраторы тратят до 30% рабочего времени на рутину мониторинга. Но

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

Рынок труда  

Какие навыки вы хотите развивать в 2026 году?

Рынок труда меняется быстро. Еще вчера его называли рынком соискателей, а сегодня

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

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

От сисадмина до архитектора: книги, которые прокачают ваш стек в этом году

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

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

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

Автоматизируем рутину: что реально работает?

Многие сисадмины автоматизировали что-то за последний год. Но далеко не все остались

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

Защита ИТ-системы  

Практическая защита: что вы внедрили и что мешает?

Какие меры безопасности реально внедрить в реальных условиях – и что не

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

Вопрос-ответ  

Обеспечиваем безопасную эксплуатацию базы данных

Что для вас чаще всего является причиной инцидентов с БД? Как вы

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

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

От «безопасного» Linux до Контролируемого взлома

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

03.12.2013г.
Просмотров: 6042
Комментарии: 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