傳感器可以以不同的方式生成事件,稱為報告模式;每種傳感器類型都有一種且只有一種與之關聯的報告模式。存在四種報告模式。
連續
事件以傳遞給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 中;事件一產生就必須報告。
特別的
有關何時生成事件的詳細信息,請參閱各個傳感器類型說明。