HAL 版本淘汰

在 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_nsmaxDelayminDelay

  • 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_RUNWAKE_UPON_FIFO_FULL 是 這兩個版本都已淘汰,且永遠不會傳遞至 batch 函式。
  • 批次逾時引數現在稱為 max_report_latency 引數。