Anahtar düzeni dosyaları

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

  • Ses seviyesi, güç ve kulaklık medya tuşları gibi özel tuşlar da dahil olmak üzere tuşlara sahip dahili (yerleşik) giriş cihazları için gereklidir .
  • Diğer giriş aygıtları için isteğe bağlıdır ancak özel amaçlı klavyeler ve joystick'ler için önerilir .

Cihaza özel bir tuş düzeni dosyası mevcut değilse sistem bunun yerine bir varsayılanı seçer.

Konum

Anahtar düzeni dosyaları USB satıcısına, ürün (ve isteğe bağlı olarak sürüm) kimliğine veya giriş cihazı adına göre bulunur. Aşağıdaki yollara sırasıyla başvurulur:

  • /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ştururken, 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 adı verilen özel bir yerleşik genel anahtar düzeni dosyası sağlar. Bu tuş düzeni, çeşitli standart harici klavyeleri ve kumanda kollarını desteklemeyi amaçlamaktadır. Genel tuş düzenini değiştirmeyin!

Sözdizimi

Anahtar düzeni dosyası, anahtar veya eksen bildirimlerinden ve bayraklardan oluşan düz metin dosyasıdır.

Anahtar beyanlar

Anahtar bildirimleri, anahtar kelime key ardından bir Linux anahtar kod numarası ve Android anahtar kod adının veya anahtar kelime kullanımının ardından HID kullanımı ve Android anahtar kod adının gelmesinden oluşur. HID kullanımı 32 bitlik bir tamsayı olarak temsil edilir; burada yüksek 16 bit HID kullanım sayfasını, düşük 16 bit ise HID kullanım kimliğini temsil eder. Her iki bildirimin ardından isteğe bağlı olarak boşluklarla ayrılmış politika bayrakları kümesi gelebilir.

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

Aşağıdaki politika bayrakları tanınır:

  • FUNCTION : Bu tuş, İŞLEV tuşuna da basılmış gibi yorumlanmalıdır.
  • GESTURE : Dokunmatik ekranı avuçla tutmak gibi bir kullanıcı hareketi tarafından oluşturulan tuş.
  • VIRTUAL : Tuş, ana dokunmatik ekranın yanında bulunan sanal bir yazılım tuşudur (kapasitif düğme). Bu, özel geri dönüş mantığının etkinleştirilmesine neden olur (aşağıya bakın).

Eksen beyanları

Eksen bildirimlerinin her biri axis anahtar kelimesinden ve ardından bir Linux eksen kod numarasından ve en az bir Android eksen kod adı içeren eksenin davranışını kontrol eden niteleyicilerden oluşur.

Temel eksenler

Temel bir eksen, bir Linux eksen kodunu bir Android eksen kod adıyla eşler. Aşağıdaki bildirim ABS_X ( 0x00 ile gösterilir) AXIS_X ( X ile gösterilir) eşler.

axis 0x00 X

Yukarıdaki örnekte ABS_X değeri 5 ise AXIS_X 5 ayarlanır.

Bölünmüş eksenler

Bölünmüş eksen, bir Linux eksen kodunu iki Android eksen kod adıyla eşler; böylece bir eşikten küçük veya büyük değerler, eşlendiğinde iki farklı eksene bölünür. Bu eşleme, aygıt tarafından bildirilen tek bir fiziksel eksenin birbirini dışlayan iki farklı mantıksal ekseni kodladığı durumlarda kullanışlıdır.

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

axis 0x01 split 0x7f GAS BRAKE

Yukarıdaki örnekte, ABS_Y değeri 0x7d ise AXIS_GAS 2 ( 0x7f - 0x7d ) ve AXIS_BRAKE 0 ayarlanır. Tersine, eğer ABS_Y değeri 0x83 ise AXIS_GAS 0 ve AXIS_BRAKE 4 ( 0x83 - 0x7f ) ayarlanır. Son olarak, ABS_Y değeri 0x7f bölünmüş değerine eşitse, hem AXIS_GAS hem de AXIS_BRAKE 0 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 ( BRAKE ile gösterilir) ile eşler ve çıkışı olumsuzlayarak tersine çevirir.

axis 0x05 invert BRAKE

Yukarıdaki örnekte ABS_RZ değeri 2 ise AXIS_BRAKE -2 olarak ayarlanır.

Merkezi düz seçeneği

Bir joystick cihazı, gürültü nedeniyle joystick kullanılmadığında bile giriş olaylarını rapor edebilir. 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, hareketsiz durumdaki kontrol cihazından beklenecek gürültü miktarını belirtir.

Linux giriş protokolü, giriş aygıtı sürücülerinin joystick 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, bir eksen bildiriminin ardından, eksenin merkez konumu etrafındaki, ortalanmış olarak kabul edilmesi gereken bölgenin genişliğini belirten flat bir seçenek gelebilir.

Örneğin, bir aygıt sürücüsü AXIS_X için 0 ile 100 arasında değerler bildirirse, Android giriş sistemi tarafından 0 -1 ile, 100 ise 1 ile eşlenecektir. Aralığın merkezi ölçeklenmemiş koordinatlarda 50, ölçekli koordinatlarda 0 olacaktır. Düz değer 10'a eşitse, geliştiriciler -0,1 ile 0,1 arasında (ölçeklendirilmemiş koordinatlarda 40 ile 60 arasında) bildirilen herhangi bir AXIS_X değerinin gürültü olduğunu varsaymalı ve joystick'ten gelen bu değerleri sıfır olarak ele almalıdır.

Not : Anahtar yerleşim dosyası sürücü koordinat alanı değerini belirtirken, android.view.InputDevice.MotionRange#getFlat() tarafından bildirilen değer Android koordinat alanındadır.

axis 0x03 Z flat 4096

Yukarıdaki örnekte orta düz değer 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 dikkate alınmaz.

Örnekler

Tuş takımı

# 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

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

Oyun kolu

# 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 yazılım tuşları

Giriş sistemi, aşağıdaki kullanım durumlarında sanal yazılım tuşlarının uygulanmasına yönelik özel özellikler sağlar:

  1. Sanal yazılım tuşları ekranda grafiksel olarak görüntüleniyorsa (Galaxy Nexus'ta olduğu gibi), Sistem Kullanıcı Arayüzü paketindeki Gezinme Çubuğu bileşeni tarafından uygulanır. Grafiksel sanal yazılım tuşları sistemde yüksek bir katmanda uygulandığından, tuş düzeni dosyaları dahil değildir ve aşağıdaki bilgiler geçerli değildir.
  2. Sanal yazılım 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 dokunmatik koordinatlarını Linux tuş kodlarına çevirmek için bir sanal anahtar harita dosyası kullanır. daha sonra Linux anahtar kodlarını Android anahtar kodlarına çevirmek için anahtar düzeni dosyasını kullanır (sanal anahtar eşleme dosyalarıyla ilgili ayrıntılar için bkz . Dokunmatik cihazlar ). Dokunmatik ekranlı giriş cihazının tuş düzeni dosyası, uygun tuş eşlemesini belirtmeli ve her tuş için VIRTUAL bayrağını içermelidir.
  3. Sanal yazılım tuşları ana dokunmatik ekrandan ayrı kapasitif düğmeler olarak uygulanırsa (Nexus S'de olduğu gibi), çekirdek cihaz sürücüsü veya ürün yazılımı, dokunuşları Linux tuş kodlarına çevirmekten sorumludur ve giriş sistemi daha sonra Android tuş kodlarına çevirir. anahtar düzeni dosyasını kullanarak. Kapasitif düğme giriş cihazının tuş düzeni dosyası, uygun tuş eşlemesini belirtmeli ve her tuş için VIRTUAL bayrağını içermelidir.

Sanal yazılım tuşları dokunmatik ekranın içinde veya fiziksel yakınına yerleştirildiğinde, kullanıcıların ekranın alt kısmına dokunurken veya parmağını yukarıdan aşağıya veya aşağıdan yukarıya kaydırırken yanlışlıkla bir düğmeye basması kolaydır. ekranın üst kısmında. Bunu önlemek için, giriş sistemi, dokunmatik ekrana en son dokunuştan sonra sanal tuşa basışların kısa bir süre için göz ardı edilmesini sağlayacak şekilde küçük bir geri dönüş uygular (bu gecikmeye sanal tuş sessiz süresi denir).

Sanal programlanabilir tuşun geri çevrilmesini etkinleştirmek için:

  1. Dokunmatik ekran veya kapasitif düğme giriş cihazı için, her tuş için VIRTUAL bayrakla birlikte bir tuş 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 katmanında sanal anahtar sessiz süresinin 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

Anahtar düzeni dosyalarınızı Anahtar Haritaları Doğrula aracını kullanarak doğrulamanız gerekir.