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. ABP源码分析二十二:Navigation
  2. Ajax基础(小猫)
  3. [ASP.NET MVC 小牛之路]02 - C#知识点提要
  4. iOS与JS交互实战篇(ObjC版)
  5. HTML 链接
  6. MEAN实践——LAMP的新时代替代方案(下)
  7. ComboTree使用
  8. Android fragment 回调函数改进
  9. android 如何解决模块之间的通讯的耦合问题
  10. JSON.parse这个是啥?
  11. 新唐M0特点分析
  12. 简单字符串匹配 Brute
  13. 安卓请求服务器js文件下载到本地,版本号就下载
  14. dmraid 用法
  15. Windows Server 2012 R2服务器部署Tomcat JDK、安装Mysql以及将Java项目部署到CVM
  16. 免登陆下载jdk
  17. Linux上mount 挂载windows共享文件权限问题
  18. C# 代码设置DataGrid列属性
  19. Leha and another game about graph CodeForces - 840B (dfs)
  20. “全栈2019”Java多线程第十八章:同步代码块双重判断详解

热门文章

  1. API设计指南(译)
  2. css选择器的对比样式代码精简
  3. laravel学习:php写一个简单的ioc服务管理容器
  4. CAD参数绘制多行文字(com接口)
  5. CAD参数绘制半径标注(网页版)
  6. 使用nsight调试caffe
  7. 第2节 hive基本操作:6、7、8
  8. 根据数据库表自动生成实体类、xml和dao---mybatis
  9. 关于js事件冒泡和事件捕获
  10. 网络共享服务器 samba