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:
- 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.
- 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é. - 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:
- 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
- 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)