Pliki układu klucza

Pliki układu klawiszy (pliki .kl) mapują kody klawiszy i kody osi systemu Linux do kodów kluczy i osi Androida oraz określ powiązane flagi zasad. Pliki układu klawiszy specyficzne dla urządzenia:

  • Wymagany w przypadku wewnętrznych (wbudowanych) urządzeń wejściowych z kluczami, w tym: klawiszy specjalnych, takich jak klawisze głośności, zasilania i multimediów dla zestawu słuchawkowego.
  • Opcjonalny w przypadku innych urządzeń wejściowych, ale zalecany w przypadku specjalne klawiatury i joysticki.

Jeśli nie jest dostępny plik układu kluczy dla danego urządzenia, system wybiera domyślnej.

Lokalizacja

Pliki układu klucza znajdują się według dostawcy USB, usługi (i opcjonalnie wersji) identyfikatora lub nazwy urządzenia wejściowego. Sprawdzane są kolejno następujące ścieżki:

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

Przy tworzeniu ścieżki pliku zawierającej nazwę urządzenia wszystkie znaki w nazwie urządzenia innej niż „0”–9, „a”–„z”, 'A'-'Z', '-' lub „_” zostaną zastąpione przez „_”.

Ogólny plik układu klucza

System udostępnia specjalny, ogólny plik układu kluczy o nazwie Generic.kl Ten układ klucza ma obsługiwać różne standardowych zewnętrznych klawiatur i joysticków. Nie modyfikuj klucza ogólnego .

Składnia

Plik układu klucza to zwykły plik tekstowy zawierający deklaracje klucza lub osi i flag.

Deklaracje klucza

Deklaracje klucza składają się ze słowa kluczowego key, po którym następuje znak Linux numeru kodu i nazwy kodu klucza Androida lub użycie słowa kluczowego z dopiskiem Użycie HID i nazwa kodu klucza na Androidzie. Użycie HID jest przedstawiane jako kod 32-bitowy. liczba całkowita, gdzie wysokie 16 bitów oznacza stronę wykorzystania HID, a niskie wartości 16-bitowe reprezentują identyfikator użycia HID. Po każdej deklaracji może znajdować się opcjonalny element zestawu flag zasad rozdzielonych spacjami.

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

Rozpoznawane są te flagi zasad:

  • FUNCTION: klawisz powinien być interpretowany tak, jakby klawisz FUNCTION również zostały naciśnięte.
  • GESTURE: klucz wygenerowany gestem użytkownika, na przykład gestem dłoni ekranu dotykowego.
  • VIRTUAL: klawisz jest wirtualnym klawiszem funkcyjnym (przyciskiem pojemnościowym) obok głównego ekranu dotykowego. Powoduje to, że specjalna logika odbijania (patrz poniżej).

Deklaracje osi

Każda deklaracja osi składa się ze słowa kluczowego axis, po którym następuje znak Numer kodu osi Linuksa i kwalifikatory, które kontrolują działanie osi z co najmniej 1 nazwą kodu osi Androida.

Osie podstawowe

Oś podstawowa po prostu mapuje kod osi Linuksa na nazwę kodową osi Androida. następujące mapy deklaracji ABS_X (wskazane przez 0x00) do AXIS_X (wskazuje to X).

axis 0x00 X

W powyższym przykładzie, jeśli wartość ABS_X wynosi 5 to AXIS_X ma wartość 5.

Podziel osie

Oś podziału mapuje kod osi Linuksa na 2 nazwy kodu osi Androida, tak aby wartości mniejsze lub większe od progu są rozdzielane na 2 różne osie podczas mapowania. To mapowanie jest przydatne, gdy jedna oś fizyczna raportowana przez koduje dwie różne wzajemnie wykluczające się osie logiczne.

Poniższa deklaracja mapuje wartości na osi ABS_Y (wskazane przez 0x01) na AXIS_GAS, gdy jest mniejsze niż 0x7f lub AXIS_BRAKE, jeśli wartość jest większa niż 0x7f

axis 0x01 split 0x7f GAS BRAKE

W powyższym przykładzie, jeśli wartość ABS_Y wynosi 0x7d wówczas AXIS_GAS jest ustawiona na 2 (0x7f - 0x7d) a AXIS_BRAKE ma wartość 0. Jeśli natomiast wartość dla kolumny ABS_Y wynosi 0x83, a następnie AXIS_GAS jest ustawione na 0 i AXIS_BRAKE są ustawione na 4 (0x83 - 0x7f). Jeśli wartość ABS_Y równa się wartości podziału 0x7f, a następnie AXIS_GAS i Wartość AXIS_BRAKE ma wartość 0.

Odwrócone osie

Odwrócona oś odwraca znak wartości osi. Poniżej deklaracja mapuje atrybut ABS_RZ (wskazany przez 0x05) na AXIS_BRAKE (wskazane przez BRAKE) i odwraca wartość negując ten wynik.

axis 0x05 invert BRAKE

W powyższym przykładzie, jeśli wartość ABS_RZ wynosi 2 to AXIS_BRAKE ma wartość -2.

Opcja wyśrodkowana z płaskim ekranem

Z powodu hałasu joystick może zgłaszać zdarzenia wejściowe, nawet gdy joystick nie jest używany. Ten dźwięk pochodzi zazwyczaj z lewej lub prawej drążka i powoduje pozycji bliskie 0. „Środkowe płaskie” określa ilość szumu oczekiwanego od kontrolera w spoczynku.

Protokół wejścia w systemie Linux umożliwia określenie sterowników urządzeń wejściowych ale nie wszyscy kierowcy je zgłaszają, a część z nich zapewnia nieprawidłowych wartości. Aby rozwiązać ten problem, po deklaracja osi może występować Opcja flat określająca szerokość regionu wokół środka położenie osi, którą należy uznać za wyśrodkowaną.

Jeśli na przykład sterownik urządzenia podaje w polu AXIS_X wartości od 0 do 100, to 0 zostanie zmapowane na -1, a 100 zostanie zmapowane na 1 przez system wejściowy Androida. Środek zakresu dla nieskalowanych współrzędnych to 50, a w przypadku skalowanych współrzędnych 0. Jeśli płaska wartość jest równa 10, programiści powinni przyjąć, że każda wartość AXIS_X raportowana między -0,1 i 0,1 (od 40 do 60 w przypadku nieskalowanych współrzędnych) to szum, a wartości te są traktowane od zera od joysticka.

Uwaga: plik układu klucza określa wartość dla przestrzeni współrzędnych kierowcy, wartość zgłoszona przez android.view.InputDevice.MotionRange#getFlat() jest krzyżową.

axis 0x03 Z flat 4096

W tym przykładzie środkowa płaska wartość jest ustawiona na 4096.

Komentarze

Wiersze komentarza zaczynają się znakiem # i kończą na końcu wiersza:

# A comment!

Puste wiersze są ignorowane.

Przykłady

Klawiatura

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

Systemowe elementy sterujące

# 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

Przyciski pojemnościowe

# 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

Sterowanie multimediami z gniazda słuchawek

# 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

Wirtualne klawisze funkcyjne

System wprowadzania danych udostępnia specjalne funkcje do implementowania wirtualnych klawiszy funkcyjnych. w następujących przypadkach:

  1. Jeśli wirtualne klawisze funkcyjne są wyświetlane na ekranie graficznie (np. na Galaxy Nexus), są one zaimplementowane za pomocą komponentu Pasek nawigacyjny Pakiet interfejsu systemu. Ponieważ graficzne wirtualne klawisze funkcyjne są zaimplementowane w systemie, pliki układu klucza oraz nie mają zastosowania.
  2. Jeśli wirtualne klawisze funkcyjne są zaimplementowane jako rozszerzony obszar dotykowy na głównym ekranie dotykowym (np. w Nexusie One), system wykorzystuje plik mapy klawiszy wirtualnych do przetłumaczenia współrzędnych dotyku X/Y na w Linuksie z kodami klawiszy, a następnie używając pliku układu kluczy do przetłumaczenia kodów klawiszy w Linuksie. Kody klawiszy na Androida (szczegółowe informacje o plikach wirtualnej mapy kluczy znajdziesz w artykule Urządzenia z ekranami dotykowymi). Plik układu klucza dla urządzenie wejściowe z ekranem dotykowym musi określić odpowiednie mapowanie klawiszy i zawierać flagę VIRTUAL każdego klucza.
  3. Jeśli wirtualne klawisze funkcyjne są zaimplementowane jako przyciski pojemnościowe niezależnie od głównego ekranu dotykowego (np. w telefonie Nexus S), sterownika jądra systemu lub za tłumaczenie dotknięć na kody klawiszy systemu Linux, system wprowadzania danych przekłada się na kody klawiszy Androida za pomocą pliku układu kluczy. W pliku układu klucza urządzenia wejściowego przycisku pojemnościowego musi być określona wartość odpowiednie mapowanie klawiszy i dla każdego klucza dodaj flagę VIRTUAL.

Gdy wirtualne klawisze funkcyjne znajdują się wewnątrz lub w pobliżu: na ekranie dotykowym, łatwo jest przypadkowo nacisnąć przycisk, dotykanie u dołu ekranu lub podczas przesuwania palcem z góry do dołu lub od dołu do góry ekranu. Aby temu zapobiec, system wprowadzania danych w niewielkim stopniu tłumienie dźwięków w taki sposób, że naciśnięcia wirtualnych klawiszy funkcyjnych są ignorowane przez krótki czas czas od ostatniego dotknięcia ekranu dotykowego (opóźnienie to nosi nazwę czasu ciszy klucza wirtualnego).

Aby włączyć odbijanie wirtualnych klawiszy funkcyjnych:

  1. Udostępnij plik układu klawiszy z ekranem dotykowym lub przyciskiem pojemnościowym urządzenia wejściowego z flagą VIRTUAL ustawioną dla każdego klawisza.
    key 139    MENU           VIRTUAL
    key 172    HOME           VIRTUAL
    key 158    BACK           VIRTUAL
    key 217    SEARCH         VIRTUAL
    
  2. Ustaw wartość czasu ciszy klucza wirtualnego w nakładce zasobu dla 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>
    

Weryfikacja

Pliki układu klucza należy zweryfikować za pomocą Narzędzie Weryfikuj mapy klawiszy.