File tata letak kunci (.kl
file) memetakan kode tombol dan kode sumbu Linux
kode tombol Android dan kode sumbu serta menentukan flag kebijakan yang terkait.
File tata letak kunci khusus perangkat adalah:
- Wajib untuk perangkat input internal (bawaan) dengan kunci, termasuk tombol khusus seperti tombol volume, daya, dan media headset.
- Opsional untuk perangkat input lain, tetapi direkomendasikan untuk {i>keyboard<i} dan joystick tujuan khusus.
Jika tidak ada file tata letak kunci khusus perangkat yang tersedia, sistem akan memilih sebuah secara default.
Lokasi
File tata letak kunci ditemukan berdasarkan vendor USB, produk (dan versi opsional) ID atau nama perangkat input. Jalur berikut ditinjau secara berurutan:
/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
Ketika membuat jalur file yang berisi nama perangkat, semua karakter dalam nama perangkat selain '0'-'9', 'a'-'z', 'A'-'Z', '-' atau '_' diganti dengan "_".
File tata letak kunci umum
Sistem menyediakan file tata letak kunci generik
bawaan khusus yang disebut
Generic.kl
. Tata letak tombol ini dimaksudkan untuk
mendukung berbagai
joystick dan keyboard eksternal standar. Jangan ubah kunci generik
tata letaknya!
Sintaksis
File tata letak kunci adalah file teks biasa yang terdiri dari deklarasi kunci atau sumbu dan flag.
Deklarasi tombol
Deklarasi kunci terdiri dari kata kunci key
diikuti oleh Linux
nomor kode tombol dan nama kode tombol Android, atau penggunaan kata kunci yang diikuti dengan
Penggunaan HID dan nama kode kunci Android. Penggunaan HID dinyatakan
sebagai 32-bit
bilangan bulat, di mana 16-bit tinggi mewakili halaman penggunaan HID dan 16-bit rendah
menunjukkan ID penggunaan HID. Salah satu deklarasi dapat diikuti dengan
set flag kebijakan yang dipisahkan spasi kosong.
key 1 ESCAPE key 114 VOLUME_DOWN key 16 Q VIRTUAL key usage 0x0c006F BRIGHTNESS_UP
Tanda kebijakan berikut dikenali:
FUNCTION
: Kunci harus ditafsirkan seolah-olah kunci FUNCTION juga ditekan.GESTURE
: Kunci yang dihasilkan oleh gestur pengguna, seperti telapak tangan layar sentuh.VIRTUAL
: Kuncinya adalah tombol virtual virtual (tombol kapasitif) berdekatan dengan layar sentuh utama. Ini menyebabkan logika {i>debousing <i}khusus diaktifkan (lihat di bawah).
Deklarasi sumbu
Deklarasi sumbu masing-masing terdiri dari kata kunci axis
diikuti dengan
Nomor kode sumbu Linux dan penentu yang mengontrol perilaku sumbu
termasuk setidaknya satu nama kode sumbu Android.
Sumbu dasar
Sumbu dasar hanya memetakan kode sumbu Linux ke nama kode sumbu Android. Tujuan
peta deklarasi berikut ABS_X
(ditunjukkan dengan 0x00
)
hingga AXIS_X
(ditunjukkan dengan X
).
axis 0x00 X
Pada contoh di atas, jika nilai ABS_X
adalah 5
maka AXIS_X
akan
diatur ke 5
.
Sumbu terbagi
Sumbu terpisah memetakan kode sumbu Linux ke dua nama kode sumbu Android, sehingga nilai yang lebih kecil atau lebih besar dari nilai minimum dibagi menjadi dua sumbu yang berbeda saat dipetakan. Pemetaan ini berguna ketika satu sumbu fisik dilaporkan oleh perangkat mengenkode dua sumbu logis yang sama-sama eksklusif.
Deklarasi berikut memetakan nilai sumbu ABS_Y
(ditunjukkan dengan 0x01
) menjadi AXIS_GAS
jika kurang dari
0x7f
atau ke AXIS_BRAKE
jika lebih besar dari
0x7f
.
axis 0x01 split 0x7f GAS BRAKE
Pada contoh di atas, jika nilai ABS_Y
adalah 0x7d
maka AXIS_GAS
akan disetel ke 2
(0x7f - 0x7d
)
dan AXIS_BRAKE
disetel ke 0
. Sebaliknya, jika nilai
dari ABS_Y
adalah 0x83
maka AXIS_GAS
ditetapkan ke
0
dan AXIS_BRAKE
disetel ke 4
(0x83 - 0x7f
). Terakhir, jika nilai ABS_Y
sama dengan
nilai pemisahan 0x7f
lalu AXIS_GAS
dan
AXIS_BRAKE
disetel ke 0
.
Sumbu terbalik
Sumbu terbalik akan membalikkan tanda nilai sumbu. Hal berikut
memetakan deklarasi ABS_RZ
(ditunjukkan dengan 0x05
) ke
AXIS_BRAKE
(ditunjukkan dengan BRAKE
), dan membalikkan nilai
output dengan meniadakannya.
axis 0x05 invert BRAKE
Pada contoh di atas, jika nilai ABS_RZ
adalah 2
maka AXIS_BRAKE
akan disetel ke -2
.
Opsi datar tengah
Perangkat joystick dapat melaporkan peristiwa input meskipun joystick tidak digunakan karena adanya kebisingan. Suara bising ini biasanya berasal dari stik kiri dan/atau kanan, dan menyebabkan pengemudi melaporkan nilai posisi dekat 0. "Flat tengah" menentukan jumlah derau yang diharapkan dari pengontrol dalam penyimpanan.
Protokol input Linux menyediakan cara bagi {i>
driver<i} perangkat input untuk menentukan
nilai rata tengah sumbu joystick, tetapi tidak semua pengemudi melaporkannya dan beberapa di antaranya menyediakan
nilai yang salah. Untuk mengatasi masalah ini, deklarasi sumbu dapat diikuti dengan
Opsi flat
yang menentukan lebar area di sekitar bagian tengah
posisi sumbu yang harus
dianggap berada di tengah.
Misalnya, jika driver perangkat melaporkan nilai untuk AXIS_X
antara 0 dan 100,
maka 0 akan dipetakan ke -1 dan 100 akan dipetakan ke 1 oleh sistem input Android.
Pusat rentang akan berada di 50 dalam koordinat yang tidak diskalakan dan 0 dalam koordinat yang diskalakan.
Jika nilai tetap sama dengan 10,
maka developer harus berasumsi bahwa setiap nilai AXIS_X
yang dilaporkan antara
-0.1 dan 0.1 (antara 40 dan 60 dalam koordinat yang tidak diskalakan) adalah noise, dan memperlakukan nilai-nilai tersebut yang muncul
dari joystick sebagai nol.
Catatan: Meskipun file tata letak kunci menentukan nilai untuk ruang koordinat {i>driver<i}, nilai yang dilaporkan oleh android.view.InputDevice.MotionRange#getFlat() ada di Android ruang koordinat.
axis 0x03 Z flat 4096
Pada contoh di atas, nilai datar tengah ditetapkan ke 4096
.
Komentar
Baris komentar dimulai dengan # dan berlanjut ke akhir baris:
# A comment!
Baris kosong akan diabaikan.
Contoh
Keyboard
# 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...
Kontrol sistem
# 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
Tombol kapasitif
# 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
Kontrol media colokan headset
# 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
Tombol soft virtual
Sistem input menyediakan fitur khusus untuk mengimplementasikan tombol virtual virtual dalam kasus penggunaan berikut:
- Jika tombol virtual virtual ditampilkan secara grafis di layar (seperti di Galaxy Nexus), keduanya diterapkan oleh komponen Menu Navigasi di Paket UI sistem. Karena {i>soft key<i} virtual grafis diimplementasikan pada di dalam sistem, file tata letak kunci tidak terlibat dan hal-hal berikut informasi tidak berlaku.
- Jika tombol virtual virtual diimplementasikan sebagai area yang dapat disentuh diperluas
yang merupakan bagian dari layar sentuh utama (seperti pada Nexus One), input
menggunakan file peta tombol virtual untuk
menerjemahkan koordinat sentuh X/Y menjadi
kode kunci Linux, lalu menggunakan file tata letak kunci
untuk menerjemahkan kode tombol Linux menjadi
Kode tombol Android (untuk detail tentang file peta kunci virtual, lihat
Perangkat sentuh). File tata letak utama untuk
perangkat input layar sentuh harus menentukan konfigurasi tombol yang sesuai dan menyertakan
flag
VIRTUAL
untuk setiap kunci. - Jika {i>soft key<i} virtual diimplementasikan
sebagai tombol kapasitif yang terpisah dari
layar sentuh utama (seperti pada Nexus S), {i>driver<i} perangkat {i>kernel<i} atau
{i>firmware <i}bertanggung jawab untuk menerjemahkan
sentuhan ke dalam kode kunci Linux yang
sistem input diubah menjadi kode tombol Android menggunakan file tata letak tombol.
File tata letak kunci untuk perangkat input tombol kapasitif harus menentukan
konfigurasi tombol yang sesuai dan menyertakan flag
VIRTUAL
untuk setiap kunci.
Saat soft key virtual berada di dalam atau berdekatan secara fisik dengan layar sentuh, mudah bagi pengguna untuk secara tidak sengaja menekan tombol ketika menyentuh di dekat bagian bawah layar atau saat menggeser jari dari atas ke bawah atau dari bawah ke atas di layar. Untuk mencegah hal ini, sistem input menerapkan sedikit proses de-dedeping sehingga penekanan tombol virtual diabaikan selama beberapa waktu waktu setelah sentuhan terakhir pada layar sentuh (penundaan ini disebut waktu tenang kunci virtual).
Untuk mengaktifkan penguraian soft key virtual:
- Berikan file tata letak kunci untuk layar sentuh atau tombol kapasitif
perangkat input dengan flag
VIRTUAL
yang disetel untuk setiap kunci.key 139 MENU VIRTUAL key 172 HOME VIRTUAL key 158 BACK VIRTUAL key 217 SEARCH VIRTUAL
- Menyetel nilai waktu tenang kunci virtual di overlay resource untuk
resource
config.xml
framework.<!-- 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>
Validasi
Anda harus memvalidasi file tata letak kunci menggunakan metode Alat Validasi Keymap.