Sensör yığını

Aşağıdaki şekil Android sensör yığınını temsil etmektedir. Bazı sensörler, mevcut olduğunda sensör göbeğini atlayabilse de, her bileşen yalnızca doğrudan üstündeki ve altındaki bileşenlerle iletişim kurar. Kontrol, uygulamalardan sensörlere doğru akar ve veriler sensörlerden uygulamalara doğru akar.

Android sensör yığınının katmanları ve sahipleri

Şekil 1. Android sensör yığınının katmanları ve ilgili sahipleri

SDK

Uygulamalar, Sensörler SDK (Yazılım Geliştirme Kiti) API'si aracılığıyla sensörlere erişir. SDK, mevcut sensörleri listelemek ve bir sensöre kaydolmak için işlevler içerir.

Bir sensöre kaydolurken, uygulama tercih edilen örnekleme frekansını ve gecikme gereksinimlerini belirtir.

  • Örneğin, bir uygulama varsayılan ivmeölçere kaydolabilir, olayları 100 Hz'de talep edebilir ve olayların 1 saniyelik bir gecikmeyle bildirilmesine izin verebilir.
  • Uygulama, ivmeölçerden olayları en az 100Hz hızında ve muhtemelen 1 saniyeye kadar gecikmeli olarak alacaktır.

SDK hakkında daha fazla bilgi için geliştirici belgelerine bakın.

Çerçeve

Çerçeve, çeşitli uygulamaları HAL'a bağlamaktan sorumludur. HAL'ın kendisi tek istemcidir. Çerçeve düzeyinde bu çoğullama olmadan, herhangi bir zamanda her sensöre yalnızca tek bir uygulama erişebilir.

  • İlk uygulama bir sensöre kaydolduğunda, çerçeve, sensörü etkinleştirmek için HAL'a bir istek gönderir.
  • Ek uygulamalar aynı sensöre kaydolduğunda, çerçeve her uygulamadan gelen gereksinimleri dikkate alır ve güncellenmiş istenen parametreleri HAL'a gönderir.
    • Örnekleme frekansı , talep edilen örnekleme frekanslarının maksimumu olacaktır; bu, bazı uygulamaların, talep ettiklerinden daha yüksek bir frekansta olayları alacağı anlamına gelir.
    • Maksimum raporlama gecikmesi , istenenlerin minimumu olacaktır. Bir uygulama maksimum raporlama gecikmesi 0 olan bir sensör isterse, bazıları sensörü sıfır olmayan bir maksimum raporlama gecikmesiyle talep etse bile tüm uygulamalar bu sensörden olayları sürekli modda alacaktır. Daha fazla ayrıntı için Toplu İşleme bakın.
  • Bir sensöre kaydedilen son uygulamanın kaydını sildiğinde, çerçeveler HAL'a sensörü devre dışı bırakması için bir istek gönderir, böylece güç gereksiz yere tüketilmez.

çoğullamanın etkisi

Çerçevede bir çoğullama katmanına olan bu ihtiyaç, bazı tasarım kararlarını açıklar.

  • Bir uygulama belirli bir örnekleme frekansı istediğinde, olayların daha hızlı ulaşmayacağının garantisi yoktur. Başka bir uygulama aynı sensörü daha hızlı bir oranda talep ederse, ilk uygulama da bunları hızlı bir şekilde alacaktır.
  • Aynı garanti eksikliği, talep edilen maksimum raporlama gecikmesi için de geçerlidir: Uygulamalar, talep ettiklerinden çok daha az gecikmeli olaylar alabilir.
  • Örnekleme frekansı ve maksimum raporlama gecikmesinin yanı sıra, uygulamalar sensör parametrelerini yapılandıramaz.
    • Örneğin, hem "yüksek doğruluk" hem de "düşük güç" modlarında çalışabilen fiziksel bir sensör hayal edin.
    • Bir Android cihazda bu iki moddan yalnızca biri kullanılabilir, çünkü aksi takdirde bir uygulama yüksek doğruluk modunu ve diğeri düşük güç modunu isteyebilir; çerçevenin her iki uygulamayı da karşılaması mümkün olmayacaktır. Çerçeve her zaman tüm müşterilerini tatmin edebilmelidir, bu nedenle bu bir seçenek değildir.
  • Uygulamalardan sensörlere veya sürücülerine veri gönderecek bir mekanizma yoktur. Bu, bir uygulamanın sensörlerin davranışını değiştirememesini ve diğer uygulamaları bozamamasını sağlar.

Sensör füzyonu

Android çerçevesi, bazı bileşik sensörler için varsayılan bir uygulama sağlar. Bir cihazda bir jiroskop , bir ivmeölçer ve bir manyetometre bulunduğunda, ancak rotasyon vektörü , yerçekimi ve doğrusal ivme sensörleri bulunmadığında, çerçeve bu sensörleri uygular, böylece uygulamalar bunları kullanmaya devam edebilir.

Varsayılan uygulamanın, diğer uygulamaların erişebildiği tüm verilere erişimi yoktur ve SoC üzerinde çalışması gerekir, bu nedenle diğer uygulamalar kadar doğru veya güç açısından verimli değildir. Cihaz üreticileri, bu varsayılan uygulamaya güvenmek yerine, mümkün olduğunca kendi kaynaşmış sensörlerini (rotasyon vektörü, yerçekimi ve lineer ivmenin yanı sıra oyun döndürme vektörü gibi daha yeni kompozit sensörler) tanımlamalıdır. Cihaz üreticileri ayrıca sensör çipi satıcılarından kendilerine bir uygulama sağlamalarını isteyebilir.

Varsayılan sensör birleştirme uygulaması korunmuyor ve buna bağlı cihazların CTS'de başarısız olmasına neden olabilir.

Kaputun Altında

Bu bölüm, Android Açık Kaynak Projesi (AOSP) çerçeve kodunu koruyanlar için arka plan bilgisi olarak sağlanmıştır. Donanım üreticileri için geçerli değildir.

JNI

Çerçeve, android.hardware ile ilişkili ve frameworks/base/core/jni/ dizininde bulunan bir Java Yerel Arabirimi (JNI) kullanır. Bu kod, sensör donanımına erişim elde etmek için daha düşük seviyeli yerel kodu çağırır.

Yerel çerçeve

Yerel çerçeve, frameworks/native/ içinde tanımlanır ve android.hardware paketine yerel bir eşdeğer sağlar. Yerel çerçeve, sensöre özel hizmetlere erişim elde etmek için Binder IPC proxy'lerini çağırır.

bağlayıcı IPC

Binder IPC proxy'leri, süreç sınırları üzerinden iletişimi kolaylaştırır.

HAL

Sensörler Donanım Soyutlama Katmanı (HAL) API, donanım sürücüleri ile Android çerçevesi arasındaki arabirimdir. Bir HAL arabirimi sensor.h ve bizim sensor.cpp olarak adlandırdığımız bir HAL uygulamasından oluşur.

Arayüz, Android ve AOSP katılımcıları tarafından tanımlanır ve uygulama, cihazın üreticisi tarafından sağlanır.

Sensör HAL arabirimi, hardware/libhardware/include/hardware . Ek ayrıntılar için sensor.h'ye bakın.

Serbest bırakma döngüsü

HAL uygulaması, your_poll_device.common.version ayarını yaparak HAL arabiriminin hangi sürümünü uyguladığını belirtir. Mevcut HAL arabirimi sürümleri, sensor.h içinde tanımlanır ve işlevsellik bu sürümlere bağlıdır.

Android çerçevesi şu anda 1.0 ve 1.3 sürümlerini desteklemektedir, ancak 1.0 yakında artık desteklenmeyecektir. Bu belge, tüm cihazların yükseltmesi gereken 1.3 sürümünün davranışını açıklar. 1.3'e nasıl yükseltileceğiyle ilgili ayrıntılar için HAL sürümünün kullanımdan kaldırılması konusuna bakın.

çekirdek sürücüsü

Sensör sürücüleri, fiziksel cihazlarla etkileşime girer. Bazı durumlarda, HAL uygulaması ve sürücüler aynı yazılım varlığıdır. Diğer durumlarda, donanım entegratörü sensör çipi üreticilerinden sürücüleri sağlamalarını ister, ancak HAL uygulamasını yazanlar onlar olur.

Her durumda, HAL uygulaması ve çekirdek sürücüleri, donanım üreticilerinin sorumluluğundadır ve Android, bunları yazmak için tercih edilen yaklaşımları sağlamaz.

Sensör göbeği

Bir cihazın sensör yığını, isteğe bağlı olarak, SoC askıya alma modundayken düşük güçte bazı düşük seviyeli hesaplamalar yapmak için kullanışlı bir sensör merkezi içerebilir. Örneğin, bu çipler üzerinde adım sayma veya sensör füzyonu yapılabilir. Ayrıca, sensör olayları için donanım FIFO'ları ekleyerek, sensör gruplandırmayı uygulamak için iyi bir yerdir. Daha fazla bilgi için bkz.

Not: Yeni sensörler veya LED'ler kullanan yeni ContextHub özellikleri geliştirmek için Hikey veya Hikey960 geliştirme kartına bağlı bir Neonkey SensorHub da kullanabilirsiniz.

Sensör hub'ının nasıl gerçekleştirileceği mimariye bağlıdır. Bazen ayrı bir çiptir ve bazen SoC ile aynı çipte bulunur. Sensör hub'ının önemli özellikleri, gruplama için yeterli bellek içermesi ve düşük güçlü Android sensörlerinin uygulanmasını sağlamak için çok az güç tüketmesidir. Bazı sensör hub'ları, genel hesaplama için bir mikro denetleyici ve düşük güçlü sensörler için çok düşük güç hesaplamasını sağlamak için donanım hızlandırıcıları içerir.

Sensör hub'ının nasıl yapılandırıldığı ve sensörler ve SoC (I2C veri yolu, SPI veri yolu,…) ile nasıl iletişim kurduğu Android tarafından belirtilmemiştir, ancak genel güç kullanımını en aza indirmeyi hedeflemelidir.

Uygulama basitliği üzerinde önemli bir etkiye sahip gibi görünen bir seçenek, sensör hub'ından SoC'ye giden iki kesme hattına sahip olmaktır: biri uyandırma kesintileri (uyandırma sensörleri için) ve diğeri uyandırma dışı kesmeler için (uyanmayan sensörler için).

Sensörler

Bunlar, ölçümleri yapan fiziksel MEM çipleridir. Çoğu durumda, aynı çip üzerinde birkaç fiziksel sensör bulunur. Örneğin, bazı çipler bir ivmeölçer, bir jiroskop ve bir manyetometre içerir. (Bu tür yongalara genellikle 9 eksenli yongalar denir, çünkü her sensör 3 eksen üzerinden veri sağlar.)

Bu çiplerden bazıları, hareket algılama, adım algılama ve 9 eksenli sensör füzyonu gibi olağan hesaplamaları gerçekleştirmek için bir miktar mantık da içerir.

CDD güç ve doğruluk gereksinimleri ve önerileri, fiziksel sensörleri değil Android sensörünü hedeflese de, bu gereksinimler fiziksel sensör seçimini etkiler. Örneğin, oyun döndürme vektöründeki doğruluk gereksiniminin, fiziksel jiroskop için gerekli doğruluk üzerinde etkileri vardır. Fiziksel sensörler için gereksinimleri türetmek cihaz üreticisine kalmıştır.