傳感器可以通過稱為報告模式的不同方式生成事件。每種傳感器類型都有一個且只有一個與之關聯的報告模式。存在四種報告模式。
連續
事件以傳遞給batch
函數的sampling_period_ns
參數定義的恆定速率生成。使用連續報告模式的示例傳感器是加速度計和陀螺儀。
不斷變化
僅當測量值已更改時,才會生成事件。在HAL級別上激活傳感器(在其上調用activate(..., enable=1)
)也會觸發一個事件,這意味著當激活變化傳感器時,HAL必須立即返回一個事件。使用變化報告模式的示例傳感器為計步器,接近度和心率傳感器類型。
該sampling_period_ns
參數傳遞給batch
功能用於設置連續事件之間的最短時間,這意味著不應該發生的事件,直到sampling_period_ns
納秒自上次事件後所經歷,即使自那時以來,價值改變。如果該值改變,必須盡快產生一個事件sampling_period_ns
自上次事件已經過去。
例如,假設:
- 我們以
sampling_period_ns = 10 * 10^9
(10秒)激活步數計數器。 - 我們走了55秒,然後停了一分鐘。
- 在第一分鐘(包括由於傳感器激活而在時間
t=0
處,並且在t=60
秒處,包括在時間t=0
處大約每10秒生成一次事件,總共七個事件。由於t=60
秒後步數的值沒有變化,因此第二分鐘不會產生任何事件。
一槍
在檢測到事件後,傳感器會自行停用,然後通過HAL發送單個事件。為了避免比賽條件,訂購很重要。 (必須先禁用傳感器,然後才能通過HAL報告事件)。除非重新激活傳感器,否則不會發送其他事件。明顯的運動就是這種傳感器的一個例子。
單發傳感器有時稱為觸發傳感器。
該sampling_period_ns
和max_report_latency_ns
傳遞給參數batch
功能被忽略。一次性事件中的事件不能存儲在硬件FIFO中。事件一產生就必須報告。
特別
有關何時生成事件的詳細信息,請參見各個傳感器的類型說明。