设为首页 加入收藏

TOP

Android Qemu GPS 模块初认识
2015-02-25 16:15:09 来源: 作者: 【 】 浏览:31
Tags:Android Qemu 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 信息送回。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇jQuery实现相同内容合并单元格 下一篇Java实现循环列表解决约瑟夫环问题

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: