![Android Giriş HAL simgesi](https://source.android.google.cn/static/docs/core/interaction/input/images/ape_fwk_hal_input.png?authuser=19&hl=tr)
Android giriş alt sistemi, nominal olarak sistemin birden fazla katmanını kat eden bir etkinlik ardışık düzeninden oluşur.
Giriş ardışık düzeni
Fiziksel giriş cihazı, en alt katmanda tuş basma ve dokunma temas noktaları gibi durum değişikliklerini açıklayan sinyaller üretir. Cihaz donanım yazılımı, bu sinyalleri bir şekilde (ör. sisteme USB HID raporları göndererek veya bir I2C veriyolunda kesinti oluşturarak) kodlar ve iletir.
Ardından sinyaller, Linux çekirdeğinde bir cihaz 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ü sağlar. Ancak OEM'ler, dokunmatik ekranlar gibi sisteme düşük düzeyde sıkı bir şekilde entegre edilmiş yerleşik cihazlar için genellikle özel sürücüler sağlamalıdır.
Giriş cihazı sürücüleri, Linux giriş protokolü aracılığıyla cihaza özgü sinyalleri standart bir giriş etkinliği biçimine dönüştürmekten sorumludur. Linux giriş protokolü, linux/input.h
çekirdek başlık dosyasında standart bir etkinlik türü ve kod grubu tanımlar.
Bu sayede, çekirdeğin dışındaki bileşenlerin fiziksel tarama kodları, HID kullanımları, I2C mesajları, GPIO pimleri gibi ayrıntılarla ilgilenmesi gerekmez.
Ardından Android EventHub
bileşeni, her giriş cihazıyla ilişkili evdev
sürücüsünü açarak çekirdekten giriş etkinliklerini okur.
Ardından Android InputReader bileşeni, giriş etkinliklerinin kodunu cihaz sınıfına göre çözer ve bir Android giriş etkinliği akışı oluşturur. Bu işlem kapsamında, Linux giriş protokolü etkinlik kodları, giriş cihazı yapılandırmasına, klavye düzeni dosyalarına ve çeşitli eşleme tablolarına göre Android etkinlik kodlarına çevrilir.
Son olarak InputReader
, giriş etkinliklerini InputDispatcher'a gönderir. InputDispatcher, bu etkinlikleri uygun alana yönlendirir.
Kontrol noktaları
Giriş ardışık düzeninde, giriş cihazının davranışı üzerinde kontrol sağlayan birkaç aşama vardır.
Sürücü ve donanım yazılımı yapılandırması
Giriş cihazı sürücüleri, kayıtlı parametreleri ayarlayarak veya hatta donanım yazılımını yükleyerek giriş cihazının davranışını sık sık yapılandırır. Bu durum özellikle, kalibrasyon sürecinin büyük bir kısmının istenen doğruluğu ve duyarlılığı sağlamak ve gürültüyü azaltmak için bu parametreleri ayarlama veya donanım yazılımını düzeltme işlemlerini içerdiği dokunmatik ekranlar gibi yerleşik cihazlarda geçerlidir.
Sürücü yapılandırma seçenekleri, aynı sürücünün birden fazla farklı donanım uygulamasını destekleyebilmesi için genellikle çekirdek kart destek paketinde (BSP) modül parametreleri olarak belirtilir.
Bu dokümanlar, sürücü veya donanım yazılımı yapılandırmasını açıklamaya çalışır ancak genel olarak cihaz kalibrasyonuyla ilgili yol gösterici bilgiler sunar.
Tahta yapılandırma özellikleri
Çekirdek kart destek paketi (BSP), Android InputReader bileşeni tarafından kullanılan kart yapılandırma özelliklerini (ör. dokunmatik ekrana sanal tuşların yerleştirilmesi) SysFS aracılığıyla dışa aktarabilir.
Farklı cihazların kart yapılandırma özelliklerini nasıl kullandığıyla ilgili ayrıntılar için cihaz sınıfı bölümlerine bakın.
Kaynak yer paylaşımları
Kapak anahtarının çalışması gibi bazı giriş davranışları, config.xml
'te kaynak yer paylaşımları aracılığıyla yapılandırılır.
Aşağıda birkaç örnek verilmiştir:
-
config_lidKeyboardAccessibility
: Kapak anahtarının, donanım klavyenin erişilebilir olup olmadığına dair etkisini belirtir. -
config_lidNavigationAccessibility
: Kapak anahtarının, dokunmatik -
config_longPressOnPowerBehavior
: Kullanıcı güç düğmesini basılı tuttuğunda ne yapılacağını belirtir. -
config_lidOpenRotation
: Kapak anahtarının ekran yönüne etkisini belirtir.
Her yapılandırma seçeneğiyle ilgili ayrıntılar için frameworks/base/core/res/res/values/config.xml
bölümündeki dokümanlara bakın.
Tuş eşlemeler
Tuş haritaları, Android EventHub
ve InputReader
bileşenleri tarafından tuşlar, kontrol çubuğu düğmeleri ve kontrol çubuğu eksenleri için Linux etkinlik kodlarından Android etkinlik kodlarına eşlemeyi yapılandırmak üzere kullanılır. Eşleme, cihaza veya dile bağlı olabilir.
Farklı cihazların anahtar haritalarını nasıl kullandığıyla ilgili 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 raporlandığı 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ığıyla ilgili ayrıntılar için cihaz sınıfı bölümlerine bakın.
HID kullanımlarını ve etkinlik kodlarını anlama
Klavyedeki bir tuşa, oyun kumandasındaki bir düğmeye, kontrol çubuğu eksenine veya başka bir kontrole 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 cihazın özelliklerine, cihaz sürücüsüne, geçerli yerel ayara, sistem yapılandırmasına, kullanıcı tercihlerine ve diğer faktörlere bağlı olarak değişen bir dizi eşleme tablosuna bağlıdır.
- Fiziksel Tarama Kodu
-
Fiziksel tarama kodu, her anahtar, düğme veya diğer denetimle ilişkilendirilmiş cihaza özgü bir tanımlayıcıdır. Fiziksel tarama kodları genellikle cihazdan cihaza değiştiğinden, bunları HID Kullanımları veya Linux anahtar kodları gibi standart tanımlayıcılarla eşleştirmekten donanım yazılımı veya cihaz sürücüsü sorumludur.
Tarama kodları genellikle klavyeler için ilgi çekicidir. Diğer cihazlar genellikle GPIO pinleri, I2C mesajları veya başka yöntemler kullanarak düşük seviyede iletişim kurar. Sonuç olarak, yazılım yığınının üst katmanları, neler olduğunu anlamak için cihaz sürücülerine ihtiyaç duyar.
- HID Kullanımı
-
HID kullanımı, klavye tuşu, kontrol çubuğu 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. USB ve Bluetooth giriş cihazlarının çoğu HID spesifikasyonuna uygundur. Bu, sistemin bu cihazlarla tek tip bir şekilde 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 çekirdek HID sürücülerini kullanır. Bu nedenle HID kullanımları, esas olarak çevre birimi üreticileri için ilgi çekicidir.
- Linux Anahtar Kodu
-
Linux anahtar kodu, bir anahtar veya düğme için standart bir tanımlayıcıdır. Linux anahtar kodları,
KEY_
veyaBTN_
ön ekiyle başlayan sabitler kullanılaraklinux/input.h
başlık dosyasında tanımlanır. Fiziksel tarama kodlarını, HID kullanımlarını ve cihaza özgü diğer sinyalleri Linux anahtar kodlarına dönüştürmekten ve bunlarla ilgili bilgileriEV_KEY
etkinlikleri kapsamında sunmaktan Linux çekirdek giriş sürücüleri sorumludur.Android API, bazen bir anahtarla ilişkili Linux anahtar kodunu "tarama kodu" olarak ifade eder. Bu, teknik olarak yanlıştır ancak API'de Linux anahtar kodlarını Android anahtar kodlarından ayırmaya yardımcı olur.
- Linux Göreli veya Mutlak Eksen Kodu
-
Linux göreli veya mutlak eksen kodu, bir eksen boyunca göreli hareketleri veya mutlak konumları (ör. farenin X ekseni boyunca göreli hareketleri veya bir kontrol çubuğunun X ekseni boyunca mutlak konumu) bildirmek için kullanılan standart bir tanımlayıcıdır. Linux eksen kodu,
linux/input.h
üstbilgi dosyasındaREL_
veyaABS_
ön ekiyle başlayan sabitler kullanılarak tanımlanır. Linux çekirdek giriş sürücüleri, HID kullanımlarını ve cihaza özgü diğer sinyalleri Linux eksen kodlarına dönüştürmekten ve bunlarla ilgili bilgileriEV_REL
veEV_ABS
etkinlikleri kapsamında sunmaktan sorumludur. - Linux Switch Kodu
-
Linux anahtar kodu, cihazdaki bir anahtarın (ör. kapak anahtarı) durumunu bildirmek için kullanılan standart bir tanımlayıcıdır. Linux anahtar kodları,
SW_
ön ekiyle başlayan sabitler kullanılaraklinux/input.h
üstbilgi dosyasında tanımlanır. Linux çekirdek giriş sürücüleri, anahtar durumu değişiklikleriniEV_SW
etkinlikleri olarak raporlar.Android uygulamaları genellikle anahtarlardan etkinlik almaz ancak sistem, cihaza özgü çeşitli işlevleri kontrol etmek için bunları dahili olarak kullanabilir.
- Android Anahtar Kodu
-
Android anahtar kodu, Android API'de "HOME" gibi belirli bir anahtarı belirtmek için tanımlanan standart bir tanımlayıcıdır. Android anahtar kodları,
android.view.KeyEvent
sınıfı tarafındanKEYCODE_
ön ekiyle başlayan sabit değerler olarak tanımlanır.Anahtar düzeni, Linux anahtar kodlarının Android anahtar kodlarıyla nasıl eşleneceğ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 yerel ayara özel bir 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 birlikte basıldığında sistem, tuş karakter haritasında kombinasyonu arar ve büyük harf "A"yı bulur. Bu harf daha sonra o anda odaklanmış olan metin widget'ına yerleştirilir. - Android Eksen Kodu
-
Android eksen kodu, Android API'de belirli bir cihaz eksenini belirtmek için tanımlanan standart bir tanımlayıcıdır. Android eksen kodları,
android.view.MotionEvent
sınıfı tarafındanAXIS_
ön ekiyle başlayan sabit değerler olarak tanımlanır.Anahtar düzeni, Linux eksen kodlarının Android eksen kodlarıyla nasıl eşleneceğ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, Android API'de hangi değiştirici tuşlara basıldığını belirtmek için tanımlanan standart bir tanımlayıcıdır. Android meta durumları,
android.view.KeyEvent
sınıfı tarafındanMETA_
ön ekiyle başlayan sabitler olarak tanımlanır.Mevcut meta durum,
KEYCODE_SHIFT_LEFT
gibi değiştirici tuşların ne zaman basıldığını / bırakıldığını izleyen ve uygun meta durum işaretini ayarlayan / sıfırlayan Android InputReader bileşeni tarafından belirlenir.Değiştirici tuşlar ile meta durumlar arasındaki ilişki sabit kodlanmıştır ancak tuş düzeni, değiştirici tuşların nasıl eşlendiğini değiştirebilir. Bu da meta durumları etkiler.
- Android Düğme Durumu
-
Android düğme durumu, Android API'de hangi düğmelere (fare veya ekran kalemi üzerinde) basıldığını belirtmek için tanımlanan standart bir tanımlayıcıdır. Android düğme durumları,
android.view.MotionEvent
sınıfı tarafındanBUTTON_
ön ekiyle başlayan sabitler olarak tanımlanır.Mevcut düğme durumu, düğmelerin (fare veya ekran kalemi üzerinde) ne zaman basıldığını / bırakıldığını izleyen ve uygun düğme durumu işaretini ayarlayan / sıfırlayan Android InputReader bileşeni tarafından belirlenir.
Düğmeler ile düğme durumları arasındaki ilişki koda yerleştirilmiştir.
Daha fazla bilgi
- Linux giriş etkinliği 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