Подтвердить что ты не робот

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

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

То же самое, если я использую информацию о 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

log eclipse:

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 Ядро v.: 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

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

4b9b3361

Ответ 1

Чтобы включить поддержку API хоста USB, вы должны добавить файл с именем
   android.hardware.usb.host.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" />

в раздел <permissions>.

Перезагрузите устройство. Usb host api должен работать.

Протестировано на CUBE U30GT с помощью андроида 4.

Ответ 2

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

Незначительное Typo: <feature name="android.hardware.usb.host">

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

Процедура:

  • adb pull/system/etc/permissions/tablet_core_hardware.xml
  • Обновите этот файл и создайте файл android.hardware.usb.host.xml, как указано Greg-q.
  • adb push android.hardware.usb.host.xml/system/etc/permissions
  • adb push tablet_core_hardware.xml/system/etc/permissions
  • Reboot.

Ответ 3

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

(0) установите драйверы PDAnet (http://pdanet.co/a/) на моем компьютере под управлением Windows 8. (1) корень телефона с помощью Vroot (теперь называется iRoot) на http://www.mgyun.com/m/en. Очень просто, только поймать, что страница su grant/deny частично находится на китайском языке, не имеет большого значения. (2) установить busybox и jackpal Android-Terminal-Emulator (см. Github https://github.com/jackpal/Android-Terminal-Emulator или играть в магазин 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) make default.prop read/write:

chmod 666 /default.prop

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

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/

Наконец, только для полноты, как сказано выше (fooobar.com/questions/216848/...):

(7) Чтобы включить поддержку API хоста USB, вы должны добавить файл с именем android.hardware.usb.host.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) Перезагрузите устройство. Usb host api должен работать.

Ответ 4

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

adb remount/../../file.xml rw adb push...

с нормальной правкой команды i'vent и файл доступен только для чтения

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