在 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
如果您不實作批次,可以透過下列方式實作 batch
:
只要使用提供的 setDelay
函式,即可直接呼叫
sampling_period_ns
參數。
實作清除函式
即使您未實作批次作業,仍須將
flush
函式。
如未實作批次功能,flush
就必須產生一個
META_DATA_FLUSH_COMPLETE
事件並傳回 0 (成功)。
變更 sensor_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 感應器 (定義為 Sensor.h),因為這個值會由架構覆寫。適用對象 非官方感應器,詳情請參閱 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
引數。