2012-06-25 11 views
24

Sto sviluppando un'applicazione Android in cui devo comunicare con un dispositivo USB. Ho provato a utilizzare l'API google standart nella mia app, ma l'elenco dei dispositivi è sempre vuoto.Host USB Android e dispositivi nascosti

Stesse cose se uso le informazioni sul dispositivo USB con google api. Elenco dei dispositivi cercati da google api è vuoto,

lsusb dà seguenti risultati:

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 

mio dispositivo è 2226: 0014

registro di 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 

Se i plug in dispositivi come adattatori rs232, dongle bluetooth, non succede niente e non ci sono risultati da API e lsusb.

Il protocollo di un dispositivo è basato sulla libreria ezusb. Android v .: 4.0.3 kernel v .: 3.0.8 firmware costruzione: crane_evb-ita 4.0.3 IMLK74k 20120330

è che ci sono un modo per accedere ai dispositivi USB nascoste tramite API, o dovrei implementare il supporto di questo dispositivo scrivendo il driver e applicandolo nel firmware?

UPDATE: anche se creo file info in * system/etc/usb_modeswitch.d/* con il nome 2226_0014 contenente

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

ottengo lo stesso errore: "No such file or directory"

risposta

44

Per abilitare il supporto API host USB si dovrebbe aggiungere un file chiamato
android.hardware.usb.host.xml e contenente le seguenti righe:

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

nella cartella

/system/etc/permissions 

in quella cartella trovano file chiamato

handheld_core_hardware.xml or tablet_core_hardware.xml 

e aggiungere

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

in <permissions> sezione.

Riavviare il dispositivo. L'API host USB dovrebbe funzionare.

provata su CUBE U30GT con Android 4.

+0

Grazie amico! Ha funzionato anche sul mio Yarvik TAB464! –

+0

eccellente) tutto funziona perfettamente) –

+0

grazie, lavoro per me – Marijn

6

Eccellente! Questo ha funzionato sul mio Envizen V700NA con Android 4.0.4.

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

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

Procedura:

  1. adb pull /system/etc/permissions/tablet_core_hardware.xml
  2. Aggiornamento quel file e creare Android. hardware.usb.host.xml come specificato da Greg-q.
  3. adb spinta android.hardware.usb.host.xml/system/etc/permissions
  4. adb spinta tablet_core_hardware.xml/system/etc/permissions
  5. riavvio.
1

ho usato adb su MK809, Android 4.1 Jelly Bean, e il comando sono:

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

con normale permesso di comando i'vent e il file viene letto solo

Ci dispiace per il mio cattivo inglese: P

2

Ha lavorato come un fascino su una tela 2 telefono Micromax A120 (KitKat 4.4.2). ora posso controllare il mio Arduino! Ho usato gli strumenti busybox per fare tutto il lavoro a riga di comando (altrimenti chmod non avrebbe funzionato). i miei passaggi (forse alcuni non erano necessari):

(0) installare i driver PDAnet (http://pdanet.co/a/) sul mio computer Windows 8. (1) effettua il root del telefono utilizzando Vroot (ora chiamato iRoot) al numero http://www.mgyun.com/m/en. Molto semplice, l'unica presa è che la pagina su grant/deny è in parte in cinese, nessun grosso problema. (2) installare busybox e di jackpal Android-Terminal-Emulator (vedi GitHub https://github.com/jackpal/Android-Terminal-Emulator o Play Store https://play.google.com/store/apps/details?id=jackpal.androidterm&hl=en)

(3) aprire una finestra di terminale e diventare superutente:

# su 

(4) il file sistema può essere di sola lettura, per cui si potrebbe avere per rimontarlo in:

# mount -o rw,remount -t yaffs2/

o

# mount -o rw,remount -t rootfs/

o

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

vedere http://www.pocketmagic.net/write-on-the-android-read-only-file-system/ Inoltre, vedere Android 2.3 : Read-Only file system stuck anche, https://ckirbach.wordpress.com/2012/11/27/how-to-remount-system-as-read-write-in-android/

(5) fare default.prop lettura/scrittura:

chmod 666 /default.prop 

(6) Modifica/default .prop, effettuare le seguenti modifiche:

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

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

Infine, solo per completezza, come risposta sopra dice (https://stackoverflow.com/a/11992683/979369):

(7) Per consentire API host USB supporto è necessario aggiungere un file denominato android.hardware.usb.host.xml e contenente le seguenti righe:

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

nella cartella

/system/etc/permissions 

in quel file Trova cartella denominata

handheld_core_hardware.xml or tablet_core_hardware.xml 

e aggiungere

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

in sezione.

(8) Riavviare il dispositivo. L'API host USB dovrebbe funzionare.