Google se compromete a avanzar en 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

Entrada

Entrada androide icono de HAL

El subsistema de entrada Android nominalmente consiste en una línea canalizada de sucesos que atraviesa múltiples capas del sistema.

Tubería de entrada

En la capa más baja, el dispositivo de entrada física produce señales que describen cambios de estado tales como pulsaciones de teclas y puntos de contacto táctil. El firmware del dispositivo codifica y transmite estas señales de alguna manera, como mediante el envío de informes HID USB al sistema o produciendo interrupciones en un bus I2C.

Las señales son decodificadas por un controlador de dispositivo en el kernel de Linux. El núcleo de Linux proporciona a los conductores para muchos periféricos estándar, en particular los que se adhieren al protocolo HID. Sin embargo, un OEM debe proporcionar a los conductores a menudo personalizadas para dispositivos embebidos que están estrechamente integradas en el sistema a un bajo nivel, tales como pantallas táctiles.

Los controladores de dispositivos de entrada son responsables de traducir las señales de dispositivo específicos en un formato de evento de entrada estándar, por medio del protocolo de entrada de Linux. El protocolo de entrada de Linux define un conjunto estándar de tipos de eventos y códigos en el linux/input.h archivo de núcleo cabecera. De esta manera, los componentes fuera del núcleo no necesitan el cuidado de los detalles físicos, como los códigos de exploración, usos HID, mensajes I2C, pines GPIO, y similares.

A continuación, el Android EventHub componente lee eventos de entrada desde el núcleo al abrir la evdev controlador asociado a cada dispositivo de entrada. El componente Android InputReader luego decodifica los eventos de entrada de acuerdo con la clase de dispositivo y produce una corriente de eventos de entrada Android. Como parte de este proceso, los códigos de eventos protocolo de entrada de Linux se traducen en códigos de eventos Android de acuerdo a la configuración del dispositivo de entrada, archivos de diseño de teclado, y varias tablas de asignación.

Por último, el InputReader envía eventos de entrada a la InputDispatcher que les remite a la ventana apropiada.

Puntos de control

Hay varias etapas en la tubería de entrada que de control del efecto sobre el comportamiento del dispositivo de entrada.

Conductor y configuración del firmware

controladores de dispositivos de entrada con frecuencia configuran el comportamiento del dispositivo de entrada mediante el establecimiento de parámetros en los registros o incluso la posibilidad de subir el firmware. Este es particularmente el caso para dispositivos embebidos, tales como pantallas táctiles donde una gran parte del proceso de calibración implica sintonización estos parámetros o fijar el firmware para proporcionar la precisión deseada y la capacidad de respuesta y al ruido de supresión.

Opciones de configuración del controlador a menudo se especifican como parámetros de módulo en el paquete de soporte de la placa del núcleo (BSP) de manera que el mismo conductor puede soportar múltiples implementaciones de hardware diferentes.

Esta documentación no pretende describir configuración del controlador o firmware, pero ofrece orientación en cuanto a la calibración del dispositivo en general.

Propiedades de configuración de la tarjeta

El paquete de soporte de la placa del núcleo (BSP) puede exportar propiedades de configuración bordo a través de SysFS que son utilizadas por el componente de Android InputReader, tales como la colocación de teclas virtuales en una pantalla táctil.

Consulte las secciones clase de dispositivo para detalles acerca de cómo diferentes dispositivos utilizan las propiedades de configuración de mesa.

Superposiciones de recursos

Unos comportamientos de entrada se configuran a través de superposiciones de recursos en config.xml como el funcionamiento del interruptor de la tapa.

Aquí están algunos ejemplos:

  • config_lidKeyboardAccessibility : Especifica el efecto del interruptor de la tapa de si el teclado de hardware es accesible o escondido.

  • config_lidNavigationAccessibility : Especifica el efecto del interruptor de la tapa de si el panel táctil es accesible o escondido.

  • config_longPressOnPowerBehavior : Especifica lo que debe ocurrir cuando el usuario presiona el botón de encendido.

  • config_lidOpenRotation : especifica el efecto de la interruptor de la tapa en la orientación de la pantalla.

Consulte la documentación dentro de frameworks/base/core/res/res/values/config.xml para detalles sobre cada opción de configuración.

Mapas clave

Mapas clave son utilizados por el Android EventHub y InputReader componentes para configurar la asignación de códigos de evento de Linux a los códigos de eventos para Android teclas, botones del joystick y ejes del joystick. El mapeo puede ser dispositivo o depende del idioma.

Consulte las secciones de clase de dispositivo para detalles acerca de cómo los diferentes dispositivos de utilizar mapas de teclado.

Los archivos de configuración de dispositivos de entrada

Los archivos de configuración de dispositivos de entrada son utilizados por el Android EventHub y InputReader componentes para configurar características de los dispositivos especiales, tales como cómo se informa información táctil.

Consulte las secciones clase de dispositivo para detalles acerca de cómo los diferentes dispositivos de utilizar los mapas de configuración del dispositivo de entrada.

La comprensión de los códigos de HID Usos y eventos

A menudo hay varios identificadores diferentes que se utilizan para referirse a cualquier llave dada en un teclado, el botón en un dispositivo de juego, el eje de la palanca de mando u otro control. Las relaciones entre estos identificadores no siempre son los mismos: son dependientes de un conjunto de tablas de asignación, algunos de los que están fijados, y algunos que varían en función de las características del dispositivo, el controlador de dispositivo, la localización actual, la configuración del sistema, las preferencias del usuario y otros factores.

Código de exploración física

Un código de exploración física es un identificador de dispositivo específico que está asociado con cada tecla, botón u otro control. Debido a que los códigos de exploración físicos a menudo varían de un dispositivo a otro, el firmware o controlador de dispositivo es responsable de mapear a los identificadores estándar, tales como HID Usos o los códigos clave de Linux.

códigos de exploración son de interés principalmente para los teclados. Otros dispositivos típicamente se comunican a un bajo nivel usando pines GPIO, mensajes I2C u otros medios. En consecuencia, las capas superiores de la pila de software se basan en los controladores de dispositivo para dar sentido a lo que está pasando.

Uso de HID

Un uso HID es un identificador estándar que se utiliza para informar del estado de un control como una tecla del teclado, eje joystick, botón del ratón, o punto de contacto táctil. La mayoría de dispositivos de entrada Bluetooth USB y se ajustan a la especificación HID, que permite al sistema interactuar con ellos de una manera uniforme.

El Marco de Android se basa en los controladores del núcleo de Linux HID para traducir códigos de uso HID en los códigos de clave de Linux y otros identificadores. Por lo tanto usos HID son principalmente de interés para los fabricantes de periféricos.

Llave de código de Linux

Un código de clave de Linux es un identificador estándar para una tecla o botón. Los códigos de clave de Linux se definen en el linux/input.h archivo de cabecera utilizando constantes que comienzan con el prefijo KEY_ o BTN_ . Controladores de entrada del kernel de Linux son responsables de traducir códigos de análisis físicos, usos HID y otras señales de dispositivo específicos en códigos de clave de Linux y la entrega de información sobre ellos como parte de EV_KEY eventos.

La API de Android a veces se refiere al código de la llave Linux asociado a una clave como su "código de exploración". Esto es técnicamente incorrecto en sino que ayuda a distinguir los códigos de clave de Linux de códigos de teclas Android en el API.

Linux relativa o absoluta Código Eje

A Linux código eje relativa o absoluta es un identificador estándar para la presentación de informes movimientos relativos o posiciones absolutas a lo largo de un eje, como los movimientos relativos de un ratón a lo largo de su eje X o la posición absoluta de una palanca de mando a lo largo de su eje X. Código de Linux eje se definen en el linux/input.h archivo de cabecera utilizando constantes que comienzan con el prefijo REL_ o ABS_ . Controladores de entrada del kernel de Linux son responsables de la traducción usos HID y otras señales de dispositivo específicos en Linux eje códigos y la entrega de información sobre ellos como parte de EV_REL y EV_ABS eventos.

Interruptor de código de Linux

Un código de interruptor de Linux es un identificador estándar para informar el estado de un interruptor en un dispositivo, tal como un interruptor de la tapa. Códigos de conmutación de Linux se definen en el linux/input.h archivo de cabecera utilizando constantes que comienzan con el prefijo SW_ . Controladores de entrada del kernel de Linux informan de los cambios de estado del interruptor como EV_SW eventos.

aplicaciones Android en general no reciben eventos de interruptores, pero el sistema puede utilizar internamente para controlar diversas funciones del dispositivo específicos.

Llave de código Android

Un código de clave Android es un identificador estándar definido en la API de Android para indicar una tecla particular, como 'HOME'. Los códigos de clave de Android están definidos por la android.view.KeyEvent clase como constantes que comienzan con el prefijo KEYCODE_ .

Está previsto por la disposición de las teclas de cómo los códigos de clave de Linux están asignados a los códigos de teclas Android. Las diferentes distribuciones de teclas se pueden utilizar dependiendo del modelo de teclado, idioma, país, diseño, o funciones especiales.

Las combinaciones de códigos de teclas Android se transforman en códigos de caracteres utilizando un dispositivo y la configuración regional específica mapa de caracteres clave. Por ejemplo, cuando las claves identificados como KEYCODE_SHIFT y KEYCODE_A se presionan entre sí tanto, las miradas del sistema hasta la combinación en el mapa tecla de carácter y encuentra la letra mayúscula 'A', que se inserta a continuación en el widget de texto centrado actualmente.

Código Eje Android

código de un androide eje es un identificador estándar definido en la API de Android para indicar un eje dispositivo particular. Códigos eje Android se definen por el android.view.MotionEvent clase como constantes que comienzan con el prefijo AXIS_ .

Está previsto por la disposición de las teclas cómo los códigos del Eje Linux se asignan a Android eje códigos. Las diferentes distribuciones de teclas se pueden utilizar dependiendo del modelo de dispositivo, idioma, país, diseño, o funciones especiales.

Android Meta Estado

Un estado meta Android es un identificador estándar definido en la API de Android para indicar qué teclas modificadoras se presionan. Estados de la meta Android se definen por el android.view.KeyEvent clase como constantes que comienzan con el prefijo META_ .

El estado meta actual se determina por el componente Android InputReader que monitores cuando teclas modificadoras tales como KEYCODE_SHIFT_LEFT se presionan / liberados y sistemas / restablece el indicador de estado meta apropiada.

La relación entre las teclas modificadoras y estados de la meta está codificado pero la disposición de las teclas puede alterar la forma en las teclas modificadoras se asignan a sí mismos que a su vez afecta a los estados de la meta.

Android Estado Botón

Un estado de botón Android es un identificador estándar definido en la API de Android para indicar qué botones (en un ratón o lápiz óptico) se presionan. Estados de los botones de Android están definidos por la android.view.MotionEvent clase como constantes que comienzan con el prefijo BUTTON_ .

El estado de botón corriente se determina por el componente Android InputReader que monitores cuando se presionan los botones (en un ratón o lápiz óptico) / liberados y sistemas / restablece bandera del estado botón apropiado.

La relación entre los botones y estados del botón está codificado.

Otras lecturas

  1. Códigos de eventos de entrada de Linux
  2. Protocolo multi-touch Linux
  3. Controladores de entrada de Linux
  4. Force Feedback Linux
  5. HID información, incluyendo tablas de uso de HID