Porting Sensors on Android

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

I2C為例,SoC上可能會有多個Sensors,如下圖所示:
Porting流程大致上有幾個步驟:
  1. Sensor Linux驅動程式。
  2. 使用I2C tools測試。
  3. 對應的HAL程式(*.cpp)
  4. 測試SensorAPK

本文要說明的是HAL成部分,而且大部分的廠商都會有linux的驅動程式,若需要從頭coding時,記得閱讀SensorDatasheet,另外可參考此投影片:Raspberry Pi Linux I2C Driver

除了I2C tools外,也可用geteventdumpsys來檢查Sensor Driver的功能。
getevent

dumpsys

SENSORS 函式庫介面定義在hardware/libhardware/include/hardware/sensors.h裡,所產生出來的*.so須以sensors.<product_name>.so方式命名

HAL中新增SENSOR流程
1. 驅動程式需正常運作。
2. 到hardware/<product_name>/libsensors資料夾,會看到類似下圖的檔案。



3. 找到sensors.cpp檔,並在此檔案內容裡的sSensorList 結構中增加Sensor的定義,此結構的內容含有:名稱、廠商、版本、類型(LightGyro等…)等。



4. 修改enum增加識別用的ID




5. 增加handleToDriver 函式裡的case



6. 更新sensors_poll_context_t結構:



7. 實作此Sensor的類別,增加YourSensor.h與YourSensor.cpp程式碼。




測試SENSOR
使用現有的工具(nusensors)
hardware/libhardware/tests/nusensors資料夾下有程式碼。

APK測試程式:AndroSensor

使用SensorManager類別自己開發:

沒有留言: