在 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
_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 感測器(感測器中定義的感測器)都設定為 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
參數。