
Android giriş alt sistemi, sözde sistemin birden çok katmanından geçen bir olay boru hattından oluşur.
Giriş Boru 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 üretici yazılımı, bu sinyalleri sisteme USB HID raporları göndererek veya bir I2C veriyolunda kesintiler üreterek 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. Bununla birlikte, bir OEM'nin genellikle, dokunmatik ekranlar gibi sisteme alt düzeyde sıkı bir şekilde entegre edilmiş yerleşik aygıtlar için özel sürücüler sağlaması gerekir.
Giriş aygıtı sürücüleri, aygıta özgü sinyalleri Linux giriş protokolü yoluyla standart bir giriş olayı biçimine çevirmekten 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 çekirdek dışındaki bileşenlerin fiziksel tarama kodları, HID kullanımları, I2C mesajları, GPIO pinleri ve benzeri detaylarla ilgilenmesine gerek kalmaz.
Ardından, Android EventHub
bileşeni, her bir giriş cihazıyla ilişkilendirilmiş evdev
sürücüsünü açarak çekirdekten giriş olaylarını okur. Android InputReader bileşeni daha sonra cihaz sınıfına göre giriş olaylarının kodunu çö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 yerleşim dosyalarına ve çeşitli eşleme tablolarına göre Android olay kodlarına çevrilir.
Son olarak, InputReader, girdi olaylarını, onları 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 Ürün Yazılımı Yapılandırması
Girdi aygıtı sürücüleri, kayıtlardaki parametreleri ayarlayarak ve hatta ürün yazılımının kendisini yükleyerek sık sık girdi aygıtının davranışını yapılandırır. Bu, özellikle, kalibrasyon sürecinin büyük bir bölümünün bu parametrelerin ayarlanmasını veya istenen doğruluğu ve yanıtı sağlamak ve gürültüyü bastırmak için ürün yazılımını düzeltmeyi 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 sabit yazılım yapılandırmasını açıklama girişiminde bulunur, ancak genel olarak cihaz kalibrasyonu konusunda rehberlik sunar.
Pano Yapılandırma Özellikleri
Çekirdek kartı destek paketi (BSP), dokunmatik ekrana sanal anahtarların yerleştirilmesi gibi, Android InputReader bileşeni tarafından kullanılan SysFS yoluyla kart yapılandırma özelliklerini dışa aktarabilir.
Farklı aygıtların pano yapılandırma özelliklerini nasıl kullandıklarına ilişkin ayrıntılar için aygıt sınıfı bölümlerine bakın.
Kaynak Bindirmeleri
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 veya gizli olması üzerindeki etkisini belirtir.config_lidNavigationAccessibility
: İzleme dörtgeninin erişilebilir veya gizli olması üzerindeki kapak anahtarının 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 eşlemeler, Android EventHub
ve InputReader
bileşenleri tarafından Linux olay kodlarından anahtarlar, oyun kolu düğmeleri ve oyun kolu eksenleri için Android olay kodlarına eşlemeyi yapılandırmak için kullanılır. Eşleme, cihaza veya dile bağlı olabilir.
Farklı cihazların anahtar haritaları nasıl kullandığı hakkında ayrıntılar için cihaz sınıfı bölümlerine bakın.
Giriş cihazı yapılandırma dosyaları
Giriş aygıtı yapılandırma dosyaları, dokunmatik boyut bilgilerinin nasıl raporlandığı gibi özel aygıt özelliklerini yapılandırmak için Android EventHub
ve InputReader
bileşenleri tarafından kullanılır.
Farklı aygıtların giriş aygıtı yapılandırma haritalarını nasıl kullandığıyla ilgili ayrıntılar için aygıt sınıfı bölümlerine bakın.
HID Kullanımlarını ve Olay Kodlarını Anlamak
Bir klavyedeki herhangi bir tuşa, bir oyun kumandasındaki düğmeye, oyun kolu eksenine veya başka bir kontrole 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 ve bazıları cihazın özelliklerine, cihaz sürücüsüne, mevcut 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 kontrolle ilişkilendirilmiş, cihaza özgü 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 üretici yazılımı veya cihaz sürücüsü sorumludur.
Tarama kodları esas olarak klavyeler için ilgi çekicidir. Diğer cihazlar tipik olarak GPIO pinleri, I2C mesajları 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, oyun çubuğu 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 tekdüze bir şekilde arabirim 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 dayanır. Bu nedenle, HID kullanımları temel olarak çevre birim üreticilerinin ilgisini çekmektedir.
- Linux Anahtar Kodu
Bir 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 aygıta özgü sinyalleri Linux anahtar kodlarına çevirmekten ve bunlar hakkındaEV_KEY
olaylarının bir parçası olarak bilgi vermekten sorumludur.Android API bazen bir anahtarla ilişkili Linux anahtar kodunu "tarama kodu" olarak ifade eder. Bu teknik olarak yanlıştır, ancak Linux anahtar kodlarını API'deki Android anahtar kodlarından ayırmaya yardımcı olur.
- Linux Göreceli veya Mutlak Eksen Kodu
Bir Linux göreli veya mutlak eksen kodu, bir farenin X ekseni boyunca göreli hareketleri veya bir oyun çubuğunun X ekseni boyunca mutlak konumu gibi, bir eksen boyunca göreli hareketleri veya mutlak konumları bildirmek 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 aygıta özgü sinyalleri Linux eksen kodlarına çevirmekten ve bunlar hakkındaEV_REL
veEV_ABS
olaylarının bir parçası olarak bilgi vermekten 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ı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ı cihaza özgü çeşitli işlevleri kontrol etmek için dahili olarak kullanabilir.
- Android Anahtar Kodu
Bir 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ı, bir cihaz ve yerel ayara ö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 birlikte basıldığında, sistem tuş karakter haritasındaki kombinasyonu arar ve daha sonra o anda odaklanılan metin parçacığına eklenen büyük 'A' harfini bulur.- Android Eksen Kodu
Bir 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.Tuş düzeni, Linux Eksen Kodlarının Android eksen kodlarına 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
Bir 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 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 tuşlar ve meta durumlar arasındaki ilişki sabit kodlanmıştır, ancak tuş düzeni, değiştirici tuşları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ındanBUTTON_
önekiyle başlayan sabitler olarak tanımlanır.Geçerli düğme durumu, düğmelere (fare veya ekran kalemi üzerindeki) 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
- Linux giriş olay kodları
- Linux çoklu dokunma protokolü
- Linux giriş sürücüleri
- Linux kuvvet geri bildirimi
- HID kullanım tabloları da dahil olmak üzere HID bilgileri