Giriş

Android Girişi HAL simgesi

Android girdi alt sistemi, nominal olarak, sistemin birden çok katmanını geçen bir olay hattından oluşur.

Giriş Hattı

En alt katmanda, fiziksel giriş cihazı, tuşa basma ve dokunma temas noktaları gibi durum değişikliklerini tanımlayan sinyaller üretir. Aygıt bellenimi, sisteme USB HID raporları göndererek veya bir I2C veri yolunda kesintiler üreterek bu sinyalleri bir şekilde kodlar ve iletir.

Sinyaller daha sonra Linux çekirdeğindeki bir aygıt sürücüsü tarafından çözülür. Linux çekirdeği, özellikle HID protokolüne bağlı olanlar olmak üzere birçok standart çevre birimi için sürücüler sağlar. Ancak, bir OEM'in genellikle, dokunmatik ekranlar gibi düşük düzeyde sisteme sıkıca entegre edilmiş gömülü aygıtlar için özel sürücüler sağlaması gerekir.

Giriş aygıtı sürücüleri, aygıta özgü sinyallerin Linux giriş protokolü yoluyla standart bir giriş olayı biçimine dönüştürülmesinden sorumludur. Linux giriş protokolü, linux/input.h çekirdek başlık dosyasında standart bir olay türleri ve kodları kümesi tanımlar. Bu sayede kernel dışındaki bileşenlerin fiziksel tarama kodları, HID kullanımları, I2C mesajları, GPIO pinleri vb. ayrıntılarla ilgilenmesine gerek kalmaz.

Ardından, Android EventHub bileşeni, her bir giriş aygıtıyla ilişkili evdev sürücüsünü açarak çekirdekteki giriş olaylarını okur. Android InputReader bileşeni daha sonra giriş olaylarının kodunu cihaz sınıfına göre çözer ve bir Android giriş olayları akışı üretir. Bu sürecin bir parçası olarak, Linux giriş protokolü olay kodları, giriş cihazı konfigürasyonuna, klavye düzeni dosyalarına ve çeşitli eşleme tablolarına göre Android olay kodlarına çevrilir.

Son olarak, InputReader, girdi olaylarını uygun pencereye ileten InputReader gönderir.

Kontrol noktaları

Giriş hattında, giriş cihazının davranışı üzerinde kontrolü etkileyen birkaç aşama vardır.

Sürücü ve Bellenim Yapılandırması

Giriş aygıtı sürücüleri, kayıtlardaki parametreleri ayarlayarak veya hatta bellenimin kendisini yükleyerek giriş aygıtının davranışını sıklıkla yapılandırır. Bu özellikle, kalibrasyon işleminin büyük bir bölümünün bu parametrelerin ayarlanmasını veya istenen doğruluğu ve tepkiyi sağlamak ve gürültüyü bastırmak için üretici yazılımının sabitlenmesini içerdiği dokunmatik ekranlar gibi gömülü cihazlar için geçerlidir.

Sürücü yapılandırma seçenekleri, aynı sürücünün birden çok farklı donanım uygulamasını destekleyebilmesi için genellikle çekirdek kartı destek paketinde (BSP) modül parametreleri olarak belirtilir.

Bu belge, sürücü veya bellenim yapılandırmasını tanımlamaya çalışır, ancak genel olarak cihaz kalibrasyonuna ilişkin rehberlik sunar.

Kart Yapılandırma Özellikleri

Çekirdek kartı destek paketi (BSP), sanal anahtarların dokunmatik ekrana yerleştirilmesi gibi Android InputReader bileşeni tarafından kullanılan SysFS aracılığıyla kart yapılandırma özelliklerini dışa aktarabilir.

Farklı cihazların kart konfigürasyon özelliklerini nasıl kullandığı hakkında ayrıntılar için cihaz sınıfı bölümlerine bakın.

Kaynak Bindirmeleri

Birkaç giriş davranışı, kapak anahtarının çalışması gibi config.xml kaynak bindirmeleri yoluyla yapılandırılır.

İşte birkaç örnek:

  • config_lidKeyboardAccessibility : Donanım klavyesinin erişilebilir mi yoksa gizli mi olduğu üzerindeki kapak anahtarının etkisini belirtir.

  • config_lidNavigationAccessibility : Kapak anahtarının izleme dörtgeninin erişilebilir mi yoksa gizli mi olduğu üzerindeki etkisini belirtir.

  • config_longPressOnPowerBehavior : Kullanıcı güç düğmesini basılı tuttuğunda ne olacağını belirtir.

  • config_lidOpenRotation : Kapak anahtarının ekran yönü üzerindeki etkisini belirtir.

Her yapılandırma seçeneğiyle ilgili ayrıntılar için frameworks/base/core/res/res/values/config.xml içindeki belgelere bakın.

Anahtar Haritalar

Anahtar haritalar, tuşlar, joystick düğmeleri ve joystick eksenleri için Linux olay kodlarından Android olay kodlarına eşlemeyi yapılandırmak için Android EventHub ve InputReader bileşenleri tarafından kullanılır. Eşleme, cihaza veya dile bağlı olabilir.

Farklı cihazların anahtar haritaları nasıl kullandığıyla ilgili ayrıntılar için cihaz sınıfı bölümlerine bakın.

Cihaz Yapılandırma Dosyalarını Girin

Giriş cihazı yapılandırma dosyaları, dokunma boyutu bilgilerinin nasıl raporlandığı gibi özel cihaz özelliklerini yapılandırmak için Android EventHub ve InputReader bileşenleri tarafından kullanılır.

Farklı cihazların giriş cihazı yapılandırma haritalarını nasıl kullandığı hakkında ayrıntılar için cihaz sınıfı bölümlerine bakın.

HID Kullanımlarını ve Olay Kodlarını Anlama

Genellikle klavyedeki herhangi bir tuşa, oyun kumandasındaki düğmeye, joystick eksenine veya diğer kontrollere atıfta bulunmak için kullanılan birkaç farklı tanımlayıcı vardır. Bu tanımlayıcılar arasındaki ilişkiler her zaman aynı değildir: bazıları sabit olan ve bazıları aygıtın özelliklerine, aygıt sürücüsüne, geçerli yerel ayara, sistem yapılandırmasına göre değişen bir dizi eşleme tablosuna bağlıdırlar. kullanıcı tercihleri ​​ve diğer faktörler.

Fiziksel Tarama Kodu

Fiziksel tarama kodu, her bir tuş, düğme veya diğer kontrollerle ilişkilendirilen cihaza özel bir tanımlayıcıdır. Fiziksel tarama kodları genellikle bir aygıttan diğerine farklılık gösterdiğinden, bunları HID ​​Kullanımları veya Linux anahtar kodları gibi standart tanımlayıcılarla eşleştirmekten üretici yazılımı veya aygıt sürücüsü sorumludur.

Tarama kodları esas olarak klavyeler için ilgi çekicidir. Diğer cihazlar tipik olarak GPIO pinlerini, I2C mesajlarını veya diğer araçları kullanarak düşük seviyede iletişim kurar. Sonuç olarak, yazılım yığınının üst katmanları, neler olup bittiğini anlamak için aygıt sürücülerine güvenir.

HID Kullanımı

HID kullanımı, klavye tuşu, joystick ekseni, fare düğmesi veya dokunmatik temas noktası gibi bir kontrolün durumunu bildirmek için kullanılan standart bir tanımlayıcıdır. Çoğu USB ve Bluetooth giriş cihazı, sistemin bunlarla tek tip bir şekilde arayüz oluşturmasını sağlayan HID spesifikasyonuna uygundur.

Android Çerçevesi, HID kullanım kodlarını Linux anahtar kodlarına ve diğer tanımlayıcılara çevirmek için Linux çekirdeği HID sürücülerine güvenir. Bu nedenle HID kullanımları temel olarak çevre birimi üreticilerinin ilgisini çekmektedir.

Linux Anahtar Kodu

Linux anahtar kodu, bir anahtar veya düğme için standart bir tanımlayıcıdır. Linux anahtar kodları linux/input.h başlık dosyasında KEY_ veya BTN_ önekiyle başlayan sabitler kullanılarak tanımlanır. Linux çekirdeği giriş sürücüleri, fiziksel tarama kodlarını, HID kullanımlarını ve diğer aygıta özel sinyalleri Linux anahtar kodlarına çevirmekten ve bunlar hakkında EV_KEY olaylarının bir parçası olarak bilgi iletmekten sorumludur.

Android API'si bazen bir anahtarla ilişkilendirilen Linux anahtar koduna "tarama kodu" olarak atıfta bulunur. Bu teknik olarak yanlıştır, ancak Linux anahtar kodlarını API'deki Android anahtar kodlarından ayırt etmeye yardımcı olur.

Linux Göreli veya Mutlak Eksen Kodu

Bir Linux göreli veya mutlak eksen kodu, bir farenin X ekseni boyunca göreli hareketleri veya bir joystick'in X ekseni boyunca mutlak konumu gibi bir eksen boyunca göreli hareketleri veya mutlak konumları raporlamak için standart bir tanımlayıcıdır. Linux eksen kodu, linux/input.h başlık dosyasında REL_ veya ABS_ önekiyle başlayan sabitler kullanılarak tanımlanır. Linux çekirdeği giriş sürücüleri, HID kullanımlarını ve diğer aygıta özel sinyalleri Linux eksen kodlarına çevirmekten ve bunlar hakkında EV_REL ve EV_ABS olaylarının bir parçası olarak bilgi iletmekten sorumludur.

Linux Anahtarı Kodu

Linux anahtar kodu, kapak anahtarı gibi bir cihazdaki anahtarın durumunu bildirmek için standart bir tanımlayıcıdır. Linux anahtar kodları, linux/input.h başlık dosyasında SW_ önekiyle başlayan sabitler kullanılarak tanımlanır. Linux çekirdeği giriş sürücüleri, anahtar durumu değişikliklerini EV_SW olayları olarak bildirir.

Android uygulamaları genellikle anahtarlardan olay almaz, ancak sistem bunları cihaza özgü çeşitli işlevleri kontrol etmek için dahili olarak kullanabilir.

Android Anahtar Kodu

Android anahtar kodu, 'HOME' gibi belirli bir anahtarı belirtmek için Android API'sinde tanımlanan standart bir tanımlayıcıdır. Android anahtar kodları, android.view.KeyEvent sınıfı tarafından KEYCODE_ önekiyle başlayan sabitler olarak tanımlanır.

Anahtar düzeni, Linux anahtar kodlarının Android anahtar kodlarıyla nasıl eşlendiğini belirtir. Klavye modeline, dile, ülkeye, düzene veya özel işlevlere bağlı olarak farklı tuş düzenleri kullanılabilir.

Android anahtar kodlarının kombinasyonları, bir cihaz ve yerel ayara özel anahtar karakter haritası kullanılarak karakter kodlarına dönüştürülür. Örneğin, KEYCODE_SHIFT ve KEYCODE_A olarak tanımlanan tuşların her ikisine birden basıldığında, sistem tuş karakter haritasında kombinasyonu arar ve daha sonra o anda odaklanmış olan metin parçacığına eklenen büyük harf 'A'yı bulur.

Android Eksen Kodu

Android eksen kodu, belirli bir cihaz eksenini belirtmek için Android API'sinde tanımlanan standart bir tanımlayıcıdır. Android eksen kodları, android.view.MotionEvent sınıfı tarafından AXIS_ önekiyle başlayan sabitler olarak tanımlanır.

Anahtar düzeni, Linux Eksen Kodlarının Android eksen kodlarıyla nasıl eşlendiğini belirtir. Cihaz modeline, dile, ülkeye, düzene veya özel işlevlere bağlı olarak farklı tuş düzenleri kullanılabilir.

Android Meta Durumu

Android meta durumu, hangi değiştirici tuşlara basıldığını belirtmek için Android API'sinde tanımlanan standart bir tanımlayıcıdır. Android meta durumları, android.view.KeyEvent sınıfı tarafından META_ önekiyle başlayan sabitler olarak tanımlanır.

Geçerli meta durum, KEYCODE_SHIFT_LEFT gibi değiştirici tuşlara ne zaman basıldığını/bırakıldığını izleyen ve uygun meta durum bayrağını ayarlayan/sıfırlayan Android InputReader bileşeni tarafından belirlenir.

Değiştirici anahtarlar ve meta durumlar arasındaki ilişki sabit kodlanmıştır, ancak anahtar düzeni, değiştirici anahtarların kendilerinin nasıl eşlendiğini değiştirebilir ve bu da meta durumları etkiler.

Android Düğme Durumu

Android düğme durumu, hangi düğmelere (fare veya ekran kalemi üzerinde) basıldığını belirtmek için Android API'sinde tanımlanan standart bir tanımlayıcıdır. Android düğme durumları, android.view.MotionEvent sınıfı tarafından BUTTON_ önekiyle başlayan sabitler olarak tanımlanır.

Geçerli düğme durumu, düğmelere (fare veya ekran kalemi üzerinde) ne zaman basıldığını/bırakıldığını izleyen ve uygun düğme durumu bayrağını ayarlayan/sıfırlayan Android InputReader bileşeni tarafından belirlenir.

Düğmeler ve düğme durumları arasındaki ilişki sabit kodlanmıştır.

Daha fazla okuma

  1. Linux giriş olay kodları
  2. Linux çoklu dokunma protokolü
  3. Linux giriş sürücüleri
  4. Linux kuvvet geri bildirimi
  5. HID kullanım tabloları dahil HID bilgileri