2012-06-25 13 views
24

Pracuję nad aplikacją na Androida, w której muszę się komunikować z urządzeniem USB. Próbowałem użyć standardowego interfejsu Google API w mojej aplikacji, ale lista urządzeń jest zawsze pusta.Android USB host i ukryte urządzenia

Te same rzeczy, jeśli korzystam z informacji o urządzeniu USB za pomocą google api. Lista urządzeń poszukiwanych przez google api jest pusta,

lsusb daje następujące wyniki:

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 

urządzenie pracuje 2226: 0014

dziennik zaćmienia:

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 

Jeżeli podłączę w urządzeniach takich jak karty rs232, klucz bluetooth, nic się nie dzieje i nie ma żadnego wyniku z API i lsusb.

Produkcja urządzenia oparta jest na bibliotece ezusb. Android v .: 4.0.3 jądro v .: 3.0.8 firmware build: crane_evb-pol 4.0.3 IMLK74k 20120330

Czy istnieje jakiś sposób, aby uzyskać dostęp do ukrytych urządzeń USB przez API, lub należy wdrożyć wsparcie tego urządzenia, pisząc sterownik i instalując go w oprogramowaniu?

UPDATE: nawet jeśli utworzyć plik informacji w systemie */etc/usb_modeswitch.d/* z nazwą 2226_0014 zawierającej

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

uzyskać ten sam błąd: "Nie ma takiego pliku lub katalogu"

Odpowiedz

44

Aby włączyć obsługę hosta USB API należy dodać plik o nazwie
android.hardware.usb.host.xml i zawierające następujące linie:

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

w folderze

/system/etc/permissions 

w tym folderze znaleźć plik o nazwie

handheld_core_hardware.xml or tablet_core_hardware.xml 

i dodać

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

do <permissions> sekcji.

Uruchom ponownie urządzenie. Powinien działać interfejs usb hosta.

Testowany na CUBE U30GT z Androidem 4.

+0

Dziękuję kolego! To działało również na moim Yarvik TAB464! –

+0

excellent) wszystko działa świetnie) –

+0

dzięki, pracuję dla mnie – Marijn

6

Doskonale! To działało na moim Envizen V700NA z systemem Android 4.0.4.

Minor Typo: <feature name="android.hardware.usb.host">

Powinno być: <feature name="android.hardware.usb.host"/>

Procedura:

  1. adb ciągnąć /system/etc/permissions/tablet_core_hardware.xml
  2. Aktualizacja ten plik i stworzyć androida. hardware.usb.host.xml określony przez Greg-q.
  3. ADB Push android.hardware.usb.host.xml/system/etc/uprawnienia
  4. adb Push tablet_core_hardware.xml/system/etc/uprawnienia
  5. restarcie.
1

Użyłem adb na MK809, Android 4.1 Jelly Bean, a polecenie to:

adb remount /../../file.xml rw adb Push ...

z normalnym zgody komenda i'vent i plik jest tylko do odczytu

Przepraszam za mój zły język angielski: P

2

Pracował jak czar na Micromax A120 płótno 2 telefon (KitKat 4.4.2). teraz mogę kontrolować mój Arduino! Użyłem narzędzi busybox do wykonania całej pracy z wiersza poleceń (inaczej chmod nie działał). moje kroki (być może niektóre nie były wymagane):

(0) zainstaluj sterowniki PDAnet (http://pdanet.co/a/) na moim komputerze z systemem Windows 8. (1) zakorzenić telefon za pomocą Vroot (teraz nazywa się iRoot) na http://www.mgyun.com/m/en. Bardzo proste, tylko catch jest to, że strona dot/deny su jest częściowo po chińsku, nic wielkiego. (2) zainstalować busybox i jackpal Android Terminal Emulator (patrz github https://github.com/jackpal/Android-Terminal-Emulator lub grać sklep https://play.google.com/store/apps/details?id=jackpal.androidterm&hl=en)

(3) otworzyć okno terminala i stać się superuser:

# su 

(4) plik System może być tylko do odczytu, więc może trzeba go zamontować:

# mount -o rw,remount -t yaffs2/

lub

# mount -o rw,remount -t rootfs/

lub

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

zobaczyć http://www.pocketmagic.net/write-on-the-android-read-only-file-system/ również zobaczyć Android 2.3 : Read-Only file system stuck również https://ckirbach.wordpress.com/2012/11/27/how-to-remount-system-as-read-write-in-android/

(5) dokonać default.prop odczytu/zapisu:

chmod 666 /default.prop 

(6) Edycja/default .prop, wprowadzić następujące zmiany:

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

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

Wreszcie, po prostu dla kompletności, jak wyżej odpowiedź mówi (https://stackoverflow.com/a/11992683/979369):

(7) Aby umożliwić USB Host API należy dodać plik o nazwie android.hardware.usb.host.xml zawierający następujące linie:

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

w folderze

/system/etc/permissions 

w tym pliku folderu find nazwie

handheld_core_hardware.xml or tablet_core_hardware.xml 

i dodać

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

do sekcji.

(8) Uruchom ponownie urządzenie. Powinien działać interfejs usb hosta.