Android USB хост и скрытые устройства

Я разрабатываю приложение для Android, в котором я должен общаться с USB-устройством. Я попытался использовать стандартный Google API в своем приложении, но список устройств всегда пуст.

то же самое, если я использую информацию об устройстве USB с Google api. Список устройств, которые ищет Google api, пуст,

команды lsusb дает следующие результаты:

Bus 001 Device 001: ID 1d6b:0001
Bus 002 Device 001: ID 1d6b:0002
Bus 003 Device 001: ID 1d6b:0001
Bus 002 Device 002: ID 2226:0014

мое устройство 2226:0014

отчет затмение:

I/USB3G(92): event { 'add', '/devices/platform/sw-ehci.1/usb2/2-1', 'usb', '', 189, 133 }
I/USB3G(92): path : '/sys/devices/platform/sw-ehci.1/usb2/2-1'
I/USB3G(92): VID :size 5,vid_path '/sys/devices/platform/sw-ehci.1/usb2/2-1/idVendor',VID  '2226
I/USB3G(92): '.
I/USB3G(92): PID :size 5,Pid_path '/sys/devices/platform/sw-ehci.1/usb2/2-1/idProduct',PID  '0014
I/USB3G(92): '.
I/USB3G(92): cmd=/system/etc/usb_modeswitch.sh /system/etc/usb_modeswitch.d/2226_0014 &,
I/USB3G(92): excute ret : 0,err:No such file or directory

Если я подключаю устройства, такие как rs232 адаптеры, Bluetooth-ключ, ничего не происходит, и нет никакого результата от API и lsusb.

Prtocol устройства основан на библиотеке ezusb. Android v: 4.0.3 В. ядра: 3.0.8 сборка прошивки: crane_evb-eng 4.0.3 IMLK74k 20120330

есть ли способ получить доступ к скрытым USB-устройствам через API, или я должен реализовать поддержку этого устройства, написав драйвер и исправив его в прошивку?

UPDATE: даже если я создаю файл info в * system/etc / usb_modeswitch.d / * с именем 2226_0014 содержащий

DefaultVendor= 0x2226
DefaultProduct=0x0014
TargetVendor=  0x2226
TargetProductList="0014"
MessageEndpoint="0x00"
NeedResponse=1
CheckSuccess=20

Я получаю ту же ошибку: "нет такого файла или каталога"

4 ответов


чтобы включить поддержку USB host API, вы должны добавить файл с именем
android.аппаратура.USB.хозяин.в XML и содержит следующие строки:

<permissions>
 <feature name="android.hardware.usb.host"/>
</permissions>

в папке

/system/etc/permissions

в этой папке найдите файл с именем

handheld_core_hardware.xml or tablet_core_hardware.xml 

и добавить

<feature name="android.hardware.usb.host" />

на .

перезагрузите устройство. Api хоста Usb должен работать.

протестировано на CUBE U30GT с android 4.


отлично! Это сработало на моем Envizen V700NA под управлением Android 4.0.4.

Мелкие Опечатка: <feature name="android.hardware.usb.host">

должно быть: <feature name="android.hardware.usb.host"/>

процедура:

  1. АБР тянуть /системы/и т. д./разрешения/tablet_core_hardware.в XML
  2. обновите этот файл и создайте android.аппаратура.USB.хозяин.xml в соответствии с Greg-q.
  3. adb push android.аппаратура.USB.хозяин.в XML /системы/и т. д./разрешения
  4. ADB push tablet_core_hardware.в XML /системы/и т. д./разрешения
  5. перезагрузка.

работал как шарм на телефоне micromax a120 canvas 2 (kitkat 4.4.2). теперь я могу контролировать свой Arduino! я использовал инструменты busybox для выполнения всей работы командной строки (иначе chmod не работал бы). мои шаги (возможно, некоторые и не требовались):

(0) установка драйверов PDAnet (http://pdanet.co/a/) на моем компьютере с Windows 8. (1) root телефон с помощью Vroot (теперь называется iRoot) вhttp://www.mgyun.com/m/en. Очень просто, только поймать, что Су страница грант / отказ частично на китайском, ничего страшного. (2) Установите busybox и Android-терминал-эмулятор jackpal (см. GitHubhttps://github.com/jackpal/Android-Terminal-Emulator или play store https://play.google.com/store/apps/details?id=jackpal.androidterm&hl=en)

(3) Откройте окно терминала и стать суперпользователем:

# su

(4) файловая система может быть доступна только для чтения, поэтому вам может потребоваться переустановить это:

# mount -o rw,remount -t yaffs2 /

или

# mount -o rw,remount -t rootfs /

или

# mount -o rw,remount -t rootfs rootfs /system

см.http://www.pocketmagic.net/write-on-the-android-read-only-file-system/ кроме того, см. Android 2.3: файловая система только для чтения застряла кроме того, https://ckirbach.wordpress.com/2012/11/27/how-to-remount-system-as-read-write-in-android/

(5) сделать по умолчанию.проп читать / писать:

chmod 666 /default.prop

(6) редактировать /по умолчанию.проп, принять следующие изменения:

ro.secure=0
ro.debuggable=1
persist.service.adb.enable=1

см https://android.stackexchange.com/questions/28653/obtaining-root-by-modifying-default-propro-secure или http://bclary.com/blog/2014/04/14/splitting-and-packing-android-boot-images/

наконец, просто для полноты, как сказано в ответе выше (https://stackoverflow.com/a/11992683/979369):

(7) чтобы включить поддержку API хоста USB, вы должны добавить файл упомянутый андроид.аппаратура.USB.хозяин.xml и содержащий следующие строки:

<permissions>
 <feature name="android.hardware.usb.host"/>
</permissions>

в папке

/system/etc/permissions

в этой папке найдите файл с именем

handheld_core_hardware.xml or tablet_core_hardware.xml 

и добавить

<feature name="android.hardware.usb.host" />

в раздел.

(8) перезагрузите устройство. Api хоста Usb должен работать.


Я использовал adb на MK809, Android 4.1 Jelly Bean, и команда:

АБР перемонтировать /../../папка.в XML-РВ adb push...

с обычной командой i'Vent разрешения и файл только для чтения

извините за мой плохой английский: P