Los archivos de diseño de claves (.kl
archivos) asignan códigos de teclas de Linux y códigos de ejes
a los códigos de teclas y los códigos de ejes de Android, y especificar las marcas de política asociadas.
Los archivos de diseño de claves específicos del dispositivo son los siguientes:
- Obligatorio para los dispositivos de entrada internos (integrados) con claves, lo que incluye teclas especiales, como las teclas de volumen, de encendido y de los auriculares.
- Opcional para otros dispositivos de entrada, pero se recomienda para teclados y joysticks con propósitos especiales.
Si no hay disponible un archivo de diseño de claves específico del dispositivo, el sistema elige un en su lugar.
Ubicación
Los archivos de diseño de claves se ubican por proveedor de USB, producto (y, opcionalmente, versión) ID o ingresa el nombre del dispositivo. Las siguientes rutas se consultan en orden:
/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
Cuando se construye una ruta de acceso al archivo que contiene el nombre del dispositivo, todos los caracteres en el nombre del dispositivo que no sea "0", "9", "a" y "z", 'A'-'Z', '-' o “_” se reemplazan '_'.
Archivo de diseño de claves genérico
El sistema proporciona un archivo de diseño de clave genérico integrado y especial llamado
Generic.kl
Este diseño de clave está destinado a admitir una variedad de
teclados y joysticks externos estándar. No modifiques la clave genérica
.
Sintaxis
Un archivo de diseño de claves es un archivo de texto sin formato que consta de declaraciones de claves o ejes. y marcas.
Declaraciones de claves
Las declaraciones de clave consisten en la palabra clave key
seguida de una letra de Linux
el número del código de tecla y el nombre del código de clave de Android, o el uso de la palabra clave seguido de
Uso de HID y nombre del código de clave de Android. El uso de HID se representa como una red de
número entero, en el que los de 16 bits altos representan la página de uso de HID y los de 16 bits bajos
representan el ID de uso de HID. En cualquiera de las dos declaraciones, se puede llevar a cabo
de políticas delimitadas por espacios en blanco.
key 1 ESCAPE key 114 VOLUME_DOWN key 16 Q VIRTUAL key usage 0x0c006F BRIGHTNESS_UP
Se reconocen las siguientes marcas de política:
FUNCTION
: La clave se debe interpretar como si la tecla FUNCTION también se presionaron.GESTURE
: Es la clave que genera un gesto del usuario, como la palma de la mano. la pantalla táctil.VIRTUAL
: La tecla es una tecla programable virtual (botón capacitivo). junto a la pantalla táctil principal. Esto hace que se genere una lógica de desbordamiento especial habilitar (ver a continuación).
Declaraciones de ejes
Cada declaración de eje consiste en la palabra clave axis
seguida de un
Número de código del eje de Linux y calificadores que controlan el comportamiento del eje
que incluya al menos un nombre interno del eje de Android.
Ejes básicos
Un eje básico simplemente asigna un código de eje de Linux al nombre de código de un eje de Android. El
Los siguientes mapas de declaraciones ABS_X
(indicados por 0x00
)
a AXIS_X
(indicado por X
).
axis 0x00 X
En el ejemplo anterior, si el valor de ABS_X
es 5
.
entonces, AXIS_X
se establece en 5
.
Dividir ejes
Un eje de división asigna un código de eje de Linux a dos nombres de código de eje de Android, de modo que los valores menores o mayores que un umbral se dividen en dos ejes diferentes cuando se realice la asignación. Este mapeo es útil cuando un único eje físico informado por el el dispositivo codifica dos ejes lógicos diferentes que se excluyen mutuamente.
En la siguiente declaración, se asignan valores del eje ABS_Y
(indicado por 0x01
) a AXIS_GAS
cuando es menor que
0x7f
o a AXIS_BRAKE
cuando sea mayor que
0x7f
axis 0x01 split 0x7f GAS BRAKE
En el ejemplo anterior, si el valor de ABS_Y
es 0x7d
.
entonces, AXIS_GAS
se establece en 2
(0x7f - 0x7d
)
y AXIS_BRAKE
se establece en 0
. Por el contrario, si el valor
de ABS_Y
es 0x83
, entonces AXIS_GAS
se establece en
0
y AXIS_BRAKE
se estableció en 4
0x83 - 0x7f
. Por último, si el valor de ABS_Y
es igual a
el valor de la división de 0x7f
, luego, AXIS_GAS
y
Las AXIS_BRAKE
se establecen en 0
.
Ejes invertidos
Un eje invertido invierte el signo del valor del eje. Lo siguiente
la declaración asigna ABS_RZ
(indicado por 0x05
) a
AXIS_BRAKE
(indicado por BRAKE
) e invierte la
el resultado negándolo.
axis 0x05 invert BRAKE
En el ejemplo anterior, si el valor de ABS_RZ
es 2
.
entonces AXIS_BRAKE
se establece en -2
.
Opción plana central
Un dispositivo de joystick puede informar eventos de entrada, debido al ruido, incluso cuando no se utiliza el joystick. Por lo general, este ruido proviene de los palitos izquierdo o derecho y hace que el conductor acuerde un valor de posición cercano a 0. El "plano central" especifica la cantidad de ruido que se espera del controlador en reposo.
El protocolo de entrada de Linux permite que los controladores de dispositivos de entrada especifiquen
el valor central plano de los ejes del joystick, pero no todos los conductores lo informan y algunos de ellos proporcionan
valores incorrectos. Para resolver este problema, se puede seguir una declaración de eje con un
La opción flat
que especifica el ancho de la región alrededor del centro
del eje que debe considerarse centrado.
Por ejemplo, si un controlador de dispositivo informa valores para AXIS_X
entre 0 y 100, ocurrirá lo siguiente:
entonces, 0 se asignará a -1 y 100 a 1 mediante el sistema de entrada de Android.
El centro del rango será 50 en las coordenadas sin escala y 0 en las coordenadas a escala.
Si un valor plano es igual a 10,
los desarrolladores deberían suponer que cualquier valor de AXIS_X
informado entre
-0.1 y 0.1 (entre 40 y 60 en coordenadas sin escala) es ruido, y trata los valores que provienen
del joystick como cero.
Nota: Si bien el archivo de diseño de claves especifica el valor, para el espacio de coordenadas de los conductores, el valor que informa android.view.InputDevice.MotionRange#getFlat() está en el espacio de coordenadas.
axis 0x03 Z flat 4096
En el ejemplo anterior, el valor plano central se establece en 4096
.
Comentarios
Las líneas de comentarios comienzan con # y continúan hasta el final:
# A comment!
Se ignoran las líneas en blanco.
Ejemplos
Teclado
# 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...
Controles del sistema
# 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
Botones capacitivos
# 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
Controles multimedia del conector para auriculares
# 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
Teclas programables virtuales
El sistema de entrada proporciona funciones especiales para implementar teclas programables virtuales en los siguientes casos de uso:
- Si las teclas programables virtuales se muestran gráficamente en la pantalla (como en el Galaxy Nexus), las implementa el componente de la barra de navegación en el Paquete de IU del sistema. Debido a que las teclas programa virtuales gráficas se implementan a un alto del sistema, los archivos de diseño de claves no están involucrados y las siguientes no aplica esta información.
- Si las teclas programables virtuales se implementan como una región táctil extendida
parte de la pantalla táctil principal (como en el Nexus One), la entrada
usa un archivo de mapa de teclas virtuales para traducir coordenadas táctiles X/Y a
Códigos de teclas de Linux, luego usa el archivo de diseño de teclas para traducir los códigos de teclas de Linux
Códigos de teclas de Android (para obtener detalles sobre los archivos de mapas de claves virtuales, consulta
Dispositivos táctiles). El archivo de diseño de claves para el
El dispositivo de entrada con pantalla táctil debe especificar la asignación de teclas adecuada e incluir
la marca
VIRTUAL
de cada clave. - Si las teclas programables virtuales se implementan como botones capacitivos separados de
la pantalla táctil principal (como en el Nexus S), el controlador del dispositivo de kernel o
es responsable de traducir los toques en códigos de teclas de Linux que
El sistema de entrada de texto se traduce en códigos de teclas de Android mediante el archivo de diseño de claves.
El archivo de diseño de claves para el dispositivo de entrada del botón capacitivo debe especificar la
la asignación de teclas correspondiente y, también, incluya la marca
VIRTUAL
para cada tecla.
Cuando las teclas programables virtuales se encuentran cerca del teléfono o en un lugar cercano. la pantalla táctil, es fácil para los usuarios pulsar accidentalmente un botón cuando tocando cerca de la parte inferior de la pantalla o al deslizar el dedo de arriba abajo o de abajo hacia arriba en la pantalla. Para evitar esto, el sistema de entrada aplica un poco de rebote, de modo que las pulsaciones de las teclas virtuales virtuales se ignoran durante un período breve de tiempo después del toque más reciente en la pantalla táctil (esta demora se denomina tiempo de inactividad de clave virtual).
Para habilitar la recuperación de la tecla programable virtual, haz lo siguiente:
- Proporciona un archivo de diseño de teclas para la pantalla táctil o el botón capacitivo
dispositivo de entrada con la marca
VIRTUAL
establecida para cada teclakey 139 MENU VIRTUAL key 172 HOME VIRTUAL key 158 BACK VIRTUAL key 217 SEARCH VIRTUAL
- Establece el valor del tiempo de descanso de la clave virtual en una superposición de recursos para la
framework
config.xml
.<!-- 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>
Validación
Debes validar tus archivos de diseño clave con el Herramienta Validar mapas de teclas.