Giriş

Android Giriş HAL simgesi

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_ veya BTN_ ön ekiyle başlayan sabitler kullanılarak linux/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 bilgileri EV_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ında REL_ veya ABS_ ö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 bilgileri EV_REL ve EV_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ılarak linux/input.h üstbilgi dosyasında tanımlanır. Linux çekirdek giriş sürücüleri, anahtar durumu değişikliklerini EV_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ından KEYCODE_ ö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 ve KEYCODE_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ından AXIS_ ö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ından META_ ö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ından BUTTON_ ö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

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