Работа с устройствами 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 периферией достаточно проста и логична. Безусловно, реализация протоколов некоторых конкретных устройств не блещет простотой — но это проявится в любой системе в одинаковой степени.
Все приведенные примеры я взял из реального проекта, лишь исключил очевидные проверки, оставив только ключевые строки.
Источник
Android mass storage driver
Для функционирования программы необходимы права root пользователя и Android 4.x.
Для функционирования программы необходима установаленная ® BusyBox
Краткое описание:
Данной программой можно в один клик активировать/деактивировать режим накопителя в смартфонах Sony, Samsung.
Описание:
Программа дает вам возможность активации режима накопителья в смартфонах Sony, Samsung.
Будет экспортирован по USB ваша карта памяти в качестве накопителья, это не будет работать с вашей внутренней памятью из-за аппаратных и программых ограничений
Вы также можете создавать ярлыки и легко переключаться между режимами Накопителья и Стандартной MTP.
Ткстировалась с успешной работоспосбностью на смартфонах:
* Samsung Galaxy S4 (GT-I9500, GT-I9505, SGH-I337, SGH-M919)
* Samsung Galaxy SIII (GT-I9300, GT-I9305, SPH-L710)
* Samsung Galaxy Note II (GT-N7100)
* Samsung Grand Duos (GT-I9082)
Начиная с версии 2.2, появился новая pro версия, что имеет автоматическое переключение. Если вы пожертвовали ранее, пожалуйста, свяжитесь со мной, спасибо))
Русский интерфейс: Неизвестно
Скачать: версия: 2.3.1 SG USB Mass Storage Enabler 2.3.1.apk ( 235.54 КБ )
Скачать: версия: 2.3.1 (rus) SG USB Mass Storage Enabler (rus) 2.3.1.apk ( 266.23 КБ )
[2.3.1]
* 2.3 was a debug build with debug code, fix that.
[2.3]
* Fixed regression with shortcuts.
* Added version number to settings.
[2.2]
* Auto-detect needed files, this opens up support for more devices from other OEMs.
* Due to the above, Sony Xperia Z1 support.
* New pro version with option to auto-switch to UMS and back to MTP on cable connect/disconnect.
* Code refinements, app should perform better now.
[2.0]
* New layout and improved UI.
* Better code handling.
* Basis for new Xposed-powered version that hooks deep into Android.
[1.5]
* Fixed overlapping items when the device is flipped into landscape.
[1.4]
* Now uses RootTools to check BusyBox and root, the app should be more reliable.
* Do some checks to see if the mount point doesn’t have an actual block mounted to it (is SD card available?)
* Fallback to first detected block device
[1.3]
* Added untested support for Verizon’s Galaxy S4 (SCH-I545) (Not working)
[1.2]
* Added ads. Don’t like ads? They can be disabled 🙂
* Handle a few more exceptions in code.
* Attempt to detect if a user does not have BusyBox installed, if so, redirect them to Play Store listing.
[1.1]
* Add non-tested support for the Samsung Galaxy S4 (i9505), might work on other S4s.
[1.0]
* Initial release.
Сообщение отредактировал FijiMAX — 05.05.15, 14:26
Источник
Android mass storage driver
Для функционирования программы необходимы права root пользователя.
Краткое описание:
Приложение для подключения Mass Storage Mode и установки карты памяти в качестве USB — накопителя
Это приложение , чтобы включить Mass Storage Mode для установки карты памяти в качестве USB — накопителя от Android устройства с правами администратора(root).
Он не устанавливает внутреннюю память, и он не будет работать, если устройство не имеет внешней поддержки карт памяти и не будет работать , если SD — карта (карта памяти) используется в качестве внутренней системы хранения в Marshmallow 6.0 , так как она после этого отформатирована системой в раздел EXT4 и в зашифрованном виде .
Как пользоватся:
1. Подключите телефон с помощью кабеля USB к компьютеру, телевизору, DVD / аудио-плееру (даже в другой телефон с OTG) или любому другому устройству.
2. Откройте приложение «UMS Активатор» и дайте ему права администратора(root).Нажмите кнопку «Включить Mass Storage».
Для автозапуска режима накопителя активируйте пункт » Разрешить автозапуск» в настройках и нажмите «Сохранить & Закрыть».Далее режим накопителя будет включаться автоматически при подключении кабеля USB к какой либо технике, т.е. без необходимости запуска самой программы.
3. Перед отключением кабеля USB, извлеките из компьютера, а затем нажмите «Отключить Mass Storage» в приложении или через тумблер(выкл.) в панели уведомлений и далее отключите кабель USB
Если оно не работает, перейдите к настройкам (из опций,верхний правый угол,только для опытных пользователей) и вручную выберите необходимые параметры, и повторите попытку.
Это универсальное приложение для включения USB Mass Storage Mode.
Программа должна работать почти на всех Android One дисках, включая Oreo 8+
Заметка:
Это будет работать только при наличии USB Gadget & FUSE драйвера встроенного в ядро ..
Не пытайтесь на этих устройствах:
HTC One M9
«Что это за приложение:
Это приложение только для устройств с РУТ!!Это приложение для монтирования карты памяти в качестве запоминающего устройства USB (UMS) на вашем компьютере, или телевизоре или аудио/DVD-плеере или любом другом.
Это приложение не будет монтировать внутреннюю память (так как она находится в внутри раздела /data. ./media/0/каталога и раздела /data отформатированного в EXT4).
Если вы действительно хотите смонтировать внутреннюю память как UMS, это можно сделать с помощью USB Sharer (но это будет подключено только для чтения,
причина, почему я должен сделать это в этом приложении).Как использовать приложение:
1. Для включения запоминающего устройства, нажмите кнопку \’Enable Mass Storage\’.
2.Перед отключением USB-порта, извлеките сначала из компьютера,
затем нажмите кнопку \’Disconnect Mass Storage\’.
Если есть проблемы при работе в режиме накопителя с ПК читаем пост ®UMS Enabler(Universal) (Пост Hanabishi)
Возможные причины почему это приложение не работает:
- Ядра вашего устройства не Mass Storage Gadget или FUSE drivers.Solution: Попросите разработчика вашего устройства, собрать ядро с модулем FUSE и USB Gadget.
- Ваше устройство не поддерживает карту памяти, или она не вставлена .
- Карты памяти устройства зашифрована или используется в качестве внутренней памяти (для Android версии 6.0 или выше), в которой она отформатирована как один раздел EXT4, и зашифрована.
- Может быть что-то (например Антивирус), который не позволяет отключить принудительно SE Linux.
- Ваше устройство может быть не правильно рутировано.Чтобы проверить наличие новых обновлений или чтобы получить доп. помощь и доп. разъяснения или если есть любые предложения/найдены ошибки, нажмите здесь:http://forum.xda-developers.com/android/apps-games/app-universal-mass-storage-enabler-beta-t3240097
- Если компьютер не видит SD-карту в телефоне после выбора в UMS Enabler’е
Требуется Android: 4.0.+
Русский интерфейс: Да
Источник
Android mass storage driver
Для функционирования программы необходимы права root пользователя и Android 4.x.
Для функционирования программы необходима установаленная ® BusyBox
Краткое описание:
Данной программой можно в один клик активировать/деактивировать режим накопителя в смартфонах Sony, Samsung.
Описание:
Программа дает вам возможность активации режима накопителья в смартфонах Sony, Samsung.
Будет экспортирован по USB ваша карта памяти в качестве накопителья, это не будет работать с вашей внутренней памятью из-за аппаратных и программых ограничений
Вы также можете создавать ярлыки и легко переключаться между режимами Накопителья и Стандартной MTP.
Ткстировалась с успешной работоспосбностью на смартфонах:
* Samsung Galaxy S4 (GT-I9500, GT-I9505, SGH-I337, SGH-M919)
* Samsung Galaxy SIII (GT-I9300, GT-I9305, SPH-L710)
* Samsung Galaxy Note II (GT-N7100)
* Samsung Grand Duos (GT-I9082)
Начиная с версии 2.2, появился новая pro версия, что имеет автоматическое переключение. Если вы пожертвовали ранее, пожалуйста, свяжитесь со мной, спасибо))
Русский интерфейс: Неизвестно
Скачать: версия: 2.3.1 SG USB Mass Storage Enabler 2.3.1.apk ( 235.54 КБ )
Скачать: версия: 2.3.1 (rus) SG USB Mass Storage Enabler (rus) 2.3.1.apk ( 266.23 КБ )
[2.3.1]
* 2.3 was a debug build with debug code, fix that.
[2.3]
* Fixed regression with shortcuts.
* Added version number to settings.
[2.2]
* Auto-detect needed files, this opens up support for more devices from other OEMs.
* Due to the above, Sony Xperia Z1 support.
* New pro version with option to auto-switch to UMS and back to MTP on cable connect/disconnect.
* Code refinements, app should perform better now.
[2.0]
* New layout and improved UI.
* Better code handling.
* Basis for new Xposed-powered version that hooks deep into Android.
[1.5]
* Fixed overlapping items when the device is flipped into landscape.
[1.4]
* Now uses RootTools to check BusyBox and root, the app should be more reliable.
* Do some checks to see if the mount point doesn’t have an actual block mounted to it (is SD card available?)
* Fallback to first detected block device
[1.3]
* Added untested support for Verizon’s Galaxy S4 (SCH-I545) (Not working)
[1.2]
* Added ads. Don’t like ads? They can be disabled 🙂
* Handle a few more exceptions in code.
* Attempt to detect if a user does not have BusyBox installed, if so, redirect them to Play Store listing.
[1.1]
* Add non-tested support for the Samsung Galaxy S4 (i9505), might work on other S4s.
[1.0]
* Initial release.
Сообщение отредактировал FijiMAX — 05.05.15, 14:26
Источник