Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android Qemu GPS 模塊簡明分析

android Qemu GPS 模塊簡明分析

編輯:關於Android編程

Android 的 gps module 是 gps.default.so 在system/lib/hw/ 目錄上, 一般提供gps功能的手機應該實現這個module和真實gps硬件交互

Qemu中gps就是要構造一個gps.default.so, 但這個so並不和真的硬件打交道,只是個模擬接口,其代碼在sdk/emulator/gps/gps_qemu.c中


Qemu 容器外部實現了一個gps設備,但這個設備和 Android 交互只能通過管道,所以gps_qemu.c的功能就是同管道打交道,並提供Android需要的gps functions, 如下:

static const GpsInterface qemuGpsInterface = {

    sizeof(GpsInterface),
    qemu_gps_init,
    qemu_gps_start,
    qemu_gps_stop,
    qemu_gps_cleanup,
    qemu_gps_inject_time,
    qemu_gps_inject_location,
    qemu_gps_delete_aiding_data,
    qemu_gps_set_position_mode,
    qemu_gps_get_extension,
};

Qemu外部GPS通過 QEMU_CHANNEL_NAME 管道給 gps module 發送數據, 格式 NMEA, 所以 gps module 有幾個函數負責 parse這些數據的


GPS模塊有個要求,就是必須用它的 callback 來創建線程(gps_state_thread), 而將在的位置信息回調只能在此線程中(gps_state_thread),這是因為framework 需要一個vm可見的java thread, gps_state_thread 會被attach 到 vm 上了,從來回調 java 層函數

state->thread = callbacks->create_thread_cb( "gps_state_thread", gps_state_thread, state );

所以當QEMU_CHANNEL_NAME的位置信息過來不能直接調用callback, 而要在 gps_state_thread 發送到 android framework
因此 gps.default.so 調用 epoll 函數監聽文件fd, 實現在 gps_state_thread 中把 location 信息送回

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved