Fichiers de mise en page des touches

Les fichiers de disposition des clés (.kl fichiers) mappent les codes clés et les codes des axes Linux aux codes clés et aux codes d'axe Android, et spécifier les indicateurs de stratégie associés. Les fichiers de disposition des touches spécifiques à l'appareil sont les suivants:

  • Obligatoire pour les périphériques d'entrée internes (intégrés) dotés de clés, y compris touches spéciales telles que le volume, le bouton Marche/Arrêt et les touches multimédias des casques.
  • Facultatif pour les autres périphériques d'entrée, mais recommandé pour des claviers et des joysticks spéciaux.

Si aucun fichier de disposition de clé spécifique à l'appareil n'est disponible, le système choisit un par défaut.

Position

Les fichiers de disposition des clés sont localisés en fonction du fournisseur de la clé USB, du produit (et de la version facultative) ou par nom de périphérique d'entrée. Les chemins d'accès suivants sont consultés dans l'ordre:

  • /odm/usr/keylayout/Vendor_XXXX_Product_XXXX_Version_XXXX.kl
  • /vendor/usr/keylayout/Vendor_XXXX_Product_XXXX_Version_XXXX.kl
  • /system/usr/keylayout/Vendor_XXXX_Product_XXXX_Version_XXXX.kl
  • /data/system/devices/keylayout/Vendor_XXXX_Product_XXXX_Version_XXXX.kl
  • /odm/usr/keylayout/Vendor_XXXX_Product_XXXX.kl
  • /vendor/usr/keylayout/Vendor_XXXX_Product_XXXX.kl
  • /system/usr/keylayout/Vendor_XXXX_Product_XXXX.kl
  • /data/system/devices/keylayout/Vendor_XXXX_Product_XXXX.kl
  • /odm/usr/keylayout/DEVICE_NAME.kl
  • /vendor/usr/keylayout/DEVICE_NAME.kl
  • /system/usr/keylayout/DEVICE_NAME.kl
  • /data/system/devices/keylayout/DEVICE_NAME.kl
  • /odm/usr/keylayout/Generic.kl
  • /vendor/usr/keylayout/Generic.kl
  • /system/usr/keylayout/Generic.kl
  • /data/system/devices/keylayout/Generic.kl

Lorsque vous créez un chemin d'accès contenant le nom de l'appareil, tous les caractères dans le nom de l'appareil autre que "0" - "9", "a" - "z", 'A'-'Z', '-' ou "_" sont remplacés par '_'.

Fichier de mise en page générique

Le système fournit un fichier générique intégré spécial de disposition de clé, appelé Generic.kl Cette disposition de clé est conçue pour prendre en charge divers claviers et joysticks externes standards. Ne modifiez pas la clé générique mise en page !

Syntaxe

Un fichier de mise en page de clé est un fichier au format texte brut contenant des déclarations de clé ou d'axe. et les indicateurs.

Déclarations de clé

Les déclarations de clé sont composées du mot clé key suivi d'une expression le numéro de code de la clé et le nom du code Android, ou l'utilisation du mot clé suivie d'un Utilisation HID et nom du code de la clé Android. L'utilisation de HID est représentée par un code Entier, où les 16 bits élevés représentent la page d'utilisation HID et les 16 bits faibles représente l'ID d'utilisation HID. L'une ou l'autre de ces déclarations peut être suivie d'une déclaration d'un ensemble d'indicateurs de règle séparés par des espaces blancs.

key 1     ESCAPE
key 114   VOLUME_DOWN
key 16    Q                 VIRTUAL
key usage 0x0c006F          BRIGHTNESS_UP

Les indicateurs de stratégie suivants sont reconnus:

  • FUNCTION: la clé doit être interprétée comme si la touche FUNCTION ont également appuyé dessus.
  • GESTURE: touche générée par un geste de l'utilisateur, tel que l'utilisation de la paume de la main. l'écran tactile.
  • VIRTUAL: la touche est une touche programmable virtuelle (bouton captif) à côté de l'écran tactile principal. Cela entraîne la création d'une logique spéciale (voir ci-dessous).

Déclarations d'axe

Les déclarations d'axe se composent chacune du mot clé axis suivi d'un Numéro de code d'axe Linux et qualificatifs qui contrôlent le comportement de l'axe incluant au moins un nom de code d'axe Android.

Axes de base

Un axe de base mappe simplement un code d'axe Linux à un nom de code d'axe Android. La La déclaration suivante mappe ABS_X (indiqué par 0x00) sur AXIS_X (indiqué par X).

axis 0x00 X

Dans l'exemple ci-dessus, si la valeur de ABS_X est 5 alors AXIS_X est défini sur 5.

Diviser les axes

Un axe fractionné mappe un code d'axe Linux avec deux noms de code d'axe Android, de sorte que : les valeurs inférieures ou supérieures à un seuil sont réparties sur deux axes différents lorsqu'il est mappé. Cette mise en correspondance est utile lorsqu'un seul axe physique signalé par appareil encode deux axes logiques différents qui s’excluent mutuellement.

La déclaration suivante mappe les valeurs de l'axe ABS_Y (indiqué par 0x01) à AXIS_GAS si elle est inférieure à 0x7f ou AXIS_BRAKE si supérieur à 0x7f

axis 0x01 split 0x7f GAS BRAKE

Dans l'exemple ci-dessus, si la valeur de ABS_Y est 0x7d alors AXIS_GAS est défini sur 2 (0x7f - 0x7d) et AXIS_BRAKE est défini sur 0. À l'inverse, si la valeur de ABS_Y est 0x83, alors AXIS_GAS est défini sur La valeur de 0 et AXIS_BRAKE est 4 (0x83 - 0x7f). Enfin, si la valeur de ABS_Y correspond à la valeur de fractionnement de 0x7f, puis à la fois AXIS_GAS et AXIS_BRAKE est défini sur 0.

Axes inversés

Un axe inversé inverse le signe de la valeur de l'axe. Les éléments suivants : déclaration mappe ABS_RZ (indiqué par 0x05) à AXIS_BRAKE (indiqué par BRAKE) et inverse la valeur de sortie en les ignorant.

axis 0x05 invert BRAKE

Dans l'exemple ci-dessus, si la valeur de ABS_RZ est 2 alors AXIS_BRAKE est défini sur -2.

Option Centrer le plat

Un joystick peut signaler des événements d'entrée même lorsqu'il n'est pas utilisé, en raison du bruit. Ces bruits proviennent généralement des crosses de gauche et/ou de droite, et le conducteur signale une valeur de position proche de 0. Le "plat central" spécifie la quantité de bruit attendue de la manette au repos.

Le protocole d'entrée Linux permet aux pilotes de périphériques d'entrée de spécifier la valeur centrale et plate des axes du joystick, mais tous les conducteurs ne la signalent pas et certains d'entre eux fournissent des valeurs incorrectes. Pour résoudre ce problème, une déclaration d'axe peut être suivie d'un Option flat qui spécifie la largeur de la région autour du centre de l'axe qui doit être considéré comme centré.

Par exemple, si un pilote d'appareil signale des valeurs AXIS_X comprises entre 0 et 100, 0 sera mappé à -1, et 100 à 1 par le système d'entrée Android. Le centre de la plage est égal à 50 pour les coordonnées non mises à l'échelle et 0 pour les coordonnées mises à l'échelle. Si une valeur forfaitaire est égale à 10, les développeurs doivent partir du principe que toute valeur AXIS_X indiquée entre -0,1 et 0,1 (entre 40 et 60 pour les coordonnées non mises à l'échelle) correspondent au bruit, et nous traitons ces valeurs du joystick à zéro.

Remarque: Bien que le fichier de mise en page de la clé spécifie la valeur pour l'espace des coordonnées du conducteur, la valeur signalée par android.view.InputDevice.MotionRange#getFlat() se trouve dans le l'espace de coordonnées.

axis 0x03 Z flat 4096

Dans l'exemple ci-dessus, la valeur médiane est définie sur 4096.

Commentaires

Les lignes de commentaire commencent par # et se terminent jusqu'à la fin de la ligne:

# A comment!

Les lignes vides sont ignorées.

Exemples

Clavier

# This is an example of a key layout file for a keyboard.

key 1     ESCAPE
key 2     1
key 3     2
key 4     3
key 5     4
key 6     5
key 7     6
key 8     7
key 9     8
key 10    9
key 11    0
key 12    MINUS
key 13    EQUALS
key 14    DEL

# etc...

Commandes système

# This is an example of a key layout file for basic system controls,
# such as volume and power keys which are typically implemented as GPIO pins
# the device decodes into key presses.

key 114   VOLUME_DOWN
key 115   VOLUME_UP
key 116   POWER

Boutons capacitifs

# This is an example of a key layout file for a touch device with capacitive buttons.

key 139    MENU           VIRTUAL
key 172    HOME           VIRTUAL
key 158    BACK           VIRTUAL
key 217    SEARCH         VIRTUAL

Commandes multimédias du connecteur casque

# This is an example of a key layout file for headset mounted media controls.
# A typical headset jack interface might have special control wires or detect known
# resistive loads as corresponding to media functions or volume controls.
# This file assumes that the driver decodes these signals and reports media
# controls as key presses.

key 163   MEDIA_NEXT
key 165   MEDIA_PREVIOUS
key 226   HEADSETHOOK

Joystick

# This is an example of a key layout file for a joystick.

# These are the buttons that the joystick supports, represented as keys.
key 304   BUTTON_A
key 305   BUTTON_B
key 307   BUTTON_X
key 308   BUTTON_Y
key 310   BUTTON_L1
key 311   BUTTON_R1
key 314   BUTTON_SELECT
key 315   BUTTON_START
key 316   BUTTON_MODE
key 317   BUTTON_THUMBL
key 318   BUTTON_THUMBR

# Left and right stick.
# The reported value for flat is 128 in a range of -32767 to 32768, which is absurd.
# This confuses applications that rely on the flat value because the joystick
# actually settles in a flat range of +/- 4096 or so. We override it here.
axis 0x00 X flat 4096
axis 0x01 Y flat 4096
axis 0x03 Z flat 4096
axis 0x04 RZ flat 4096

# Triggers.
axis 0x02 LTRIGGER
axis 0x05 RTRIGGER

# Hat.
axis 0x10 HAT_X
axis 0x11 HAT_Y

Touches programmables virtuelles

Le système de saisie fournit des fonctionnalités spéciales pour implémenter des touches programmables virtuelles. dans les cas d'utilisation suivants:

  1. Si les touches programmables virtuelles sont affichées à l'écran (par exemple, le Galaxy Nexus), ils sont mis en œuvre par le composant Navigation Bar dans Package UI du système. Comme les touches programmables virtuelles virtuelles sont implémentées avec une du système, les fichiers de mise en page des clés ne sont pas impliqués et les éléments suivants ne s'applique pas.
  2. Si les touches programmables virtuelles sont implémentées en tant que zone tactile étendue qui fait partie de l'écran tactile principal (comme sur le Nexus One), l'entrée utilise un fichier de mappage de touches virtuelles pour convertir les coordonnées tactiles X/Y en les codes de touches Linux, puis utilise le fichier de disposition des touches pour les traduire en Codes de clé Android (pour en savoir plus sur les fichiers de mappage de clés virtuelles, consultez Appareils tactiles). Le fichier de disposition des touches le périphérique d'entrée à écran tactile doit spécifier le mappage des touches approprié et inclure l'option VIRTUAL pour chaque clé.
  3. Si les touches programmables virtuelles sont implémentées en tant que boutons capacitifs distincts de l'écran tactile principal (comme sur le Nexus S), le pilote du noyau ou du micrologiciel est chargé de traduire les gestes en codes de touche Linux que le le système d'entrée est ensuite converti en codes de touche Android à l'aide du fichier de disposition des touches. Le fichier de disposition des touches du périphérique d'entrée à boutons capacitif doit spécifier le paramètre le mappage de clé approprié et inclure l'option VIRTUAL pour chaque clé.

Lorsque les touches programmables virtuelles se trouvent à l'intérieur ou à proximité physique l'écran tactile, il est facile pour les utilisateurs d'appuyer accidentellement sur un bouton lorsque en touchant le bas de l'écran, ou lorsque vous faites glisser un doigt du haut vers le bas ou de bas en haut sur l'écran. Pour éviter cela, le système d'entrée applique un peu de manière à ignorer pendant une courte période les pressions sur les touches virtuelles après la dernière pression sur l'écran tactile (ce délai est appelé temps silencieux de la clé virtuelle).

Pour activer le blocage des touches programmables virtuelles, procédez comme suit:

  1. Fournir un fichier de disposition des touches pour l'écran tactile ou le bouton capacitif périphérique d'entrée avec l'indicateur VIRTUAL défini pour chaque touche.
    key 139    MENU           VIRTUAL
    key 172    HOME           VIRTUAL
    key 158    BACK           VIRTUAL
    key 217    SEARCH         VIRTUAL
    
  2. Définissez la valeur du temps silencieux de la clé virtuelle dans une superposition de ressources pour la ressource config.xml du framework.
    <!-- Specifies the amount of time to disable virtual keys after the screen
    is touched to filter out accidental virtual key presses due to swiping gestures
    or taps near the edge of the display. May be 0 to disable the feature.
    It is recommended that this value be no more than 250 ms.
    This feature should be disabled for most devices. -->
    
    <integer name="config_virtualKeyQuietTimeMillis">250</integer>
    

Validation

Vous devez valider vos fichiers de mise en page des clés à l'aide de la méthode Outil Validate Keymaps (Valider les mappages de clavier)