Sensör yığını

Aşağıdaki şekilde Android sensör yığını gösterilmektedir. Her bileşen yalnızca doğrudan üstündeki ve altındaki bileşenlerle iletişim kurar. Ancak bazı sensörler, sensör hub'ı mevcut olduğunda bu hub'ı atlayabilir. Kontrol akışları uygulamalardan sensörlere, veri akışları ise sensörlerden uygulamalara doğru gerçekleşir.

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, Sensors SDK (Yazılım Geliştirme Kiti) API aracılığıyla sensörlere erişir. SDK, kullanılabilir sensörleri listelemek ve bir sensöre kaydolmak için işlevler içerir.

Uygulama, bir sensöre kaydolurken tercih ettiği örnekleme sıklığını ve gecikme gereksinimlerini belirtir.

  • Örneğin, bir uygulama varsayılan ivmeölçere kaydolabilir, 100 Hz'de etkinlik isteyebilir ve etkinliklerin 1 saniyelik gecikmeyle bildirilmesine izin verebilir.
  • Uygulama, ivmeölçerden en az 100 Hz hızında etkinlikler alır ve bu etkinlikler 1 saniyeye kadar gecikebilir.

SDK hakkında daha fazla bilgi için geliştirici belgelerini inceleyin.

Çerçeve

Çerçeve, çeşitli uygulamaları HAL'ye bağlamaktan sorumludur. HAL'nin kendisi tek istemcili bir sistemdir. Bu çoklu iletme işlemi çerçeve düzeyinde gerçekleşmediğinde, herhangi bir zamanda her sensöre yalnızca tek bir uygulama erişebilir.

  • Bir sensöre ilk uygulama kaydolduğunda çerçeve, sensörü etkinleştirmek için HAL'ye bir istek gönderir.
  • Aynı sensöre ek uygulamalar kaydedildiğinde çerçeve, her uygulamanın gereksinimlerini dikkate alır ve güncellenen istenen parametreleri HAL'ye gönderir.
    • Örnekleme sıklığı, istenen örnekleme sıklıklarının maksimum değeri olur. Bu nedenle, bazı uygulamalar etkinlikleri istediklerinden daha yüksek bir sıklıkta alır.
    • Maksimum raporlama gecikmesi, istenen değerlerin minimumu olacaktır. Bir uygulama, maksimum raporlama gecikmesi 0 olan bir sensör isterse bazı uygulamalar sensörü sıfır olmayan maksimum raporlama gecikmesiyle istemiş olsa bile tüm uygulamalar bu sensörden gelen etkinlikleri sürekli modda alır. Daha fazla bilgi için Toplu işleme bölümüne bakın.
  • Bir sensöre kayıtlı son uygulama sensörden kaydını sildiğinde, gereksiz güç tüketimini önlemek için çerçeveler sensörü devre dışı bırakmak üzere HAL'ye bir istek gönderir.

Çoklama işleminin etkisi

Çerçevede çoklama katmanına duyulan bu ihtiyaç, bazı tasarım kararlarını açıklar.

  • Bir uygulama belirli bir örnekleme sıklığı istediğinde, etkinliklerin daha hızlı bir şekilde gelmeyeceğine dair bir garanti yoktur. Başka bir uygulama aynı sensörü daha hızlı bir hızda isterse ilk uygulama da bu verileri hızlı hızda alır.
  • Aynı garanti eksikliği, istenen maksimum raporlama gecikmesi için de geçerlidir: Uygulamalar, istediklerinden çok daha az gecikmeyle etkinlik alabilir.
  • Örnekleme sıklığı 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 düşünün.
    • Aksi takdirde bir uygulama yüksek doğruluk modunu, diğeri ise düşük güç modunu isteyebileceğinden, Android cihazlarda bu iki moddan yalnızca biri kullanılabilir. Çerçevenin her iki uygulamayı da karşılaması mümkün olmaz. Çerçeve her zaman tüm müşterilerini memnun edebilmelidir. Bu nedenle bu seçenek kullanılamaz.
  • Uygulamalardan sensörlere veya sürücülerine veri gönderme mekanizması yoktur. Bu sayede bir uygulama, sensörlerin davranışını değiştirerek diğer uygulamaların bozulmasına neden olamaz.

Sensör birleştirme

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

Varsayılan uygulama, diğer uygulamaların erişebildiği tüm verilere erişemez ve SoC üzerinde çalışması gerektiğinden diğer uygulamalar kadar doğru veya güç açısından verimli değildir. Cihaz üreticileri, mümkün olduğunca bu varsayılan uygulamaya güvenmek yerine kendi birleştirilmiş sensörlerini (dönüş vektörü, yer çekimi ve doğrusal ivmenin yanı sıra oyun dönüş vektörü gibi daha yeni bileşik sensörler) tanımlamalıdır. Cihaz üreticileri, sensör çipi satıcılarından da uygulama sağlamalarını isteyebilir.

Varsayılan sensör füzyonu uygulaması korunmuyor ve bu uygulamaya dayanan cihazların CTS'yi geçememesine neden olabilir.

Gelişmiş seçenekler

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 Native Interface (JNI) kullanır. Bu kod, sensör donanımına erişmek için daha düşük düzeydeki yerel kodu çağırır.

Yerel çerçeve

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

Binder 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'si, donanım sürücüleri ile Android çerçevesi arasındaki arayüzdür. sensors.h adlı bir HAL arayüzü ve sensors.cpp olarak adlandırdığımız bir HAL uygulamasından oluşur.

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

Sensör HAL arayüzü hardware/libhardware/include/hardware konumundadır. Daha fazla bilgi için sensors.h dosyasına bakın.

Lansman süreci

HAL uygulaması, your_poll_device.common.version ayarını yaparak hangi HAL arayüzü sürümünü uyguladığını belirtir. Mevcut HAL arayüzü sürümleri sensors.h içinde tanımlanır ve işlevler 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 sürümü yakında artık desteklenmeyecektir. Bu belgede, tüm cihazların yükseltilmesi gereken 1.3 sürümünün davranışı açıklanmaktadır. 1.3 sürümüne nasıl yükselteceğinizle ilgili ayrıntılar için HAL sürümünün desteğinin sonlandırılması başlıklı makaleyi inceleyin.

Çekirdek sürücüsü

Sensör sürücüleri, fiziksel cihazlarla etkileşimde bulunur. Bazı durumlarda HAL uygulaması ve sürücüler aynı yazılım öğesidir. Diğer durumlarda ise donanım entegratörü, sürücüleri sağlaması için sensör çipi üreticilerinden talepte bulunur ancak HAL uygulamasını yazan taraf kendisidir.

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 sunmaz.

Sensör merkezi

Bir cihazın sensör yığını, isteğe bağlı olarak bir sensör hub'ı içerebilir. Bu hub, SoC askıya alma modundayken düşük güçte bazı düşük seviyeli hesaplamalar yapmak için kullanışlıdır. Örneğin, bu çiplerde adım sayma veya sensör füzyonu gerçekleştirilebilir. Ayrıca, sensör etkinlikleri için donanım FIFO'ları ekleyerek sensör gruplaması uygulamak için de iyi bir yerdir. Daha fazla bilgi için Toplu işleme bölümüne 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 hub'ının nasıl somutlaştırıldığı mimariye bağlıdır. Bazen ayrı bir çip, bazen de SoC ile aynı çip üzerinde bulunur. Sensör hub'ının önemli özellikleri arasında, toplu işleme için yeterli belleğe sahip olması ve düşük güç tüketen Android sensörlerinin uygulanmasını sağlamak için çok az güç tüketmesi yer alır. Bazı sensör merkezlerinde genel hesaplama için bir mikro denetleyici ve düşük güç sensörleri için çok düşük güçte hesaplama yapılmasını sağlayan donanım hızlandırıcılar bulunur.

Sensör hub'ının mimarisi ve sensörler ile SoC (I2C veri yolu, SPI veri yolu, …) ile iletişimi Android tarafından belirtilmez ancak genel güç kullanımını en aza indirmeyi amaçlamalıdır.

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

Sensörler

Bunlar, ölçümleri yapan fiziksel MEMS çipleri. Ç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 çipler genellikle 9 eksenli çipler olarak adlandırılır. Bunun nedeni, her sensörün 3 eksen üzerinden veri sağlamasıdır.)

Bu çiplerin bazılarında hareket algılama, adım algılama ve 9 eksenli sensör füzyonu gibi normal hesaplamaları yapmak için bazı mantıklar da bulunur.

CDD güç ve doğruluk şartları ile önerileri fiziksel sensörleri değil, Android sensörünü hedeflese de bu şartlar fiziksel sensörlerin seçimini etkiler. Örneğin, oyun dönüş vektöründeki doğruluk şartı, fiziksel jiroskop için gereken doğruluğu etkiler. Fiziksel sensörlerle ilgili koşulları belirlemek cihaz üreticisinin sorumluluğundadır.