2 votos

¿Qué controlador se encarga de los botones de los auriculares en mi tablet?

Recientemente he comprado una tablet Lenovo Tab3 710F ( página de productos ) y estoy tratando de controlar la reproducción de música externamente con un pequeño circuito electrónico.

La idea es reproducir el mismo comportamiento que los botones que uno puede encontrar en un auricular externo que se conecta al puerto minijack.

Hay una página en la documentación de Android que especifica esta interfaz: Auriculares de 3,5 mm: Especificación de los accesorios . En resumen, cada botón debe conectarse en serie con una resistencia de un valor determinado que permita al dispositivo Android detectar qué botón se ha pulsado y desencadenar la acción correspondiente.

El problema es que mi tablet no responde realmente de acuerdo con esa especificación (por ejemplo, el botón B activa la siguiente canción, en lugar de vol+). Además, el cableado de esta tablet parece invertido entre GND y MIC. He intentado abrir la tablet para encontrar el modelo de IC de detección de audio o auriculares, pero sin suerte ya que todo está sellado.

Por lo tanto, estaba pensando que tal vez podría obtener alguna información del "software": ¿cómo puedo saber qué controlador está manejando las acciones de los botones?

La idea sería entonces mirar el código fuente (disponible en el sitio web de Lenovo), para encontrar las diversas capacidades codificadas en el controlador, y tal vez incluso una referencia del CI que me ayude a localizar la hoja de datos del CI para obtener más información.

0voto

Federico Puntos 106

OK chicos, estoy un poco sorprendido de no haber recibido ninguna respuesta, pero supongo que es porque era más una pregunta de stackoverflow...

De todos modos, seguí investigando y yo mismo encontré la respuesta, en particular gracias a este PDF que describe en detalle " La arquitectura de entrada de Android ".

El PDF proporciona todos los detalles, pero básicamente cada controlador registra input_devices con el Kernel de Linux y se crea un archivo de dispositivo para cada evento en /dev/input/eventXX. Luego hay un mecanismo de Android para enrutar esos eventos a las aplicaciones, pero eso no es lo que interesa aquí.

Se puede utilizar el comando getevent para obtener más información sobre estos eventos ( ver también la documentación de Android ):

  • getevent -li proporciona una lista de los dispositivos de entrada registrados con los posibles eventos para cada dispositivo
  • getevent -lp imprime una nueva línea por cada evento recibido (el -l muestra los tipos y nombres de los eventos en texto plano en lugar de números)

Así, por ejemplo, en el caso de mi tablet Lenovo, encontramos 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>

NOTA: Esto es sólo un extracto de la salida completa, limitada a la detección de los botones de los auriculares.

Por lo tanto, el manejo de los botones de los auriculares parece ser realizado por algún componente "ACCDET". Ahora, todavía no he descubierto la manera "formal" de saber qué controlador registra este evento, pero utilizando las palabras clave ACCDET y KEY_XX en una búsqueda de código fuente, pude encontrar el archivo fuente correspondiente (accdet.c), que contenía la otra información que estaba buscando (a saber, los umbrales de tensión para la detección de cada botón).

Por último, también cabe destacar que se pueden simular eventos utilizando el sendevents de mando. Así, por ejemplo, para simular que se pulsa (y se suelta) el botón de reproducción/pausa, se utilizaría:

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

Espero que pueda ayudar a alguien más...

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X