2 votes

Quel pilote est en charge des boutons du casque sur ma tablette ?

J'ai récemment acheté une tablette Lenovo Tab3 710F ( page du produit ) et j'essaie de contrôler la lecture de la musique de manière externe avec un petit circuit électronique.

L'idée est de reproduire le même comportement que les boutons que l'on peut trouver sur un casque externe qui se branche sur le port mini-jack.

Il existe une page dans la documentation d'Android qui spécifie cette interface : Casque d'écoute de 3,5 mm : Spécifications des accessoires . En bref, chaque bouton doit être connecté en série avec une résistance d'une valeur donnée qui permet à l'appareil Android de détecter quel bouton a été pressé et de déclencher l'action correspondante.

Le problème est que ma tablette ne répond pas vraiment selon cette spécification (ex : le bouton B déclenche la chanson suivante, au lieu de vol+). De plus, le câblage de cette tablette semble inversé entre GND et MIC. J'ai essayé d'ouvrir la tablette pour trouver le modèle de circuit intégré de détection audio ou casque, mais sans succès car tout est scellé.

Ainsi, je me disais que je pourrais peut-être obtenir des informations à partir du "logiciel" : comment puis-je savoir quel pilote gère les actions des boutons ?

L'idée serait alors de regarder le code source (disponible sur le site de Lenovo), pour trouver les différentes capacités codées dans le pilote, et peut-être même une référence de CI qui m'aiderait à localiser la fiche technique du CI pour plus d'informations.

0voto

Federico Points 121

OK les gars, je suis un peu surpris de ne pas avoir de réponse, mais je suppose que c'est parce que c'était plus une question de type stackoverflow...

Quoi qu'il en soit, j'ai poursuivi mes recherches et j'ai trouvé la réponse moi-même, notamment grâce à ce PDF qui décrit en détail " L'architecture de saisie d'Android ".

Le PDF fournit tous les détails, mais en gros, chaque pilote enregistre les périphériques d'entrée avec le noyau Linux et un fichier de périphérique est créé pour chaque événement sous /dev/input/eventXX. Il existe ensuite un mécanisme Android pour acheminer ces événements vers les applications, mais ce n'est pas ce qui nous intéresse ici.

On peut utiliser la commande getevent pour obtenir plus d'informations sur ces événements ( voir aussi la documentation Android ) :

  • getevent -li fournit une liste des périphériques d'entrée enregistrés avec les événements possibles pour chaque périphérique.
  • getevent -lp imprime une nouvelle ligne pour chaque événement reçu (l'option -l affiche les types et les noms des événements en texte clair plutôt qu'en chiffres)

Ainsi, par exemple, dans le cas de ma tablette Lenovo, nous constatons que :

add device 6: /dev/input/event1
  bus:      0019
  vendor    0000
  product   0000
  version   0000
  name:     "ACCDET"
  location: ""
  id:       ""
  version:  1.0.1
  events:
    KEY (0001): KEY_VOLUMEDOWN        KEY_VOLUMEUP          KEY_HANGEUL
  KEY_NEXTSONG
                KEY_PLAYPAUSE         KEY_PREVIOUSSONG      KEY_STOPCD
  KEY_SEND
  input props:
    <none>

NOTE : Ceci n'est qu'un extrait de la sortie complète, limitée à la détection des boutons du casque.

Ainsi, la gestion des boutons du casque semble être effectuée par un composant "ACCDET". Maintenant, je n'ai toujours pas trouvé la manière "formelle" de savoir quel pilote enregistre cet événement, mais en utilisant les mots-clés ACCDET et KEY_XX dans une recherche de code source, j'ai pu trouver le fichier source correspondant (accdet.c), qui contient les autres informations que je cherchais (à savoir les seuils de tension pour chaque détection de bouton).

Enfin, il convient également de noter que l'on peut simuler des événements à l'aide de la fonction sendevents commande. Ainsi, par exemple, pour simuler l'appui (et le relâchement) du bouton de lecture/pause, on peut utiliser :

sendevent /dev/input/event1 1 164 1; \
sendevent /dev/input/event1 1 164 0; \
sendevent /dev/input/event1 0 0 0

J'espère que cela pourra aider quelqu'un d'autre...

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X