iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 20
0
  • Guide:
    • 介紹 (Overview)
    • 架構 (Architecture)
    • 應用 (Application)
    • 服務 (Service)
    • 硬件抽象層 (HAL)

架構

https://ithelp.ithome.com.tw/upload/images/20191009/20120515xNC9Hk3tJG.png

大致流程:APP —> Framework —> lib —> HAL
HAL 層以下部分,不同平台實現方式不同,
可能會是 HAL —> Kernel 也可能是 HAL —> Vendor —> Kernel,
有些平台 HAL 層之後直接對接 Kernel 的 input 子系統,這個相對簡單;
有些是 HAL —> QMI —> SSC,這我沒碰過。
這裡不對這些做說明,
只關注 AOSP HAL 層以上的部分。

傳感器

Android 傳感器框架中包括物理傳感器虛擬傳感器兩大類:

  • 物理傳感器
    表示物理特性和狀態的傳感器包括加速度計、陀螺儀、指南針、溫度計、氣壓計、光傳感器、心率計等等
  • 虛擬傳感器
    旋轉矢量、重力方向、線性加速度等,
    這些傳感器的數據是依據物理傳感器的數據,
    經過融合算法後計算得出的。
    (有些計步器是根據加速度計計算獲得的,這種計步器也算是虛擬傳感器)

這兩類傳感器單次數據量比較小,目前種類共有30多種。
(在 hardware/libhardware/include/hardwaresensors.h 可以查閱),
市場中還存在一些其它傳感器,
如相機中的傳感器、指紋傳感器、觸摸傳感器。
因功能複雜且特殊被放在單獨模塊中處理,
並不包含在傳感器框架中,
物理傳感器和虛擬傳感器對於應用程序來說沒什麼區別,
AOSP 部分已將這部分做了一致處理。

上報方式

不同的傳感器的上報方式不同,
根據實際情況進行設定,目前支持有四種上報方式:

  • 連續模式
    傳感器持續不斷的上報數據,這種上報方式適用於加速度計、陀螺儀這樣的傳感器,
    使用它們時往往需要實時 (200HZ~1KHZ) 連續的上報。
  • 變化模式
    當傳感器數據經過一段時間發生變化後才上報,常見的是心率計和計步器。
  • 單次模式
    當傳感器檢測到某種事件時觸發,例如紅外傳感器在檢測到人靠近時觸發上報。
  • 特定上報模式
    用於支持特定需求的上報,較少使用。

喚醒傳感器和喚醒傳感器

所謂的喚醒是指是否能夠喚醒SOC處理器來處理事件,
當 SOC 處於睡眠狀態時,
喚醒傳感器可以將 SOC 喚醒處理必要的事件。
另外同一個傳感器可以同時被定義為喚醒傳感器和非喚醒傳感器,
兩者相對獨立。

融合算法

Android 平台可以依賴原始的9軸數據(加速度計、陀螺儀、指南針),
融合出旋轉矢量、重力和線性加速度這些虛擬傳感器給應用程序使用。
簡單講其實就是把多個單一傳感器,
透過演算法合體成一個,蠻酷的對吧!
其實看過程式碼原理蠻簡單的,
但沒什麼興趣深追,只要可以用就好。(笑)
目前介紹就先這樣,
下一篇就正式來追程式碼囉!


上一篇
[Day-24] Android Pie Sensor (1) 介紹
下一篇
[Day-26] Android Pie Sensor (3) 應用
系列文
Android Pie 底層開發學習心得30

尚未有邦友留言

立即登入留言