簡體   English   中英

Android IIO傳感器

[英]Android IIO sensors

如何在Android Nougat上捕獲應用程序級別和本機級別中的iio_events傳感器生成的iio_events (例如,通過adb shell或通過現有的守護進程)? (例如環境光傳感器的in_intensity_falling_threshold事件)

我嘗試了經典方式:SensorManager Listener(我為自己編寫了一個測試應用程序,但還嘗試了來自應用商店的多個sensortest應用程序)。

但是,看來iio傳感器不會觸發任何事件(盡管我可以從sysfs中讀取變化的數據)。

iio設備還會創建與Android中輸入設備相同類型的事件嗎?是否可以通過getevent命令查看事件? (如果需要,我可以提供更具體的系統/傳感器信息。)

讓我分享我所學到的經驗:

關於如何捕獲iio事件的簡短答案是,它取決於傳感器的內核驅動程序和Android上的Sensor-HAL。

首先,一個iio事件是由基於硬件的中斷驅動的; 當連接到板並被板識別的傳感器上的中斷引腳在例如有新數據時向板發送信號。

其次,傳感器管理器/服務不直接與驅動程序通信。 它所偵聽的是Sensor-HAL。 Sensor-HAL會為Sensor Service生成事件,而不是直接為驅動程序self生成事件,這意味着SensorHAL應該從sysfs(由驅動程序創建的文件接口)讀取數據,並將該數據返回給Sensor Service調用(請參見poll(),sensor_event https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/sensors.h中的結構)

最后,catchevent僅適用於由定義為中斷設備(如觸摸屏)的設備生成的“中斷事件”。Interrupt,iio和hwmon是Linux內核中基於設備sw的結構的不同類型。

結論 :如果您有一個新傳感器,並且想在Android中捕獲/讀取數據,則應該

1。 查找/編寫具有合適設備型號(輸入,iio,hwmon等)的驅動程序

2。 使板識別設備(通過將信息添加到設備樹或板配置文件中)

3。 查找/編寫合適的Sensor-HAL或將傳感器添加到現有的HAL中。

僅在執行此步驟之后,應用程序才能通過SensorListener到達傳感器數據。

如何從本機級別捕獲/測試事件捕獲:找不到捕獲事件的直接方法。 獲取傳感器數據的常規方法(在添加適當的驅動程序並使開發板識別設備之后)是使用sysfs接口。

例如,從android設備外殼(以root用戶身份):

#sys/bus/iio/devices/iio:device0/ls
in_accel_x_raw   in_accel_y_raw   in_accel_z_raw   in_accel_scale ....
#cat in_accel_x_raw 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM