Google se compromete a promover la equidad racial para las comunidades negras. Ver cómo.
Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Enrutamiento de entrada

En Android 9 y versiones anteriores, no había forma de interactuar con múltiples pantallas a través del tacto, porque no había un mecanismo de asociación entre las pantallas y los dispositivos de entrada. Por ejemplo, una pantalla táctil podría proporcionar una salida de video HDMI (que se registraría como pantalla en Android) y una salida USB para pantalla táctil (que se registraría como un dispositivo de entrada). Si se conectaran múltiples dispositivos de esta manera, no habría forma de determinar qué dispositivo de entrada pertenece a qué pantalla. El mismo problema se aplica a los dispositivos plegables con múltiples pantallas integradas.

Android 10 agregó un mecanismo para especificar qué dispositivos de entrada pertenecen a qué pantallas. La asociación se realiza mediante números de puerto donde puerto se refiere al puerto físico al que está conectada una pantalla.

Por ejemplo, si un dispositivo Android tiene dos puertos HDMI etiquetados como hdmi1 y hdmi2 , entonces los valores del puerto de visualización podrían ser 1 y 2 . Los valores del puerto permanecen iguales incluso cuando se conecta una pantalla diferente (como un modelo o fabricante de pantalla diferente) al mismo puerto HDMI físico. Esto permite a los fabricantes de dispositivos proporcionar instrucciones para ensamblar y actualizar pantallas.

La asociación se configura en /vendor/etc/input-port-associations.xml . Por ejemplo:

<ports>
    <port display="0" input="usb-xhci-hcd.0.auto-1.1/input0" />
    <port display="1" input="usb-xhci-hcd.0.auto-1.2/input0" />
</ports>

En el ejemplo anterior, display="0" especifica el puerto al que está conectada la pantalla. input="usb-xhci-hcd.0.auto-1.1/input0" especifica el puerto al que está conectado el dispositivo de entrada. Para determinar los puertos asociados con dispositivos específicos, use el siguiente comando de terminal y luego revise la propiedad de location de esos dispositivos en el estado del centro de eventos.

adb shell dumpsys input

Si hay muchos dispositivos conectados, toque un dispositivo específico para examinar la matriz RecentQueue en el estado del distribuidor de entrada. Luego puede identificar los dispositivos que generaron el evento más reciente. Luego puede encontrar el dispositivo correspondiente en el Estado del centro de eventos.

Para determinar los puertos de pantalla asignados a las pantallas conectadas, use adb shell dumpsys display y luego busque la propiedad de address de DisplayDeviceInfo para cada pantalla en Dispositivos de pantalla. Alternativamente, use adb shell dumpsys SurfaceFlinger --display-id para volcar la información de identificación de todas las pantallas conectadas. Consulte también Identificadores de visualización estáticos .

Si especifica una asociación para un dispositivo de entrada específico y la pantalla correspondiente no está presente en el sistema, el dispositivo de entrada se deshabilita hasta que aparezca la pantalla correspondiente. La asociación se realiza solo para dispositivos táctiles.

Enrutamiento para pantallas múltiples dinámicas

Android 10 le permite configurar dispositivos estáticos de pantallas múltiples. Las asociaciones dinámicas aún no están habilitadas. Sin embargo, algunos casos de uso pueden abordarse proporcionando información de enrutamiento para pantallas y paneles de entrada que no siempre están presentes o utilizando dispositivos de entrada virtuales y luego proporcionando información de enrutamiento adicional a esos dispositivos virtuales. Si la implementación de un dispositivo admite:

  • Experiencia de escritorio con una estación de acoplamiento, luego se podría proporcionar una configuración de enrutamiento para la entrada de destino desde el accesorio de entrada conectado al muelle (identificado de forma exclusiva por el puerto) a la pantalla externa (identificado por el puerto).
  • La pantalla principal que actúa como fuente de entrada (como un panel táctil) cuando se conecta a la pantalla externa, luego se puede proporcionar una configuración de enrutamiento para la entrada de destino desde el panel táctil virtual (identificado por ID virtual único) a la pantalla externa (identificado por puerto) .

Implementación

  • Para dispositivos físicos, el puerto al que está conectado el dispositivo de entrada y el puerto al que está conectada la pantalla, se utilizan para unir las pantallas con pantallas táctiles.
  • Las asignaciones se almacenan en InputReaderConfiguration .
  • TouchInputMapper.mViewport se establece en la ventana TouchInputMapper.mViewport que coincide con el puerto especificado para InputDevice.location .
  • Si se especifica un puerto de dispositivo de entrada en el archivo de mapeo, y actualmente no hay una ventana gráfica que tenga un puerto de pantalla coincidente, entonces el dispositivo de entrada en ese puerto está deshabilitado.
  • Si no se especifica un puerto para un dispositivo de entrada en particular, la ventana gráfica se establece de acuerdo con las reglas existentes.
  • No se requieren cambios en el núcleo en los controladores de entrada.
  • Los puertos del dispositivo de entrada se determinan utilizando EVIOCGPHYS ioctl.