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, mevcut olduğunda sensör hub'ını atlayabilir. Kontrol akışları uygulamalar sensörlere ve sensörlerden izin verir.

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, mevcut sensörleri listelemek ve görebilirsiniz.

Uygulama, bir sensöre kaydolurken tercih ettiği örneklemeyi belirtir ve gecikme gerekliliklerini karşılamanız gerekir.

  • Örneğin, bir uygulama varsayılan ivme ölçere kaydedilerek ve etkinliklerin 1 saniye ile bildirilmesine izin vermek
  • Uygulama, ivme ölçerden şu hızda etkinlikler alır: muhtemelen 1 saniye gecikmeli olacaktır.

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

Çerçeve

Çerçeve, çeşitli uygulamaların HAL'ye bağlanmasından sorumludur. HAL'nin kendisi tek istemcidir. Bu çoğullama, çerçeve düzeyinde, yalnızca tek bir uygulama herhangi bir zamanda her bir sensöre erişebilir yardımcı olabilir.

  • İlk uygulama bir sensöre kaydolduğunda çerçeve bir istek gönderir HAL'ye bağlayın.
  • Başka uygulamalar aynı sensöre kaydolduğunda çerçeve, ayrı ayrı değerlendirerek, her uygulamanın dikkate aldığı parametrelerini HAL'ye ekler.
    • Örnekleme sıklığı, istenen örnekleme frekanslarının maksimum değeri olacaktır. Dolayısıyla, daha yüksek bir sıklıkta etkinlik alır, istendi.
    • Maksimum raporlama gecikmesi, istenen gecikme sürelerinin minimumu olacaktır. Bir uygulama sensörün maksimum raporlama gecikmesinin 0 olduğu durumlarda tüm uygulamalar bazıları sensörü istese bile sürekli modda bu sensörden gelen etkinlikler maksimum raporlama gecikmesi için dönüşüm değerini artırır. Daha fazla ayrıntı için Gruplandırma konusuna bakın.
  • Bir sensöre kaydedilen son uygulama bu sensördeki kaydı iptal ettiğinde çerçeveler, HAL'ye sensörü devre dışı bırakma isteği gönderir. Böylece güç tükettiğini düşünelim.

Multiplex'in etkisi

Çerçeve içinde çoğullama katmanına olan bu ihtiyaç, bazı tasarımların toplamıdır.

  • Bir uygulama belirli bir örnekleme sıklığı istediğinde etkinliklerin daha hızlı gerçekleşmeyeceğini garanti edebilir. Başka bir uygulama daha yüksek bir hızda istekte bulunduğunda, ilk uygulama aynı zamanda çok daha hızlı bir şekilde alabilir.
  • İstenen maksimum raporlama gecikmesi için de aynı garanti eksikliği geçerlidir: uygulamalar, istenenden çok daha az gecikmeyle etkinlik alabilir.
  • Uygulamalar, örnekleme sıklığı ve maksimum raporlama gecikmesi dışında, Sensör parametrelerini yapılandırın.
    • Örneğin, her ikisi de yüksek kalitede çalışabilen fiziksel bir sensör ve "düşük güç" modlarında kullanılabilir.
    • Android cihazlarda bu iki moddan yalnızca biri kullanılabilir. Bunun nedeni: Aksi takdirde, bir uygulama yüksek doğruluk modunu hedeflerken başka bir mod isteyebilir düşük güç modu; çerçeve, bu iki tarafın da faydasını izin verir. Çerçeve, her zaman tüm müşterilerini memnun edebilmelidir. Böyle bir seçenek yoktur.
  • Uygulamalardan sensörlere veri gönderen veya şoförlerine güveniyorlar. Bu, bir uygulamanın uygulamaları bozar.

Sensör füzyonu

Android çerçevesi, bazı bileşenler için varsayılan uygulama olabilir. Bir cihazda jiroskop, ivme ölçer ve manyetometre varsa ancak dönme vektörü, yer çekimi ve doğrusal ivme sensörleri yoksa çerçeve, bu sensörleri uygulayarak uygulamaların kullanmaya devam edebilirsiniz.

Varsayılan uygulamanın, Google'dan diğer kullanıcılara SoC'de çalışması gerekir ve bu nedenle kadar güç tasarrufu da sağlayabilir. En az mümkün olduğunda, cihaz üreticileri kendi kaynaşmış sensörleri (döndürme) gibi yeni kompozit sensörlerin yanı sıra vektör, yer çekimi ve doğrusal ivme oyun döndürme vektörü) kullanın. Cihaz üreticileri şunları yapabilir: sensör çipi tedarikçilerinden de uygulama sağlamalarını isteyebilir.

Varsayılan sensör füzyonu uygulama yönetilmiyor ve bu sinyalden yararlanan cihazların CTS'de başarısız olmasına neden olabilir.

Gelişmiş seçenekler

Bu bölüm, söz konusu teşviği sürdürenler için arka plan bilgisi olarak Android Açık Kaynak Projesi (AOSP) çerçeve kodu. Alakalı değil donanım üreticileridir.

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, daha düşük düzeyde yerel kod kullanmanız gerekir.

Yerel çerçeve

Yerel çerçeve, frameworks/native/ içinde tanımlanır ve yerel android.hardware paketine eşdeğerdir. Yerel çerçeve, Bağlayıcı IPC proxy'lerini çağırarak ve sensörlere özgü hizmetler.

Bağlayıcı IPC'si

Bağlayıcı IPC proxy'leri, işlem sınırları üzerinden iletişimi kolaylaştırır.

HAL

Sensors Donanım Soyutlama Katmanı (HAL) API, Google Etiket Yöneticisi ile donanım sürücüleri ve Android çerçevesi. Bir HAL arayüzünden oluşur Sensörler.h ve bir HAL uygulaması da dahil olmak üzere sensör.cpp olarak adlandırdığımız bir uygulama.

Arayüz, Android ve AOSP'ye katkıda bulunanlar tarafından tanımlanmıştır ve cihazın üreticisi tarafından sağlandığından emin olun.

Sensör HAL arayüzü hardware/libhardware/include/hardware konumunda bulunur. sensors.h sayfasına bakın. başlıklı bölüme bakın.

Sürüm döngüsü

HAL uygulaması, HAL arayüzünün hangi sürümünde your_poll_device.common.version ayarlayarak uygular. Mevcut HAL arayüz sürümleri sensörler.h ile tanımlanır ve işlevler, sürümleri vardır.

Android çerçevesi şu anda 1.0 ve 1.3 sürümlerini desteklemektedir, ancak 1.0 yakında desteklenmeyecek. Bu dokümanlarda, sürümün 1.3 (tüm cihazların yeni sürüme geçmesi gerekir). Google Cloud'a geçişle ilgili 1.3 için HAL sürümünün kullanımdan kaldırılması bölümünü inceleyin.

Çekirdek sürücüsü

Sensör sürücüleri, fiziksel cihazlarla etkileşime girer. Bazı durumlarda, HAL sürücüler aynı yazılım varlığıdır. Başka durumlarda, donanım entegratörü, sensör çipi üreticilerinden ancak HAL uygulamasını yazanlardır.

Her durumda, HAL uygulaması ve çekirdek sürücülerinin sorumluluğu Android, donanım üreticisiyle ilgili tercih edilen yaklaşımları, yazmak zorunda değilsiniz.

Sensör merkezi

Bir cihazın sensör yığınında isteğe bağlı olarak bir sensör göbeği bulunabilir. Bu işlemin SoC'yi kullanarak düşük güçte düşük seviyeli hesaplamalar yapabilirsiniz. askıya alma modu. Örneğin, adım sayımı veya sensör füzyonu, bu yongaları deneyin. Ayrıca tek bir yerden sensörleri toplu olarak işlemek, donanım FIFO'larını kullanır. Daha fazla bilgi için Gruplandırma konusuna bakın.

Not: Google'ın açık kaynak ortamlarında (ör. yeni sensörler veya LED'ler kullanıyorsanız, Neonkey SensorHub bir Hikey veya Hikey960 geliştirme kartı.

Sensör hub'ının nasıl oluşacağı mimariye bağlıdır. Bazen ayrı bir çip üzerinde yer alır ve bazen SoC ile aynı çipe eklenir. Önemli özellikleri, yeterli bellek içermesi ve düşük kalitedeki bileşenlerin uygulanmasını sağlamak için çok az güç tüketir. Android sensörlerine güç katar. Bazı sensör göbeklerinde genel sensörler için bir mikrodenetleyici bulunur. için çok düşük güçli hesaplama olanağı sağlayan donanım hızlandırıcıları sensörleri kullanabilirsiniz.

Sensör hub'ının mimarisi ve sensörlerle nasıl iletişim kurduğu SoC (I2C veri yolu, SPI veri yolu, ...) Android tarafından belirtilmese de toplam güç kullanımını en aza indirmenize yardımcı olur.

Uygulama üzerinde önemli etkisi olduğu görülen bir seçenek sensör merkezinden Çip üzerinde sisteme (SoC) giden iki kesme çizgisi vardır: biri uyandırma sensörleri için, diğeri de uyandırmayan kesintiler için. kesmeleri (uyanmayan sensörler için).

Sensörler

Bunlar, ölçümleri yapan fiziksel MEM çipleridir. Birçok durumda aynı çipte birkaç fiziksel sensör bulunmalıdır. Örneğin, bazı cipsler ivme ölçer, jiroskop ve manyetometre bulunuyor. (Bu tür yongalar genellikle her sensör 3 eksende veri sağladığından 9 eksenli çipler olarak adlandırılır.)

Bu yongaların bazıları normal hesaplamaları yapmak için bir mantık içerir. hareket algılama, adım algılama ve 9 eksenli sensör füzyonu gibi özellikler içerir.

CDD’nin güç ve doğrulukla ilgili şart ve önerileri, fiziksel sensörleri değil Android sensörünü etkiler. Bu gereksinimler, sensörler için de geçerlidir. Örneğin, oyunda doğrulukla ilgili dönme vektörü, fiziksel değişim için gerekli doğruluk üzerinde jiroskop. Google tarafından sağlananlarla ilgili gereksinimleri fiziksel sensörler.