• <li id="tllf8"><meter id="tllf8"><th id="tllf8"></th></meter></li>
        1. 手機
          手機 手機資訊 手機應用資訊 手機軟件教程 安卓apk到g-sensor driver的大致流程
          安卓
          06月 05

          安卓apk到g-sensor driver的大致流程

          編輯:匿名 來源:互聯網
          放大 縮小 打印 郵件 收藏本頁 游吧論壇

          Android上層應用apk到G-sensor driver的大致流程:

          Android HAL層,即硬件抽象層,是Google響應廠家“希望不公開源碼”的要求推出的新概念

          1,源代碼和目標位置

          源代碼: /hardware/libhardware目錄,該目錄的目錄結構如下:

          /hardware/libhardware/hardware.c編譯成libhardware.so,目標位置為/system/lib目錄

          /hardware/libhardware/include/hardware目錄下包含如下頭文件:

          hardware.h 通用硬件模塊頭文件

          copybit.h copybit模塊頭文件

          gralloc.h gralloc模塊頭文件

          lights.h 背光模塊頭文件

          overlay.h overlay模塊頭文件

          qemud.h qemud模塊頭文件

          sensors.h 傳感器模塊頭文件

          /hardware/libhardware/modules目錄下定義了很多硬件模塊

          這些硬件模塊都編譯成xxx.xxx.so,目標位置為/system/lib/hw目錄

          2,Android對于Sensor的API定義在 hardware/libhardware/include/hardware/sensor.h中,要求在sensor.so提供以下8個API函數

          [控制方面]

          int (*open_data_source)(struct sensors_control_device_t *dev);

          int (*activate)(struct sensors_control_device_t *dev, int handle, int enabled);

          int (*set_delay)(struct sensors_control_device_t *dev, int32_t ms);

          int (*wake)(struct sensors_control_device_t *dev);

          [數據方面]

          int (*data_open)(struct sensors_data_device_t *dev, int fd);

          int (*data_close)(struct sensors_data_device_t *dev);

          int (*poll)(struct sensors_data_device_t *dev, sensors_data_t* data);

          [模塊方面]

          int (*get_sensors_list)(struct sensors_module_t* module, struct sensor_t const** list);

          在Java層Sensor的狀態控制由SensorService來負責,它的java代碼和JNI代碼分別位于:

          frameworks/base/services/java/com/Android/server/SensorService.java

          frameworks/base/services/jni/com_Android_server_SensorService.cpp

          在Java層Sensor的數據控制由SensorManager來負責,它的java代碼和JNI代碼分別位于:

          frameworks/base/core/java/Android/hardware/SensorManager.java

          frameworks/base/core/jni/Android_hardware_SensorManager.cpp

          Android framework中與sensor通信的是sensorService.java和sensorManager.java。

          sensorService.java的具體通信是通過JNI調用sensorService.cpp中的方法實現的。

          sensorManager.java的具體通信是通過JNI調用sensorManager.cpp中的方法實現的。

          sensorService.cpp和sensorManger.cpp通過hardware.c與sensor.so通信。其中sensorService.cpp實現對sensor的狀態控制,sensorManger.cpp實現對sensor的數據控制。

          sensor.so通過ioctl控制sensor driver的狀態,通過打開sensor driver對應的設備文件讀取G-sensor采集的數據。

          Android SDK提供了4個類來于sensor通信,分別為 sensor,sensorEvent,sensorEventListener,sensorManager。其中 sensorEventListener用來在sensorManager中注冊需要監聽的sensor類型。

          sensorManager.java提供registrater(),unregistrater()接口供sensorEventListener使用。

          sensorManager.java不斷輪詢從sensor.so中取數據。取到數據后送給負責監聽此類型sensor的 sensorEventListener.java。sensorEventListener.java通過在sensorManager.java中注冊可以監聽特定類型的sensor傳來的數據。

          系統啟動時執行systemProcess,會啟動sensorService.java,在sensorService.java的構造函數中調用JNI方法_sensor_control_init()。

          sensorService.cpp中相應的方法Android_int()會被執行。該函數會調用hardware.c中的方法hw_get_module()此函數又通過調用load()函數在system/lib/hw下查找sensor.so

          查找時會根據harware.c中定義好的sensor.*.so的擴展名的順序查找,找到第一個匹配的時候即停止,并將該sensor.so中定義好的一個全局變量HAL_MODULE_INFO_SYM帶回。該變量包含的一個

          重要信息是它的一個成員結構變量中包含的一個函數指針open,該指針所指函數會對一個device結構變量賦值,從而帶出sensorService.cpp和sensorManager.cpp與sensor通信所需要的全部信息。

          device結構變量有兩種變體分別供sensorService.cpp和sensorManaer.cpp使用。其中主要是一些函數指針指向與sensor通信的函數。

          sensorService.cpp和sensorManager.cpp在得到HAL_MODULE_INFO_SYM結構后都會調用 sensors.h的inline函數open()通過HAL_MODULE_INFO_SYM的open函數指針將所需的device信息取回。

          系統在啟動activityManager.java時,它會啟動sensorManager.java,它也會調用hardware.c中的方法hw_get_module()帶回HAL_MODULE_INFO_SYM。

          打印 郵件 收藏本頁 幫肋
          推薦閱讀
          相關閱讀
          亚洲国产成人精品无码区二本 | 一个色中文字幕| 我和岳乱妇三级高清电影| 亚洲av永久无码| 欧美又大粗又爽又黄大片视频| 人人妻人人澡人人爽欧美一区九九| 欧美黑人又粗又大久久久| 免费鲁丝片一级在线观看| 精品中文字幕乱码一区二区| 区二区三区四区免费视频| 精品久久亚洲中文无码| 免费黄色在线网站| 浪货一天不做就难受呀| 免费一级e一片在线播放| 欧美高清色视频在线播放| 亚洲欧美日韩一区在线观看| 村上里沙在线播放| 亚洲成a人v欧美综合天堂麻豆| 欧美日韩亚洲国产综合| 亚洲国产视频一区| 欧美一日本频道一区二区三区| 亚洲熟女WWW一区二区三区| 欧日韩不卡在线视频| 乱中年女人伦av一区二区| 日韩日韩日韩日韩日韩| 久久大香线蕉综合爱| 性色av一区二区三区| 中文字幕精品一区| 成人秋霞在线观看视频| 中文无线乱码二三四区| 成人18xxxx网站| xxxwww在线观看视频| 天堂网www在线资源网| 99久久99久久免费精品小说| 国产麻豆成人传媒免费观看| 99精品全国免费观看视频| 国产真实伦实例| 麻豆产精国品一二三产区区| 国产特级毛片aaaaaaa高清| 麻豆国产精品va在线观看不卡| 国产亚洲精品第一综合|