File di layout dei tasti

I file di layout dei tasti (.kl file) mappano i codici chiave e i codici assi di Linux ai codici chiave e ai codici asse Android e specificare i flag di criteri associati. I file di layout della chiave specifici per dispositivo sono:

  • Obbligatorio per i dispositivi di input interni (integrati) con tasti, tra cui tasti speciali, come il volume, il tasto di accensione e i tasti multimediali delle cuffie.
  • Facoltativo per gli altri dispositivi di input, ma consigliato per tastiere e joystick speciali.

Se non è disponibile alcun file di layout della chiave specifico per dispositivo, il sistema sceglie un predefinito.

Posizione

I file di layout chiave si trovano per fornitore USB, prodotto (e versione facoltativa) ID o per nome del dispositivo di input. I seguenti percorsi vengono consultati in ordine:

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

Quando crei un percorso file che contiene il nome del dispositivo, tutti i caratteri nel nome del dispositivo diverso da "0"-"9", "a"-"z", "A"-"Z", "-" o "_" sono sostituiti da '_'.

File di layout chiavi generico

Il sistema fornisce uno speciale file di layout dei tasti generico incorporato, chiamato Generic.kl. Questo layout chiave è pensato per supportare diverse joystick e tastiere esterni standard. Non modificare la chiave generica layout.

Sintassi

Un file di layout chiave è un file di testo normale composto da dichiarazioni chiave o asse e flag.

Dichiarazioni chiave

Le dichiarazioni chiave sono composte dalla parola chiave key seguita da un prompt numero del codice della chiave e nome del codice della chiave Android oppure l'utilizzo della parola chiave seguito da un Utilizzo dell'HID e nome del codice della chiave Android. L'utilizzo dell'HID è rappresentato da un modello numero intero, dove i 16 bit alti rappresentano la pagina di utilizzo dell'HID e i 16 bit bassi rappresentano l'ID di utilizzo dell'HID. Entrambe le dichiarazioni possono essere seguite da un'intestazione facoltativa insieme di flag di criteri delimitati da spazi vuoti.

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

Sono riconosciuti i seguenti flag delle norme:

  • FUNCTION: il tasto deve essere interpretato come se fosse il tasto FUNZIONE sono stati premute.
  • GESTURE: la chiave generata dal gesto dell'utente, ad esempio il palmo della mano sul touchscreen.
  • VIRTUAL: il tasto è un tasto software virtuale (pulsante capacitivo) adiacente al touchscreen principale. Questo fa sì che venga applicata una logica di debouncing speciale sono attivate (vedi di seguito).

Dichiarazioni dell'asse

Ciascuna dichiarazione dell'asse è composta dalla parola chiave axis seguita da una Numero di codice dell'asse Linux e qualificatori che controllano il comportamento dell'asse incluso almeno un nome in codice dell'asse Android.

Assi base

Un asse di base mappa semplicemente un codice asse Linux a un nome in codice asse Android. La la seguente dichiarazione mappa ABS_X (indicata da 0x00) a AXIS_X (indicato da X).

axis 0x00 X

Nell'esempio precedente, se il valore di ABS_X è 5 allora AXIS_X è impostato su 5.

Assi separati

Un asse diviso mappa un codice asse Linux a due nomi in codice assi Android, in modo che i valori inferiori o superiori a una soglia sono suddivisi tra due assi diversi una volta mappata. Questa mappatura è utile quando un singolo asse fisico riportato dal codifica due diversi assi logici che si escludono a vicenda.

La seguente dichiarazione mappa i valori dell'asse ABS_Y (indicato da 0x01) a AXIS_GAS quando è inferiore a 0x7f o a AXIS_BRAKE se superiore a 0x7f.

axis 0x01 split 0x7f GAS BRAKE

Nell'esempio precedente, se il valore di ABS_Y è 0x7d poi AXIS_GAS è impostato su 2 (0x7f - 0x7d) e AXIS_BRAKE è impostato su 0. Al contrario, se il valore di ABS_Y è 0x83, quindi AXIS_GAS è impostato su 0 e AXIS_BRAKE sono impostati su 4 (0x83 - 0x7f). Infine, se il valore di ABS_Y è uguale il valore di suddivisione di 0x7f quindi sia AXIS_GAS che AXIS_BRAKE sono impostati su 0.

Assi invertiti

Un asse invertito inverte il segno del valore dell'asse. Le seguenti la dichiarazione mappa ABS_RZ (indicata da 0x05) a AXIS_BRAKE (indicato da BRAKE) e inverte il annulla l'output.

axis 0x05 invert BRAKE

Nell'esempio precedente, se il valore di ABS_RZ è 2 allora AXIS_BRAKE è impostato su -2.

Opzione centrale

A causa di rumori, un joystick potrebbe segnalare eventi di input anche quando non è in uso. Questo rumore in genere proviene dalle levette sinistro e/o destro e porta il conducente a segnalare un valore di posizione vicino a 0. Il "piano centrale" specifica la quantità di rumore che il controller può aspettarsi.

Il protocollo di input Linux consente ai driver di periferiche di input di specificare il valore centrale piatto degli assi del joystick, ma non tutti i conducenti lo riferiscono e alcuni forniscono valori errati. Per risolvere il problema, una dichiarazione di asse può essere seguita da un Opzione flat che specifica la larghezza dell'area attorno al centro Posizione dell'asse che deve essere considerata centrata.

Ad esempio, se un driver di dispositivo riporta valori per AXIS_X compresi tra 0 e 100, 0 verrà mappato a -1 e 100 verrà mappato a 1 dal sistema di input Android. Il centro dell'intervallo sarà 50 nelle coordinate non in scala e 0 nelle coordinate scalate. Se un valore fisso è pari a 10, gli sviluppatori dovrebbero presupporre che qualsiasi valore AXIS_X riportato tra -0,1 e 0,1 (tra 40 e 60 nelle coordinate non in scala) è rumore e tratta questi valori dal joystick come zero.

Nota: anche se il file di layout delle chiavi specifica il valore, per lo spazio delle coordinate del conducente, il valore riportato da android.view.InputDevice.MotionRange#getFlat() è nella directory Android spazio di coordinate.

axis 0x03 Z flat 4096

Nell'esempio precedente, il valore della colonna centrale è impostato su 4096.

Commenti

Le righe dei commenti iniziano con # e continuano fino alla fine:

# A comment!

Le righe vuote vengono ignorate.

Esempi

Tastiera

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

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

Pulsanti capacitivi

# 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

Controlli multimediali jack per cuffie

# 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

Tasti software virtuali

Il sistema di immissione offre funzioni speciali per l'implementazione di tasti software virtuali nei seguenti casi d'uso:

  1. Se i tasti software virtuali sono visualizzati graficamente sullo schermo (ad esempio, il Galaxy Nexus), sono implementati dal componente Barra di navigazione Pacchetto UI di sistema. Poiché i tasti software virtuali grafici sono implementati a un livello livello del sistema, i file di layout dei tasti non sono coinvolti e le seguenti informazioni non sono applicabili.
  2. Se i tasti software virtuali sono implementati come regione toccabile estesa che fa parte del touchscreen principale (come sul Nexus One), l'input usa un file di mappe delle chiavi virtuali per tradurre le coordinate X/Y del tocco in i codici chiave Linux, poi usa il file di layout delle chiavi per tradurre i codici chiave Linux in Codici delle chiavi Android (per i dettagli sui file delle mappe delle chiavi virtuali, consulta Dispositivi touch). Il file di layout delle chiavi per il dispositivo di input touchscreen deve specificare la mappatura dei tasti appropriata e includere il flag VIRTUAL per ogni chiave.
  3. Se i tasti software virtuali sono implementati come pulsanti capacitivi separati il touchscreen principale (ad esempio, Nexus S), il driver del dispositivo kernel o del firmware è responsabile della traduzione dei tocchi in codici chiave Linux che del sistema di immissione si traduce quindi in codici chiave Android utilizzando il file di layout dei tasti. Il file di layout dei tasti per il dispositivo di input del pulsante capacitivo deve specificare il valore mappatura delle chiavi appropriata e includi il flag VIRTUAL per ogni chiave.

Quando i tasti software virtuali si trovano all'interno o nelle vicinanze di il touchscreen, è facile per gli utenti premere accidentalmente un pulsante quando toccare la parte inferiore dello schermo, far scorrere un dito dall'alto verso il basso dall'alto verso il basso sullo schermo. Per evitare ciò, il sistema di input applica debounce in modo che le pressioni dei tasti virtuali virtuali vengano ignorate per un breve periodo tempo dopo l'ultimo tocco sul touchscreen (questo ritardo è chiamato tempo di silenziamento della chiave virtuale).

Per attivare il debouncing dei tasti software virtuali:

  1. Fornisci un file di layout dei tasti per il touchscreen o il pulsante capacitivo dispositivo di input con il flag VIRTUAL impostato per ogni tasto.
    key 139    MENU           VIRTUAL
    key 172    HOME           VIRTUAL
    key 158    BACK           VIRTUAL
    key 217    SEARCH         VIRTUAL
    
  2. Imposta il valore del tempo di inattività della chiave virtuale in un overlay di risorse per del 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>
    

Convalida

Devi convalidare i file di layout principali utilizzando lo Convalida le mappe dei tasti.