zoukankan      html  css  js  c++  java
  • android Qemu GPS 模块简明分析

    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 信息送回

  • 相关阅读:
    史上最强验证
    Yii2 return redirect()
    一次线上问题引发的思考
    一次前端体验优化
    RSA For PHP
    判断是否字符串是否是JSON
    过滤Xss
    Yii2 中日志的记录
    Yii2 中禁用csrf校验
    开始。
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/8526311.html
Copyright © 2011-2022 走看看