Sensör yığını

Aşağıdaki şekil Android sensör yığınını temsil etmektedir. Her bileşen yalnızca doğrudan üstündeki ve altındaki bileşenlerle iletişim kurar, ancak bazı sensörler mevcut olduğunda sensör merkezini atlayabilir. Kontrol uygulamalardan sensörlere, veriler ise 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'sı

Uygulamalar sensörlere Sensors SDK (Yazılım Geliştirme Kiti) API aracılığıyla 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 kayıt olabilir, olayları 100 Hz'de isteyebilir ve olayların 1 saniyelik gecikmeyle raporlanmasına 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 gerçekleşmeden, herhangi bir zamanda her sensöre yalnızca tek bir uygulama erişebilir.

  • Bir ilk uygulama bir sensöre kaydolduğunda çerçeve, sensörün etkinleştirilmesi için HAL'ye bir istek gönderir.
  • Ek uygulamalar aynı sensöre kaydolduğunda, çerçeve her uygulamanın gereksinimlerini dikkate alır ve güncellenen talep edilen parametreleri HAL'e gönderir.
    • Örnekleme frekansı, talep edilen örnekleme frekanslarının maksimumu olacaktır; bu, bazı uygulamaların, olayları talep ettiklerinden daha yüksek bir frekansta alacağı anlamına gelir.
    • Maksimum raporlama gecikmesi, talep edilenlerin minimumu olacaktır. Bir uygulama maksimum raporlama gecikmesi 0 olan bir sensör talep ederse, bazıları sensörü sıfırdan farklı bir maksimum raporlama gecikmesiyle talep etse bile tüm uygulamalar bu sensörden gelen olayları sürekli modda alacaktır. Daha fazla ayrıntı için Toplu İşleme'ye bakın.
  • Bir sensöre kayıtlı son uygulamanın kaydı silindiğinde, çerçeveler, gücün gereksiz yere tüketilmemesi için sensörü devre dışı bırakması için HAL'e bir istek gönderir.

Çoğullamanın etkisi

Çerçevedeki çoğullayıcı katmana olan bu ihtiyaç, bazı tasarım kararlarını açıklamaktadır.

  • Bir uygulama belirli bir örnekleme frekansı talep ettiğinde olayların daha hızlı ulaşmayacağının garantisi yoktur. Başka bir uygulama aynı sensörü daha hızlı bir şekilde talep ederse, ilk uygulama da bunları daha hızlı bir şekilde alacaktır.
  • Aynı garanti eksikliği, istenen maksimum raporlama gecikmesi için de geçerlidir: uygulamalar, olayları talep ettiklerinden çok daha az gecikmeyle 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 cihazında bu iki moddan yalnızca biri kullanılabilir, çünkü aksi takdirde bir uygulama yüksek doğruluk modunu, diğeri ise düşük güç modunu talep edebilir; çerçevenin her iki uygulamayı da karşılamasının hiçbir yolu olmayacaktır. Çerçeve her zaman tüm müşterilerini memnun edebilmelidir, dolayısıyla 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ı kompozit sensörler için varsayılan bir uygulama sağlar. Bir cihazda jiroskop , ivmeölçer ve manyetometre mevcut olduğunda ancak dönme vektörü , yerçekimi ve doğrusal ivme sensörleri bulunmadığında, çerçeve bu sensörleri uygulayarak uygulamaların bunları kullanmaya devam etmesini sağlar.

Varsayılan uygulamanın, diğer uygulamaların erişebildiği tüm verilere erişimi yoktur ve SoC üzerinde çalışması gerekir, dolayısıyla 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 birleştirilmiş sensörlerini (dönme vektörü, yerçekimi ve doğrusal 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ı talep edebilir.

Varsayılan sensör birleştirme uygulaması sürdürülmüyor 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 kullananlar 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 Arayüzü (JNI) kullanır. Bu kod, sensör donanımına erişim sağlamak için alt düzey yerel kodu çağırır.

Yerel çerçeve

Yerel çerçeve, frameworks/native/ dosyasında tanımlanır ve android.hardware paketine yerel bir eşdeğer sağlar. Yerel çerçeve, sensöre özgü 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

Sensors Hardware Abstraction Layer (HAL) API'si, donanım sürücüleri ile Android çerçevesi arasındaki arayüzdür. Bir adet HAL arayüz sensörü.h ve sensörler.cpp olarak adlandırdığımız bir adet HAL uygulamasından oluşur.

Arayüz, Android ve AOSP'ye katkıda bulunanlar tarafından tanımlanır ve uygulama, cihazın üreticisi tarafından sağlanır.

Sensör HAL arayüzü hardware/libhardware/include/hardware konumunda bulunur. Ek ayrıntılar için sensörler.h'ye bakın.

Yayın döngüsü

HAL uygulaması, your_poll_device.common.version ayarını yaparak HAL arayüzünün hangi sürümünü uyguladığını belirtir. Mevcut HAL arayüzü sürümleri, sensörler.h'de 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ükseltilmesi gereken 1.3 sürümünün davranışını açıklamaktadır. 1.3'e nasıl yükseltileceğine ilişkin ayrıntılar için bkz. HAL sürümünün kullanımdan kaldırılması .

Ç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ı talep eder, ancak HAL uygulamasını yazanlar onlardır.

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

Sensör merkezi

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 gerçekleştirmek için yararlı olan bir sensör hub'ı içerebilir. Örneğin bu çipler üzerinde adım sayma veya sensör füzyonu gerçekleştirilebiliyor. Ayrıca sensör olayları için donanım FIFO'ları ekleyerek sensör toplulaştırmayı uygulamak için de iyi bir yerdir. Daha fazla bilgi için Toplu İşleme konusuna bakın.

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 merkezinin nasıl gerçekleştirileceği mimariye bağlıdır. Bazen ayrı bir çiptir, bazen de SoC ile aynı çipte yer alır. Sensör hub'ının önemli özellikleri, toplu işlem için yeterli belleğe sahip olması 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üçte hesaplamayı mümkün kılan donanım hızlandırıcıları içerir.

Sensör merkezinin nasıl mimariye sahip olduğu 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 seçeneklerden biri, sensör merkezinden SoC'ye giden iki kesme hattının olmasıdır: biri uyanma kesintileri için (uyanma sensörleri için), diğeri ise uyanma olmayan kesintiler için (uyanmayan sensörler için).

Sensörler

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

Bu çiplerin bazıları aynı zamanda hareket algılama, adım algılama ve 9 eksenli sensör füzyonu gibi olağan hesaplamaları gerçekleştirmek için bazı mantıklar da içeriyor.

Her ne kadar 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 gereken doğruluk üzerinde etkileri vardır. Fiziksel sensörlerin gerekliliklerini belirlemek cihaz üreticisine kalmıştır.