Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Memasukkan

Ikon Android Input HAL

Subsistem input Android secara nominal terdiri dari pipeline peristiwa yang melintasi beberapa lapisan sistem.

Pipa Masukan

Pada lapisan paling bawah, perangkat input fisik menghasilkan sinyal yang menjelaskan perubahan status seperti penekanan tombol dan titik kontak sentuh. Firmware perangkat mengkodekan dan mengirimkan sinyal ini dengan beberapa cara seperti dengan mengirimkan laporan USB HID ke sistem atau dengan menghasilkan interupsi pada bus I2C.

Sinyal tersebut kemudian diterjemahkan oleh driver perangkat di kernel Linux. Kernel Linux menyediakan driver untuk banyak periferal standar, terutama yang mematuhi protokol HID. Namun, OEM harus sering menyediakan driver kustom untuk perangkat tertanam yang terintegrasi erat ke sistem pada level rendah, seperti layar sentuh.

Driver perangkat masukan bertanggung jawab untuk menerjemahkan sinyal khusus perangkat ke dalam format peristiwa masukan standar, melalui protokol masukan Linux. Protokol input Linux mendefinisikan satu set standar jenis dan kode peristiwa di file header kernel linux/input.h . Dengan cara ini, komponen di luar kernel tidak perlu memperhatikan detail seperti kode scan fisik, penggunaan HID, pesan I2C, pin GPIO, dan sejenisnya.

Selanjutnya, komponen Android EventHub membaca peristiwa masukan dari kernel dengan membuka driver evdev terkait dengan setiap perangkat masukan. Komponen Android InputReader kemudian mendekode peristiwa masukan sesuai dengan kelas perangkat dan menghasilkan aliran peristiwa masukan Android. Sebagai bagian dari proses ini, kode peristiwa protokol masukan Linux diterjemahkan ke dalam kode peristiwa Android sesuai dengan konfigurasi perangkat masukan, file tata letak keyboard, dan berbagai tabel pemetaan.

Terakhir, InputReader mengirim peristiwa masukan ke InputDispatcher yang meneruskannya ke jendela yang sesuai.

Titik Kontrol

Ada beberapa tahapan dalam pipeline masukan yang mempengaruhi kontrol atas perilaku perangkat masukan.

Konfigurasi Driver dan Firmware

Driver perangkat input sering kali mengkonfigurasi perilaku perangkat input dengan mengatur parameter dalam register atau bahkan mengunggah firmware itu sendiri. Hal ini terutama terjadi pada perangkat yang disematkan seperti layar sentuh di mana sebagian besar proses kalibrasi melibatkan penyetelan parameter ini atau memperbaiki firmware untuk memberikan keakuratan dan daya tanggap yang diinginkan dan untuk menekan kebisingan.

Opsi konfigurasi driver sering ditetapkan sebagai parameter modul dalam paket dukungan papan kernel (BSP) sehingga driver yang sama dapat mendukung beberapa implementasi perangkat keras yang berbeda.

Dokumentasi ini mencoba menjelaskan konfigurasi driver atau firmware, tetapi dokumentasi ini menawarkan panduan untuk kalibrasi perangkat secara umum.

Properti Konfigurasi Papan

Paket dukungan papan kernel (BSP) dapat mengekspor properti konfigurasi papan melalui SysFS yang digunakan oleh komponen Android InputReader, seperti penempatan tombol virtual pada layar sentuh.

Lihat bagian kelas perangkat untuk detail tentang bagaimana perangkat yang berbeda menggunakan properti konfigurasi papan.

Resource Overlay

Beberapa perilaku masukan dikonfigurasikan melalui hamparan sumber daya di config.xml seperti operasi sakelar tutup.

Berikut ini beberapa contohnya:

  • config_lidKeyboardAccessibility : Menentukan efek sakelar tutup pada apakah keyboard perangkat keras dapat diakses atau disembunyikan.

  • config_lidNavigationAccessibility : Menentukan efek sakelar tutup apakah trackpad dapat diakses atau disembunyikan.

  • config_longPressOnPowerBehavior : Menentukan apa yang harus terjadi saat pengguna menahan tombol daya.

  • config_lidOpenRotation : Menentukan efek sakelar tutup pada orientasi layar.

Lihat dokumentasi dalam frameworks/base/core/res/res/values/config.xml untuk detail tentang setiap opsi konfigurasi.

Peta Utama

Peta kunci digunakan oleh komponen Android EventHub dan InputReader untuk mengonfigurasi pemetaan dari kode peristiwa Linux ke kode peristiwa Android untuk tombol, tombol joystick, dan sumbu joystick. Pemetaan mungkin bergantung pada perangkat atau bahasa.

Lihat bagian kelas perangkat untuk mengetahui detail tentang bagaimana perangkat yang berbeda menggunakan peta utama.

File Konfigurasi Perangkat Input

File konfigurasi perangkat input digunakan oleh Android EventHub dan komponen InputReader untuk mengonfigurasi karakteristik perangkat khusus seperti bagaimana informasi ukuran sentuh dilaporkan.

Lihat bagian kelas perangkat untuk mengetahui detail tentang bagaimana perangkat yang berbeda menggunakan peta konfigurasi perangkat input.

Memahami Penggunaan HID dan Kode Acara

Seringkali ada beberapa pengenal berbeda yang digunakan untuk merujuk ke tombol apa pun yang diberikan pada keyboard, tombol pada pengontrol game, sumbu joystick, atau kontrol lainnya. Hubungan antara pengenal ini tidak selalu sama: mereka bergantung pada sekumpulan tabel pemetaan, beberapa di antaranya diperbaiki, dan beberapa di antaranya bervariasi berdasarkan karakteristik perangkat, driver perangkat, lokal saat ini, konfigurasi sistem, preferensi pengguna dan faktor lainnya.

Kode Pindai Fisik

Kode pemindaian fisik adalah pengenal khusus perangkat yang dikaitkan dengan setiap kunci, tombol, atau kontrol lainnya. Karena kode pemindaian fisik sering berbeda dari satu perangkat ke perangkat lainnya, firmware atau driver perangkat bertanggung jawab untuk memetakannya ke pengenal standar seperti Penggunaan HID atau kode kunci Linux.

Kode pindai terutama untuk keyboard. Perangkat lain biasanya berkomunikasi pada level rendah menggunakan pin GPIO, pesan I2C, atau cara lain. Akibatnya, lapisan atas tumpukan perangkat lunak bergantung pada driver perangkat untuk memahami apa yang sedang terjadi.

Penggunaan HID

Penggunaan HID adalah pengenal standar yang digunakan untuk melaporkan status kontrol seperti tombol keyboard, sumbu joystick, tombol mouse, atau titik kontak sentuh. Sebagian besar perangkat input USB dan Bluetooth sesuai dengan spesifikasi HID, yang memungkinkan sistem untuk berinteraksi dengannya secara seragam.

Kerangka Android mengandalkan driver HID kernel Linux untuk menerjemahkan kode penggunaan HID menjadi kode kunci Linux dan pengenal lainnya. Oleh karena itu, penggunaan HID sangat diminati oleh produsen periferal.

Kode Kunci Linux

Kode kunci Linux adalah pengenal standar untuk kunci atau tombol. Kode kunci Linux didefinisikan di file header linux/input.h menggunakan konstanta yang dimulai dengan awalan KEY_ atau BTN_ . Driver input kernel Linux bertanggung jawab untuk menerjemahkan kode pemindaian fisik, penggunaan HID, dan sinyal khusus perangkat lainnya ke dalam kode kunci Linux dan menyampaikan informasi tentang kode tersebut sebagai bagian dari peristiwa EV_KEY .

Android API terkadang mengacu pada kode kunci Linux yang terkait dengan kunci sebagai "kode pindai" -nya. Ini secara teknis salah tetapi membantu membedakan kode kunci Linux dari kode kunci Android di API.

Kode Sumbu Relatif atau Mutlak Linux

Kode sumbu relatif atau absolut Linux adalah pengenal standar untuk melaporkan pergerakan relatif atau posisi absolut di sepanjang sumbu, seperti gerakan relatif mouse di sepanjang sumbu X-nya atau posisi absolut joystick di sepanjang sumbu X-nya. Kode sumbu Linux didefinisikan di file header linux/input.h menggunakan konstanta yang dimulai dengan awalan REL_ atau ABS_ . Driver input Linux kernel bertanggung jawab untuk menerjemahkan penggunaan HID dan sinyal khusus perangkat lain ke Linux sumbu kode dan memberikan informasi tentang mereka sebagai bagian dari EV_REL dan EV_ABS peristiwa.

Kode Switch Linux

Kode sakelar Linux adalah pengenal standar untuk melaporkan status sakelar pada perangkat, seperti sakelar tutup. Kode sakelar Linux ditentukan di file header linux/input.h menggunakan konstanta yang dimulai dengan awalan SW_ . Driver masukan kernel Linux melaporkan status sakelar berubah sebagai peristiwa EV_SW .

Aplikasi Android umumnya tidak menerima peristiwa dari sakelar, tetapi sistem dapat menggunakannya secara internal untuk mengontrol berbagai fungsi khusus perangkat.

Kode Kunci Android

Kode kunci Android adalah pengenal standar yang ditentukan dalam Android API untuk menunjukkan kunci tertentu seperti 'HOME'. Kode kunci Android ditentukan oleh kelas android.view.KeyEvent sebagai konstanta yang dimulai dengan awalan KEYCODE_ .

Tata letak kunci menentukan bagaimana kode kunci Linux dipetakan ke kode kunci Android. Tata letak tombol yang berbeda dapat digunakan tergantung pada model keyboard, bahasa, negara, tata letak, atau fungsi khusus.

Kombinasi kode kunci Android diubah menjadi kode karakter menggunakan perangkat dan peta karakter kunci khusus lokal. Misalnya, bila tombol yang diidentifikasi sebagai KEYCODE_SHIFT dan KEYCODE_A ditekan bersamaan, sistem mencari kombinasi dalam peta karakter kunci dan menemukan huruf kapital 'A', yang kemudian disisipkan ke widget teks yang saat ini difokuskan.

Kode Sumbu Android

Kode sumbu Android adalah pengenal standar yang ditentukan dalam Android API untuk menunjukkan sumbu perangkat tertentu. Kode sumbu Android ditentukan oleh kelas android.view.MotionEvent sebagai konstanta yang dimulai dengan awalan AXIS_ .

Tata letak kunci menentukan bagaimana Kode Sumbu Linux dipetakan ke kode sumbu Android. Tata letak tombol yang berbeda dapat digunakan tergantung pada model perangkat, bahasa, negara, tata letak, atau fungsi khusus.

Status Meta Android

Status meta Android adalah pengenal standar yang ditentukan dalam Android API untuk menunjukkan tombol pengubah mana yang ditekan. META_ meta Android ditentukan oleh kelas android.view.KeyEvent sebagai konstanta yang dimulai dengan prefiks META_ .

Status meta saat ini ditentukan oleh komponen Android InputReader yang memantau saat tombol pengubah seperti KEYCODE_SHIFT_LEFT ditekan / dilepaskan dan menyetel / menyetel ulang tanda status meta yang sesuai.

Hubungan antara kunci pengubah dan status meta di-hardcode tetapi tata letak kunci dapat mengubah cara kunci pengubah itu sendiri dipetakan yang pada gilirannya memengaruhi status meta.

Status Tombol Android

Status tombol Android adalah pengenal standar yang ditentukan dalam Android API untuk menunjukkan tombol mana (pada mouse atau stilus) yang ditekan. BUTTON_ tombol Android ditentukan oleh kelas android.view.MotionEvent sebagai konstanta yang dimulai dengan awalan BUTTON_ .

Status tombol saat ini ditentukan oleh komponen Android InputReader yang memantau saat tombol (pada mouse atau stylus) ditekan / dilepaskan dan menyetel / menyetel ulang tanda status tombol yang sesuai.

Hubungan antara tombol dan status tombol di-hardcode.

Bacaan lebih lanjut

  1. Kode peristiwa masukan Linux
  2. Protokol multi-sentuh Linux
  3. Driver masukan Linux
  4. Linux memaksa umpan balik
  5. Informasi HID, termasuk tabel penggunaan HID