Android giriş alt sistemi nominal olarak sistemin birden fazla katmanını geçen bir olay hattından oluşur.
Giriş hattı
En alt katmanda, fiziksel giriş cihazı, tuşlara basılması ve dokunma temas noktaları gibi durum değişikliklerini tanımlayan sinyaller üretir. Cihaz yazılımı, bu sinyalleri sisteme USB HID raporları göndererek veya I2C veriyolunda kesintiler üreterek gibi 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 birçok standart çevre birimi için, özellikle de HID protokolüne uyanlar için sürücüler sağlar. Bununla birlikte, bir OEM'in genellikle dokunmatik ekranlar gibi sisteme düşük düzeyde sıkı bir şekilde 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ü aracılığıyla standart bir giriş olayı formatına dönüştürülmesinden sorumludur. Linux giriş protokolü, linux/input.h
çekirdek başlık dosyasındaki standart bir olay türleri ve kodları kümesini tanımlar. Bu sayede çekirdek dışındaki bileşenlerin fiziksel tarama kodları, HID kullanımları, I2C mesajları, GPIO pinleri ve benzeri ayrıntılarla ilgilenmesine gerek kalmaz.
Daha sonra Android EventHub
bileşeni, her giriş aygıtıyla ilişkili evdev
sürücüsünü açarak çekirdekten giriş olaylarını okur. Android OutputReader 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ı yapılandırmasına, klavye düzeni dosyalarına ve çeşitli eşleme tablolarına göre Android olay kodlarına çevrilir.
Son olarak, InputReader
giriş olaylarını, bunları uygun pencereye ileten GirişDispatcher'a gönderir.
Kontrol noktaları
Giriş hattında, giriş cihazının davranışı üzerinde kontrolü etkileyen çeşitli aşamalar vardır.
Sürücü ve ürün yazılımı yapılandırması
Giriş cihazı sürücüleri, kayıtlardaki parametreleri ayarlayarak ve hatta bellenimin kendisini yükleyerek giriş cihazının davranışını sıklıkla yapılandırır. Bu, özellikle kalibrasyon sürecinin büyük bir kısmının bu parametrelerin ayarlanmasını veya donanım yazılımının istenen doğruluğu ve duyarlılığı sağlayacak ve gürültüyü bastıracak şekilde sabitlenmesini içerdiği dokunmatik ekranlar gibi gömülü cihazlar için geçerlidir.
Sürücü yapılandırma seçenekleri genellikle çekirdek kartı destek paketinde (BSP) modül parametreleri olarak belirtilir, böylece aynı sürücü birden fazla farklı donanım uygulamasını destekleyebilir.
Bu belge, sürücü veya ürün yazılımı yapılandırmasını açıklamaya çalışır ancak genel olarak aygıt kalibrasyonuna ilişkin rehberlik sunar.
Kart yapılandırma özellikleri
Çekirdek kartı destek paketi (BSP), sanal tuşların dokunmatik ekrana yerleştirilmesi gibi Android Giriş Okuyucusu bileşeni tarafından kullanılan kart yapılandırma özelliklerini SysFS aracılığıyla dışa aktarabilir.
Farklı cihazların kart konfigürasyon özelliklerini nasıl kullandığına ilişkin ayrıntılar için cihaz sınıfı bölümlerine bakın.
Kaynak katmanları
Birkaç giriş davranışı, kapak anahtarının çalışması gibi config.xml
kaynak katmanları yoluyla yapılandırılır.
İşte birkaç örnek:
config_lidKeyboardAccessibility
: Kapak anahtarının donanım klavyesinin erişilebilir mi yoksa gizli mi olduğu üzerindeki etkisini belirtir.config_lidNavigationAccessibility
: Kapak anahtarının izleme dörtgeninin erişilebilir veya gizli olması üzerindeki etkisini belirtir.config_longPressOnPowerBehavior
: Kullanıcı güç düğmesini basılı tuttuğunda ne olması gerektiğini belirtir.config_lidOpenRotation
: Kapak anahtarının ekran yönü üzerindeki etkisini belirtir.
Her bir 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, Android EventHub
ve InputReader
bileşenleri tarafından, tuşlar, kumanda kolu düğmeleri ve kumanda kolu eksenleri için Linux olay kodlarından Android olay kodlarına eşlemeyi yapılandırmak üzere kullanılır. Eşleme cihaza veya dile bağlı olabilir.
Farklı cihazların anahtar haritaları nasıl kullandığına ilişkin ayrıntılar için cihaz sınıfı bölümlerine bakın.
Giriş cihazı yapılandırma dosyaları
Giriş cihazı yapılandırma dosyaları, Android EventHub
ve InputReader
bileşenleri tarafından, dokunma boyutu bilgilerinin nasıl raporlanacağı gibi özel cihaz özelliklerini yapılandırmak için kullanılır.
Farklı cihazların giriş cihazı yapılandırma haritalarını nasıl kullandığına ilişkin ayrıntılar için cihaz sınıfı bölümlerine bakın.
HID kullanımlarını ve olay kodlarını anlama
Klavyedeki herhangi bir tuşa, oyun kumandasındaki düğmeye, joystick eksenine veya diğer kontrollere atıfta bulunmak için genellikle birkaç farklı tanımlayıcı kullanılır. Bu tanımlayıcılar arasındaki ilişkiler her zaman aynı değildir: bazıları sabit, bazıları ise 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 tuş, düğme veya diğer kontrolle ilişkilendirilen cihaza özel bir tanımlayıcıdır. Fiziksel tarama kodları genellikle bir cihazdan 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 ürün yazılımı veya cihaz sürücüsü sorumludur.
Tarama kodları esas olarak klavyelerin ilgisini çekmektedir. Diğer cihazlar genellikle GPIO pinlerini, I2C mesajlarını veya başka araçları kullanarak düşük düzeyde iletişim kurar. Sonuç olarak, yazılım yığınının üst katmanları, olup biteni 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 dokunma 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ı HID spesifikasyonuna uygundur, bu da sistemin bunlarla tek tip bir arayüz oluşturmasını sağlar.
Android Framework, HID kullanım kodlarını Linux anahtar kodlarına ve diğer tanımlayıcılara dönüştürmek için Linux çekirdeği HID sürücülerine dayanır. Bu nedenle HID kullanımları esas 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ındaKEY_
veyaBTN_
ö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 cihaza özgü sinyalleri Linux anahtar kodlarına çevirmekten veEV_KEY
olaylarının bir parçası olarak bunlar hakkında bilgi sağlamaktan sorumludur.Android API bazen bir anahtarla ilişkili Linux anahtar kodunu "tarama kodu" olarak adlandırır. Bu teknik olarak yanlıştır ancak Linux anahtar kodlarını API'deki Android anahtar kodlarından ayırmaya yardımcı olur.
- Linux Göreli veya Mutlak Eksen Kodu
Linux göreceli veya mutlak eksen kodu, bir farenin X ekseni boyunca göreceli hareketleri veya bir joystick'in X ekseni boyunca mutlak konumu gibi bir eksen boyunca göreceli hareketleri veya mutlak konumları raporlamak için standart bir tanımlayıcıdır. Linux eksen kodu,
linux/input.h
başlık dosyasındaREL_
veyaABS_
önekiyle başlayan sabitler kullanılarak tanımlanır. Linux çekirdeği giriş sürücüleri, HID kullanımlarını ve diğer cihaza özgü sinyalleri Linux eksen kodlarına çevirmekten veEV_REL
veEV_ABS
olaylarının bir parçası olarak bunlar hakkında bilgi sağlamaktan sorumludur.- Linux Anahtar Kodu
Linux anahtar kodu, kapak anahtarı gibi bir cihazdaki anahtarın durumunu raporlamaya yönelik standart bir tanımlayıcıdır. Linux anahtar kodları,
linux/input.h
başlık dosyasındaSW_
önekiyle başlayan sabitler kullanılarak tanımlanır. Linux çekirdeği giriş sürücüleri, anahtar durumu değişiklikleriniEV_SW
olayları olarak bildirir.Android uygulamaları genellikle anahtarlardan olay almaz ancak sistem bunları çeşitli cihaza özgü 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ındanKEYCODE_
ö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ı, cihaza ve bölgeye özgü anahtar karakter haritası kullanılarak karakter kodlarına dönüştürülür. Örneğin,
KEYCODE_SHIFT
veKEYCODE_A
olarak tanımlanan tuşların her ikisine de birlikte basıldığında, sistem, anahtar karakter haritasındaki kombinasyonu arar ve büyük harf 'A'yı bulur ve bu harf daha sonra o anda odaklanmış olan metin widget'ına eklenir.- 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ındanAXIS_
ö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ındanMETA_
önekiyle başlayan sabitler olarak tanımlanır.Geçerli meta durumu,
KEYCODE_SHIFT_LEFT
gibi değiştirici tuşlara basıldığında/bırakıldığında izleyen ve uygun meta durum bayrağını ayarlayan/sıfırlayan Android OutputReader bileşeni tarafından belirlenir.Değiştirici tuşlar ile meta durumlar arasındaki ilişki sabit kodlanmıştır ancak anahtar düzeni, değiştirici tuşların nasıl eşlendiğini değiştirebilir ve bu da meta durumları etkiler.
- Android Düğme Durumu
Android düğme durumu, Android API'sinde tanımlanan ve hangi düğmelere (fare veya ekran kalemi üzerinde) basıldığını gösteren standart bir tanımlayıcıdır. Android düğme durumları,
android.view.MotionEvent
sınıfı tarafındanBUTTON_
önekiyle başlayan sabitler olarak tanımlanır.Geçerli düğme durumu, düğmelere (fare veya kalem üzerindeki) ne zaman basıldığını/bırakıldığını izleyen ve uygun düğme durumu bayrağını ayarlayan/sıfırlayan Android OutputReader bileşeni tarafından belirlenir.
Düğmeler ve düğme durumları arasındaki ilişki sabit kodlanmıştır.
daha fazla okuma
- Linux giriş olay kodları
- Linux çoklu dokunma protokolü
- Linux giriş sürücüleri
- Linux kuvvet geri bildirimi
- HID kullanım tabloları dahil HID bilgileri