在 Android L 版本中,我們將停止支援部分感應器 HAL 版本。僅支援 SENSORS_DEVICE_API_VERSION_1_0
和 SENSORS_DEVICE_API_VERSION_1_3
。
在下一個版本中,我們可能也會停止支援 1_0。
1_0 沒有批次處理的概念。如有可能,所有使用 1_0 的裝置都應升級至 1_3。
1_1 和 1_2 的批次處理概念定義不佳,因此已不再支援
目前使用 1_1 或 1_2 的所有裝置都必須升級至 1_3。
在 1_3 中,我們簡化了批次處理的概念,並引入喚醒感應器的功能。
如要升級至 1_3,請按照下列變更進行操作。
實作批次函式
即使您未實作批次處理 (硬體沒有 FIFO),也必須實作 batch
函式。batch
可用於設定特定感應器的取樣週期和回報延遲時間上限。會取代 setDelay
。setDelay
將不會再呼叫。
如果您未實作批次處理功能,只要使用提供的 sampling_period_ns
參數呼叫現有的 setDelay
函式,即可實作 batch
。
實作刷新函式
即使您未實作批次處理,也必須實作 flush
函式。
如果您未實作批次處理,flush
必須產生一個 META_DATA_FLUSH_COMPLETE
事件,並傳回 0 (成功)。
變更 sensors_poll_device_t.common.version
your_poll_device.common.version = SENSORS_DEVICE_API_VERSION_1_3
將新欄位新增至感應器定義
定義每個感應器時,除了一般 sensor_t 欄位外:
.name = "My magnetic field Sensor", .vendor = "My company", .version = 1, .handle = mag_handle, .type = SENSOR_TYPE_MAGNETIC_FIELD, .maxRange = 200.0f, .resolution = CONVERT_M, .power = 5.0f, .minDelay = 16667,
您也必須設定新欄位,定義在 1_0 和 1_3 之間:
.fifoReservedEventCount = 0, .fifoMaxEventCount = 0, .stringType = 0, .requiredPermission = 0, .maxDelay = 200000 .flags = SENSOR_FLAG_CONTINUOUS_MODE,
fifoReservedEventCount:如果未實作批次處理,請將此值設為 0。
fifoMaxEventCount:如果未實作批次處理,請將這個值設為 0
stringType:將所有官方 Android 感應器 (在 sensors.h 中定義) 設為 0,因為這個值會遭到架構覆寫。如要瞭解如何設定非官方感應器,請參閱 sensor_t 相關說明。
requiredPermission:這是應用程式必須具備的權限,才能存取感應器。通常您可以將所有感應器的這項值設為 0,但類型為 HEART_RATE
的感應器必須將這項值設為 SENSOR_PERMISSION_BODY_SENSORS.
maxDelay:這個值很重要,您必須根據感應器和其驅動程式的功能設定這個值。
這個值只適用於連續和變動感應器。這是兩個感應器事件之間的延遲時間,對應於此感應器支援的最低頻率。如果透過 batch
函式要求較低的頻率,系統會改為以此頻率產生事件。架構或應用程式可使用此值,估算批次 FIFO 何時可能會滿載。如果未正確設定這個值,CTS 就會失敗。針對一次性和特殊回報模式感應器,請將 maxDelay
設為 0。
如果是連續感應器,請將其設為允許的最大取樣週期 (以微秒為單位)。
以下適用於 period_ns
、maxDelay
和 minDelay
:
period_ns
以奈秒為單位,maxDelay
/minDelay
則以微秒為單位。maxDelay
應一律符合 32 位元帶正負號整數的範圍。只有出於二進位相容性考量,才會在 64 位元架構上宣告為 64 位元。
flags:這個欄位會定義感應器的回報模式,以及感應器是否為喚醒感應器。
如果您未實作批次處理,且只是從 1.0 改為 1.3,請將此值設為:
SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ONE_SHOT_MODE
(適用於一次性感應器)
SENSOR_FLAG_CONTINUOUS_MODE
適用於連續感應器 SENSOR_FLAG_ON_CHANGE_MODE
適用於變更時感應器 (鄰近感應器除外) SENSOR_FLAG_SPECIAL_REPORTING_MODE
適用於特殊回報模式的感應器 (傾斜偵測器除外)。
SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ON_CHANGE_MODE
適用於鄰近感應器和 Android 官方傾斜偵測器感應器。
從 1_1 或 1_2 升級時的注意事項
-
batch
函式現在幾乎一律成功,即使是對於不支援批次處理的感應器,也不受逾時引數值影響。batch
函式可能失敗的情況只有內部錯誤,或是sensor_handle,
錯誤、負值sampling_period_ns
或負值max_report_latency_ns
。 - 感應器是否支援批次處理,取決於
fifoMaxEventCount
是否大於 0。(在先前版本中,此值是根據batch()
的傳回值計算)。 - 支援批次處理的各項感應器一向處於我們在先前版本中稱為「批次模式」的狀態:即使
max_report_latency_ns
參數為 0,感應器仍必須進行批次處理,也就是說,當 SoC 進入暫停模式時,事件必須儲存在 FIFO 中。 -
batch
函式的flags
參數已不再使用。DRY_RUN
和WAKE_UPON_FIFO_FULL
已淘汰,且永遠不會傳遞至batch
函式。 - 批次逾時引數現在稱為
max_report_latency
引數。