Anahtar düzeni dosyaları

Anahtar düzeni dosyaları (.kl dosyaları), Linux anahtar kodlarını ve eksen kodlarını Android anahtar kodlarıyla ve eksen kodlarıyla eşler ve ilişkili politika işaretlerini belirtir. Cihaza özel tuş düzeni dosyaları şunlardır:

  • Ses, güç ve mikrofonlu kulaklık medya tuşları gibi özel tuşlar dahil olmak üzere tuşlara sahip dahili (yerleşik) giriş cihazları için zorunludur.
  • Diğer giriş cihazları için isteğe bağlıdır ancak özel amaçlı klavyeler ve kontrol çubukları için önerilir.

Cihaza özgü bir anahtar düzeni dosyası yoksa sistem bunun yerine varsayılan bir anahtar düzeni seçer.

Konum

Anahtar düzeni dosyaları, USB tedarikçisine, ürüne (ve isteğe bağlı olarak sürüme) veya giriş cihazı adına göre bulunur. Aşağıdaki yollar sırayla kontrol edilir:

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

Cihaz adını içeren bir dosya yolu oluşturulurken cihaz adındaki "0"-"9", "a"-"z", "A"-"Z", "-" veya "_" dışındaki tüm karakterler "_" ile değiştirilir.

Genel anahtar düzeni dosyası

Sistem, Generic.kl adlı özel bir yerleşik genel anahtar düzeni dosyası sağlar. Bu tuş düzeni, çeşitli standart harici klavyeler ve kontrol çubuklarını desteklemek için tasarlanmıştır. Genel anahtar düzenini değiştirmeyin.

Sözdizimi

Anahtar düzeni dosyası, anahtar veya eksen tanımlarından ve işaretlerinden oluşan düz metin dosyasıdır.

Anahtar beyanları

Anahtar bildirimleri, key anahtar kelimesinin ardından bir Linux anahtar kodu numarası ve Android anahtar kodu adından veya anahtar kelimesinin ardından bir HID kullanımı ve Android anahtar kodu adından oluşur. HID kullanımı, 32 bitlik bir tam sayı olarak temsil edilir. Üstteki 16 bit, HID kullanım sayfasını, alttaki 16 bit ise HID kullanım kimliğini temsil eder. Her iki beyanın ardından, boşlukla ayrılmış isteğe bağlı bir politika işareti grubu gelebilir.

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

Aşağıdaki politika işaretleri tanınır:

  • FUNCTION: Anahtar, FUNCTION tuşuna da basılmış gibi yorumlanmalıdır.
  • GESTURE: Dokunmatik ekranı avuçla kaplama gibi bir kullanıcı hareketi tarafından oluşturulan anahtar.
  • VIRTUAL: Anahtar, ana dokunmatik ekranın yanındaki sanal bir yumuşak anahtardır (kapasitif düğme). Bu, özel bir debouncing mantığının etkinleştirilmesine neden olur (aşağıya bakın).

Eksen beyanları

Eksen tanımlarının her biri, axis anahtar kelimesinin ardından bir Linux eksen kodu numarası ve en az bir Android eksen kodu adı da dahil olmak üzere eksenin davranışını kontrol eden niteliklerden oluşur.

Temel eksenler

Temel eksen, bir Linux eksen kodunu bir Android eksen kodu adıyla eşler. Aşağıdaki beyan, ABS_X (0x00 ile gösterilir) ile AXIS_X (X ile gösterilir) arasında eşleme yapar.

axis 0x00 X

Yukarıdaki örnekte, ABS_X değerinin 5 olması durumunda AXIS_X 5 olarak ayarlanır.

Bölünmüş eksenler

Bölünmüş eksen, bir Linux eksen kodunu iki Android eksen kodu adıyla eşler. Böylece, eşlendiğinde bir eşiğin altındaki veya üstündeki değerler iki farklı eksene bölünür. Bu eşleme, cihaz tarafından raporlanan tek bir fiziksel eksen, birbirini hariç tutan iki farklı mantıksal ekseni kodlarken kullanışlıdır.

Aşağıdaki beyan, ABS_Y ekseninin (0x01 ile gösterilir) değerlerini 0x7f'den küçük olduğunda AXIS_GAS, 0x7f'den büyük olduğunda ise AXIS_BRAKE ile eşler.

axis 0x01 split 0x7f GAS BRAKE

Yukarıdaki örnekte, ABS_Y değerinin 0x7d olması durumunda AXIS_GAS 2 (0x7f - 0x7d) ve AXIS_BRAKE 0 olarak ayarlanır. Buna karşılık, ABS_Y değerinin 0x83 olması durumunda AXIS_GAS 0, AXIS_BRAKE ise 4 (0x83 - 0x7f) değerine ayarlanır. Son olarak, ABS_Y değerinin 0x7f değerine bölünmesiyle elde edilen değere eşit olması durumunda hem AXIS_GAS hem de AXIS_BRAKE 0 değerine ayarlanır.

Ters eksenler

Ters çevrilmiş bir eksen, eksen değerinin işaretini tersine çevirir. Aşağıdaki bildirim, ABS_RZ'ü (0x05 ile gösterilir) AXIS_BRAKE'ye (BRAKE ile gösterilir) eşler ve sonucu olumsuzlayarak tersine çevirir.

axis 0x05 invert BRAKE

Yukarıdaki örnekte, ABS_RZ değerinin 2 olması durumunda AXIS_BRAKE -2 olarak ayarlanır.

Daire ortası seçeneği

Kontrol çubuğu cihazı, kontrol çubuğu kullanılmadığında bile gürültü nedeniyle giriş etkinlikleri bildirebilir. Bu gürültü genellikle sol ve/veya sağ çubuklardan gelir ve sürücünün 0'a yakın bir konum değeri bildirmesine neden olur. "Orta düz" değeri, kumandanızın sabit durumdayken çıkaracağı gürültü miktarını belirtir.

Linux giriş protokolü, giriş cihazı sürücülerinin kontrol çubuğu eksenlerinin merkez düz değerini belirtmesi için bir yol sağlar ancak tüm sürücüler bunu bildirmez ve bazıları yanlış değerler sağlar. Bu sorunu çözmek için eksen beyanının ardından, eksenin merkez konumu etrafındaki bölgenin genişliğini belirten ve merkezlenmiş olarak kabul edilmesi gereken bir flat seçeneği gelebilir.

Örneğin, bir cihaz sürücüsü AXIS_X için 0 ile 100 arasında değerler bildirirse Android giriş sistemi 0 değerini -1 ile, 100 değerini ise 1 ile eşler. Aralığın merkezi, ölçeklenmemiş koordinatlarda 50, ölçeklendirilmiş koordinatlarda ise 0 olur. Düz bir değer 10'a eşitse geliştiriciler, -0,1 ile 0,1 arasında (ölçeklenmemiş koordinatlarda 40 ile 60 arasında) raporlanan tüm AXIS_X değerlerinin gürültü olduğunu varsaymalı ve kontrol çubuğundan gelen bu değerleri sıfır olarak ele almalıdır.

Not: Anahtar düzeni dosyası, sürücü koordinat alanı için değeri belirtirken android.view.InputDevice.MotionRange#getFlat() tarafından bildirilen değer Android koordinat alanındadır.

axis 0x03 Z flat 4096

Yukarıdaki örnekte, merkez düz değeri 4096 olarak ayarlanmıştır.

Yorumlar

Yorum satırları # ile başlar ve satırın sonuna kadar devam eder:

# A comment!

Boş satırlar yoksayılır.

Örnekler

Klavye

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

Sistem kontrolleri

# 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

Kapasitif düğmeler

# 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

Mikrofonlu kulaklık jakı medya kontrolleri

# 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

Kontrol çubuğu

# 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

Sanal yumuşak tuşlar

Giriş sistemi, aşağıdaki kullanım alanlarında sanal yumuşak tuşlar uygulamak için özel özellikler sunar:

  1. Sanal yumuşak tuşlar ekranda grafik olarak gösteriliyorsa (ör. Galaxy Nexus'ta) Sistem Kullanıcı Arayüzü paketindeki Gezinme Çubuğu bileşeni tarafından uygulanır. Grafiksel sanal yumuşak tuşlar sistemde üst katmanda uygulandığından anahtar düzeni dosyaları kullanılmaz ve aşağıdaki bilgiler geçerli değildir.
  2. Sanal yumuşak tuşlar, ana dokunmatik ekranın bir parçası olan genişletilmiş bir dokunulabilir bölge olarak uygulanırsa (Nexus One'da olduğu gibi) giriş sistemi, X/Y dokunma koordinatlarını Linux anahtar kodlarına dönüştürmek için sanal bir anahtar haritası dosyası kullanır, ardından Linux anahtar kodlarını Android anahtar kodlarına dönüştürmek için anahtar düzeni dosyasını kullanır (sanal anahtar haritası dosyaları hakkında ayrıntılı bilgi için Dokunmatik cihazlar bölümüne bakın). Dokunmatik ekran giriş cihazının anahtar düzeni dosyası, uygun anahtar eşlemesini belirtmeli ve her anahtar için VIRTUAL işaretini içermelidir.
  3. Sanal yumuşak tuşlar, ana dokunmatik ekrandan ayrı kapasitif düğmeler olarak uygulanırsa (Nexus S'de olduğu gibi) dokunmaları Linux anahtar kodlarına dönüştürmekten çekirdek cihaz sürücüsü veya donanım yazılımı sorumludur. Giriş sistemi daha sonra anahtar düzeni dosyasını kullanarak bu anahtar kodlarını Android anahtar kodlarına dönüştürür. Kapasitif düğme giriş cihazının anahtar düzeni dosyası, uygun anahtar eşlemesini belirtmeli ve her anahtar için VIRTUAL işaretini içermelidir.

Sanal yumuşak tuşlar dokunmatik ekranın içinde veya yakın fiziksel yakınında olduğunda, kullanıcıların ekranın alt kısmına dokunurken veya parmaklarını ekranda yukarıdan aşağıya ya da aşağıdan yukarıya doğru kaydırırken yanlışlıkla bir düğmeye basması kolaydır. Bunu önlemek için giriş sistemi, dokunmatik ekrana yapılan en son dokunma işleminden sonra sanal yumuşak tuş basışlarının kısa bir süre boyunca yoksayılması için küçük bir sönümleme uygular (bu gecikmeye sanal tuş sessiz süresi denir).

Sanal yumuşak tuş tıklama gecikmesini etkinleştirmek için:

  1. Dokunmatik ekran veya kapasitif düğme giriş cihazı için her anahtar için VIRTUAL işaretinin ayarlandığı bir anahtar düzeni dosyası sağlayın.
    key 139    MENU           VIRTUAL
    key 172    HOME           VIRTUAL
    key 158    BACK           VIRTUAL
    key 217    SEARCH         VIRTUAL
    
  2. Çerçeve config.xml kaynağı için bir kaynak yer paylaşımında sanal anahtar sessiz zaman değerini ayarlayın.
    <!-- 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>
    

Doğrulama

Klavye Haritalarını Doğrulama aracını kullanarak klavye düzeni dosyalarınızı doğrulamanız gerekir.