web-dev-qa-db-fra.com

Android Hôte USB et périphériques cachés

Je développe une Android dans laquelle je dois communiquer avec un périphérique USB. J'ai essayé d'utiliser l'API google standard dans mon application, mais la liste des périphériques est toujours vide.

Même chose si j'utilise les informations du périphérique USB avec Google API. La liste des appareils recherchés par Google API est vide,

lsusb donne les résultats suivants:

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

mon appareil est 2226: 0014

journal d'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

Si je branche des appareils comme des adaptateurs rs232, un dongle bluetooth, rien ne se passe et il n'y a aucun résultat de l'API et de lsusb.

Le protocole d'un appareil est basé sur la bibliothèque ezusb. Android v .: 4.0.3 noyau v .: 3.0.8 build du firmware: crane_evb-fra 4.0.3 IMLK74k 20120330

Existe-t-il un moyen d'accéder aux périphériques USB cachés via l'API, ou dois-je implémenter la prise en charge de ce périphérique en écrivant le pilote et en le patchant dans le firmware?

MISE À JOUR: même si je crée un fichier d'informations dans * system/etc/usb_modeswitch.d/* avec le nom 2226_0014 contenant

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

j'obtiens la même erreur: "Aucun fichier ou répertoire"

24
Alexey.Shilenkov

Pour activer la prise en charge de l'API hôte USB, vous devez ajouter un fichier nommé
Android.hardware.usb.Host.xml et contenant les lignes suivantes:

<permissions>
 <feature name="Android.hardware.usb.Host"/>
</permissions>

dans le dossier

/system/etc/permissions

dans ce dossier trouver un fichier nommé

handheld_core_hardware.xml or tablet_core_hardware.xml 

et ajouter

<feature name="Android.hardware.usb.Host" />

dans <permissions> section.

Redémarrez votre appareil. L'API de l'hôte USB devrait fonctionner.

Testé sur CUBE U30GT avec Android 4.

43
Greg-q

Excellent! Cela a fonctionné sur mon Envizen V700NA exécutant Android 4.0.4.

Typo mineure: <feature name="Android.hardware.usb.Host">

Devrait être: <feature name="Android.hardware.usb.Host"/>

Procédure:

  1. adb pull /system/etc/permissions/tablet_core_hardware.xml
  2. Mettez à jour ce fichier et créez Android.hardware.usb.Host.xml comme spécifié par Greg-q.
  3. adb Push Android.hardware.usb.Host.xml/system/etc/permissions
  4. adb Push tablet_core_hardware.xml/system/etc/permissions
  5. Redémarrez.
6
markjuggles

Fonctionne comme un charme sur un téléphone canvas 2 micromax A120 (KitKat 4.4.2). maintenant je peux contrôler mon Arduino! j'ai utilisé les outils de busybox pour faire tout le travail en ligne de commande (sinon chmod ne fonctionnerait pas). mes étapes (peut-être que certaines n'étaient pas nécessaires):

(0) installez les pilotes PDAnet ( http://pdanet.co/a/ ) sur mon ordinateur Windows 8. (1) rooter le téléphone en utilisant Vroot (maintenant appelé iRoot) à http://www.mgyun.com/m/en . Très simple, le seul hic, c'est que la page su grant/deny est en partie en chinois, ce n'est pas grave. (2) installez busybox et l'émulateur Android-Terminal de jackpal (voir github https://github.com/jackpal/Android-Terminal-Emulator ou Play Store https: // play. google.com/store/apps/details?id=jackpal.androidterm&hl=en )

(3) ouvrez une fenêtre de terminal et devenez le superutilisateur:

# su

(4) le système de fichiers peut être en lecture seule, vous devrez donc peut-être le remonter:

# mount -o rw,remount -t yaffs2 /

ou

# mount -o rw,remount -t rootfs /

ou

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

voir http://www.pocketmagic.net/write-on-the-Android-read-only-file-system/ également, voir Android 2.3: système de fichiers en lecture seule bloqué également, https://ckirbach.wordpress.com/2012/11/27/how-to-remount-system-as-read-write-in-Android/

(5) faire en lecture/écriture default.prop:

chmod 666 /default.prop

(6) éditez /default.prop, apportez les modifications suivantes:

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

voir https://Android.stackexchange.com/questions/28653/obtaining-root-by-modifying-default-propro-secure ou http://bclary.com/blog/ 2014/04/14/fractionnement et emballage d'images de démarrage Android /

Enfin, juste pour être complet, comme le dit la réponse ci-dessus ( https://stackoverflow.com/a/11992683/979369 ):

(7) Pour activer la prise en charge de l'API hôte USB, vous devez ajouter un fichier nommé Android.hardware.usb.Host.xml et contenant les lignes suivantes:

<permissions>
 <feature name="Android.hardware.usb.Host"/>
</permissions>

dans le dossier

/system/etc/permissions

dans ce dossier trouver le fichier nommé

handheld_core_hardware.xml or tablet_core_hardware.xml 

et ajouter

<feature name="Android.hardware.usb.Host" />

dans la section.

(8) Redémarrez votre appareil. L'API de l'hôte USB devrait fonctionner.

2
mahesh

j'ai utilisé adb sur MK809, Android 4.1 Jelly bean, et la commande est:

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

avec la commande normale, j'évite l'autorisation et le fichier est en lecture seule

Désolé pour mon mauvais anglais: P

1
Marco