感測器可以以不同的方式產生事件,稱為報告模式;每種感測器類型都有一種且僅有一種與其關聯的報告模式。存在四種報告模式。
連續的
事件以恆定速率生成,此恆定速率由傳遞給batch
函數的sampling_period_ns
參數定義。使用連續報告模式的感測器範例是加速度計和陀螺儀。
變化時
僅當測量值發生變化時才會產生事件。在 HAL 層級啟動感測器(對其呼叫activate(..., enable=1)
)也會觸發事件,這表示當啟動變更感測器時,HAL 必須立即返回事件。使用變化報告模式的範例感測器有計步器、接近度感測器和心率感測器類型。
傳遞給批次函數的batch
sampling_period_ns
參數用於設定連續事件之間的最短時間,這表示在自上次事件以來經過sampling_period_ns
奈秒之前不應產生事件,即使此後值發生了變化。如果該值發生更改,則必須在自上次事件以來經過sampling_period_ns
後立即產生事件。
例如,假設:
- 我們使用
sampling_period_ns = 10 * 10^9
(10 秒)來啟動計步器。 - 我們步行 55 秒,然後靜止一分鐘。
- 在第一分鐘內,事件大約每 10 秒產生一次(包括由於感測器啟動而導致的時間
t=0
,以及t=60
秒),總共有 7 個事件。第二分鐘沒有事件生成,因為步數的值在t=60
秒後沒有變化。
一擊
偵測到事件後,感測器會自行停用,然後透過 HAL 發送單一事件。順序很重要,可以避免競爭條件。 (在透過 HAL 報告事件之前必須停用感測器)。在感測器重新啟動之前不會發送其他事件。明顯的運動就是這種感測器的例子。
一次性感測器有時稱為觸發感測器。
傳遞給batch
函數的sampling_period_ns
和max_report_latency_ns
參數將被忽略。來自一次性事件的事件無法儲存在硬體 FIFO 中;事件一產生就必須立即報告。
特別的
有關事件產生時間的詳細信息,請參閱各個感測器類型的說明。