Routage des entrées

Sous Android 9 et versions antérieures, il était impossible d'interagir avec plusieurs écrans. par commande tactile, car il n'y avait pas de mécanisme d'association entre les écrans et la saisie appareils. Par exemple, un écran tactile peut fournir une sortie vidéo HDMI. (qui serait enregistré comme écran sur Android) et une sortie USB pour l'écran tactile (qui serait enregistré en tant que périphérique d'entrée). Si plusieurs appareils étaient connectés en de cette manière, il n'y aurait aucun moyen de déterminer quel périphérique d'entrée appartient qui s'affichent. Le même problème s'applique aux appareils pliables dotés de plusieurs fonctionnalités s'affiche.

Android 10 a ajouté un mécanisme permettant de spécifier quels appareils appartiennent à quels écrans. L'association se fait par des numéros de port où port fait référence au port physique auquel un écran est connecté.

Par exemple, si un appareil Android est équipé de deux ports HDMI portant le libellé hdmi1 et hdmi2, les valeurs du port d'affichage peuvent être 1 et 2 Les valeurs des ports restent les mêmes même lorsqu'un écran différent est (un modèle d'écran ou un fabricant différent, par exemple) au même réseau Port HDMI. Cela permet aux fabricants d'appareils de fournir des instructions d'assemblage et mettre à niveau les écrans.

L'association est configurée dans /vendor/etc/input-port-associations.xml. Exemple :

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

Dans l'exemple ci-dessus, display="0" spécifie le port sur lequel l'écran est connecté. input="usb-xhci-hcd.0.auto-1.1/input0" spécifie le port auquel le périphérique d'entrée est connecté. Pour déterminer les ports associés à des appareils spécifiques, utilisez la commande de terminal suivante, puis examiner la propriété location de ces appareils dans l'état du hub d'événements.

adb shell dumpsys input

Si plusieurs appareils sont connectés, appuyez sur un appareil spécifique pour l'examiner Tableau RecentQueue dans l'état du coordinateur d'entrée. Vous pouvez ensuite identifier les appareils qui ont généré l'événement le plus récent. Dans ce cas, l'appareil correspondant dans l'état Event Hub.

Pour déterminer les ports d'affichage attribués aux écrans connectés, utilisez adb shell dumpsys display, puis recherchez address de DisplayDeviceInfo pour chaque écran sous "Display Devices" (Appareils d'affichage). Vous pouvez également utiliser adb shell dumpsys SurfaceFlinger --display-id pour vider d'identification de tous les écrans connectés. Voir aussi Identifiants d'affichage statique.

Si vous spécifiez une association pour un périphérique d'entrée spécifique et pour n'apparaît pas dans le système, le périphérique d'entrée est désactivé jusqu'à ce que le l'écran s'affiche. L'association n'est effectuée que pour les appareils tactiles.

Routage pour les multi-écrans dynamiques

Android 10 vous permet de configurer l'affichage multi-écran statique appareils. Les associations dynamiques ne sont pas encore activées. Toutefois, certains cas d'utilisation en fournissant des informations de routage pour les écrans et les panneaux de saisie qui ne sont pas ou utilisent toujours des périphériques d'entrée virtuels, et fournissent un routage supplémentaire des informations à ces appareils virtuels. Si l'implémentation d'un appareil est compatible avec:

  • comme sur un ordinateur de bureau avec une station d'accueil, une configuration d'itinéraire peut être fourni à l'entrée cible de l'accessoire d'entrée connecté à la station d'accueil (identifié de manière unique par port) à l'écran externe (identifié par le port).
  • Écran principal servant de source d'entrée (un pavé tactile, par exemple) lorsqu'il est connecté à l'écran externe, une configuration de routage peut être fournie à l'entrée cible depuis un écran tactile virtuel (identifié par un ID virtuel unique) vers l'écran externe (identifié par le port).

Implémentation

  • Pour les appareils physiques, le port auquel le périphérique d'entrée est connecté et le auquel l'écran est connecté, sont utilisés pour faire correspondre les écrans avec des écrans tactiles.
  • Les mappages sont stockés dans InputReaderConfiguration.
  • TouchInputMapper.mViewport est défini sur la fenêtre d'affichage qui correspond au port spécifié pour InputDevice.location.
  • Si un port de périphérique d'entrée est spécifié dans le fichier de mappage et qu'il existe n'est pas une fenêtre d'affichage avec un port d'affichage correspondant, l'entrée périphérique sur ce port est désactivé.
  • Si aucun port n'est spécifié pour un périphérique d'entrée particulier, la fenêtre d'affichage conformément aux règles existantes.
  • Aucune modification du noyau n'est requise dans les pilotes d'entrée.
  • Les ports des périphériques d'entrée sont déterminés à l'aide de l'ioctl EVIOCGPHYS.