Google 致力于为黑人社区推动种族平等。查看具体举措
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

Giriş

Android Giriş HAL simgesi

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

Giriş Boru Hattı

En alt katmanda, fiziksel giriş cihazı, tuşlara basma ve temas noktaları gibi durum değişikliklerini tanımlayan sinyaller üretir. Cihaz ürün yazılımı, bu sinyalleri, sisteme USB HID raporları göndererek veya bir I2C veriyolunda kesintiler üreterek olduğu 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, özellikle HID protokolüne uyanlar olmak üzere birçok standart çevre birimi için sürücüler sağlar. Bununla birlikte, bir OEM, genellikle dokunmatik ekranlar gibi düşük düzeyde sisteme sıkı bir şekilde entegre edilen yerleşik cihazlar için özel sürücüler sağlamalıdır.

Giriş aygıtı sürücüleri, aygıta özgü sinyalleri Linux giriş protokolü aracılığıyla standart bir giriş olay biçimine çevirmekten sorumludur. Linux girdi protokolü, linux/input.h çekirdek başlık dosyasında standart bir olay türleri ve kodları kümesini tanımlar. Bu şekilde çekirdek dışındaki bileşenlerin fiziksel tarama kodları, HID kullanımları, I2C mesajları, GPIO pinleri ve benzerleri gibi detaylara dikkat etmesine gerek kalmaz.

Daha sonra, Android EventHub bileşeni, her bir giriş cihazıyla ilişkili evdev sürücüsünü açarak giriş olaylarını çekirdekten 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ışı oluşturur. Bu sürecin bir parçası olarak, Linux giriş protokolü olay kodları, giriş cihazı yapılandırmasına, klavye düzen dosyalarına ve çeşitli eşleme tablolarına göre Android olay kodlarına çevrilir.

Son olarak, InputReader , input 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 Firmware Yapılandırması

Giriş aygıtı sürücüleri, kayıtlarda parametreleri ayarlayarak ve hatta aygıt yazılımının 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 kısmının istenen doğruluğu ve tepkiyi sağlamak ve gürültüyü bastırmak için bu parametreleri ayarlamayı veya aygıt yazılımını sabitlemeyi 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 dokümantasyon, sürücü veya ürün yazılımı yapılandırmasını açıklamaya çalışır, ancak genel olarak cihaz kalibrasyonu konusunda rehberlik sağlar.

Kart Yapılandırma Özellikleri

Çekirdek kartı destek paketi (BSP), sanal tuşların dokunmatik ekrana yerleştirilmesi gibi Android InputReader 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ışı, config.xml kapak anahtarının çalışması gibi kaynak katmanları aracılığıyla yapılandırılır.

İşte birkaç örnek:

  • config_lidKeyboardAccessibility : Donanım klavyesinin erişilebilir veya gizli olup olmadığı konusunda kapak anahtarının etkisini belirtir.

  • config_lidNavigationAccessibility : config_lidNavigationAccessibility erişilebilir veya gizli olup olmadığı konusunda 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ği hakkında 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, Linux olay kodlarından tuşlar, joystick düğmeleri ve joystick eksenleri için Android olay kodlarına eşlemeyi yapılandırmak için kullanılır. Eşleştirme cihaza veya dile bağlı olabilir.

Farklı cihazların temel 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ş cihazı yapılandırma dosyaları, Android EventHub ve InputReader bileşenleri tarafından, dokunma boyutu bilgilerinin nasıl rapor edildiği 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

Bir klavyedeki herhangi bir tuşa, oyun denetleyicisindeki düğmeye, oyun çubuğu eksenine veya başka bir denetime atıfta bulunmak için genellikle 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, bazıları da aygıtın özelliklerine, aygıt sürücüsüne, mevcut yerel ayara, sistem yapılandırmasına bağlı olarak 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 özgü bir tanımlayıcıdır. Fiziksel tarama kodları genellikle bir cihazdan diğerine değişiklik gösterdiğinden, bunların HID Kullanımları veya Linux anahtar kodları gibi standart tanımlayıcılarla eşleştirilmesinden ürün 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, kumanda kolu 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ı, sistemin onlarla 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 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ında KEY_ veya BTN_ önekiyle başlayan sabitler kullanılarak BTN_ . Linux çekirdek giriş sürücüleri, fiziksel tarama kodlarını, HID kullanımlarını ve diğer cihaza özgü sinyalleri Linux anahtar kodlarına çevirmekten ve EV_KEY olaylarının bir parçası olarak EV_KEY hakkında bilgi vermekten EV_KEY .

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ı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 X ekseni boyunca bir oyun çubuğunun 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ında REL_ veya ABS_ önekiyle başlayan sabitler kullanılarak ABS_ . Linux çekirdek giriş sürücüleri, HID kullanımlarını ve diğer cihaza özgü sinyalleri Linux eksen kodlarına EV_REL ve EV_ABS EV_REL ve EV_ABS olaylarının bir parçası olarak bilgi sağlamaktan EV_ABS .

Linux Anahtar Kodu

Bir Linux anahtar kodu, kapak anahtarı gibi bir cihaz üzerindeki bir anahtarın durumunu bildirmek için standart bir tanımlayıcıdır. Linux anahtar kodları tanımlanmıştır linux/input.h önek ile başlayan sabitleri kullanılarak başlık dosyasına SW_ . Linux çekirdeği giriş sürücüleri, anahtar durumu değişikliklerini EV_SW olayları olarak EV_SW .

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'de 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 birlikte basıldığında, sistem, anahtar karakter haritasında kombinasyona bakar ve daha sonra o anda odaklanılan metin widget'ına eklenen büyük harf 'A'yı bulur.

Android Eksen Kodu

Bir Android eksen kodu, belirli bir cihaz eksenini belirtmek için Android API'de 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ına nasıl eşleneceğini belirtir. Cihaz modeli, dili, ülkesi, düzeni 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'de 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.

Mevcut meta durumu, KEYCODE_SHIFT_LEFT gibi değiştirici tuşlara ne zaman basıldığını / bırakıldığını KEYCODE_SHIFT_LEFT 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 tuşların kendilerinin nasıl eşleneceğini değiştirebilir ve bu da meta durumlarını etkiler.

Android Düğme Durumu

Bir Android düğme durumu, hangi düğmelere (fare veya ekran kaleminde) basıldığını belirtmek için Android API'de 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 kalemde) 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 ile düğme durumları arasındaki ilişki 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 güç geri bildirimi
  5. HID kullanım tabloları dahil HID bilgileri