Android GPS架构分析<一>
2012-06-06 14:36
316 查看
--------------------------------------------------------- 首先来看看GPS模块的代码结构:Framework:1.frameworks/base/location/java/android/location这里主要是用来被App调用的,API包是android.location。2.frameworks/base/location/java/com/android/internal/location这个目录是Framework对Location服务的内部实现。3.framework\base\services\java\com\android\server这个目录只有一个文件 |-- LocationManagerService.java是Location服务对内部实现的一种封装。JNI:frameworks/base/core/jni/com_android_server_location_GpsLocationProvider.cppJNI层只有一个文件,起到承上启下的作用。上层承接Framework,下层调用HAL层具体硬件抽象实现。HAL:Hardware Abstract Layer 硬件抽象层hardware\libhardware_legacy\gpshardware\libhardware_legacy\include\hardware_legacy\gps.hHAL层相当于一个linux应用程序接口,通过open,close等操作,操作硬件设备。Android的源代码只实现了模拟器的gps接口,具体在文件gps_qemu.c中。在2.2版本中提供了对QCOM公司的gps的实现,在以下目录:\hardware\qcom 下面介绍几个重要的数据结构:1. GpsInterface接口是gps模块中最重要的数据结构,它是底层驱动实现的接口,如果要porting到自己的板子上,就需要实现这些接口。该接口的定义在gps.h中,模拟器实现在gps_qemu.c中。
/** Represents the standard GPS interface. */ typedef struct { /** * Opens the interface and provides the callback routines * to the implemenation of this interface. */ int (*init)( GpsCallbacks* callbacks ); /** Starts navigating. */ int (*start)( void ); /** Stops navigating. */ int (*stop)( void ); /** Closes the interface. */ void (*cleanup)( void ); /** Injects the current time. */ int (*inject_time)(GpsUtcTime time, int64_t timeReference, int uncertainty); /** Injects current location from another location provider * (typically cell ID). * latitude and longitude are measured in degrees * expected accuracy is measured in meters */ int (*inject_location)(double latitude, double longitude, float accuracy); /** * Specifies that the next call to start will not use the * information defined in the flags. GPS_DELETE_ALL is passed for * a cold start. */ void (*delete_aiding_data)(GpsAidingData flags); /** * fix_frequency represents the time between fixes in seconds. * Set fix_frequency to zero for a single-shot fix. */ int (*set_position_mode)(GpsPositionMode mode, int fix_frequency); /** Get a pointer to extension information. */ const void* (*get_extension)(const char* name); } GpsInterface; |
2. GpsCallbacks回调函数
这个是回调函数结构体,定义也在gps.h中。它们的实现是在com_android_server_location_GpsLocationProvider.cpp中,google已经实现了,我们不需要做任何动作。/** GPS callback structure. */ typedef struct { gps_location_callback location_cb; gps_status_callback status_cb; gps_sv_status_callback sv_status_cb; gps_nmea_callback nmea_cb; } GpsCallbacks; /** Callback with location information. */ typedef void (* gps_location_callback)(GpsLocation* location); /** Callback with status information. */ typedef void (* gps_status_callback)(GpsStatus* status); /** Callback with SV status information. */ typedef void (* gps_sv_status_callback)(GpsSvStatus* sv_info); /** Callback for reporting NMEA sentences. */ typedef void (* gps_nmea_callback)(GpsUtcTime timestamp, const char* nmea, int length); |
3. GpsLocation
表示Locatin数据信息,底层驱动获得Location的raw信息,通常是nmea码,然后通过解析就得到了location信息。
/** Represents a location. */ typedef struct { /** Contains GpsLocationFlags bits. */ uint16_t flags; /** Represents latitude in degrees. */ double latitude; /** Represents longitude in degrees. */ double longitude; /** Represents altitude in meters above the WGS 84 reference * ellipsoid. */ double altitude; /** Represents speed in meters per second. */ float speed; /** Represents heading in degrees. */ float bearing; /** Represents expected accuracy in meters. */ float accuracy; /** Timestamp for the location fix. */ GpsUtcTime timestamp; } GpsLocation; |
相关文章推荐
- Android GPS架构分析<二>
- Android中Input型输入设备驱动原理分析<一>
- Nimbus<一>Storm系列(五)架构分析之Nimbus启动过程
- Android大图加载,缩放,滑动浏览--SubsamplingScaleImageView 源码分析<一>大图加载
- Android中Input型输入设备驱动原理分析<一>
- Android 数据业务框架分析<一>
- <6>Android HAL 架构分析之硬件抽象层 hardware.h haraware.c sensors.c
- Android中Input型输入设备驱动原理分析<一>
- 本书已出版<拨云见日:基于android的内核与系统架构源代码分析 >
- 微服务开发架构——Spring Cloud常见问题与总结<一>Eureka常见问题
- Android GPS架构分析(一)
- min3d引擎使用指南(Android)<一>
- 深入浅出--Rxjava源码分析<一>
- Android读取txt信息思路及Demo<软件工程作业一>
- Android GPS架构分析
- Android学习0817<一>(Android环境搭建)
- <android里图片下载工具类AsyncImageLoader分析> 后续:优化
- 淘宝架构<一>
- Android中MVC、MVP、MVVM模式<一>
- Android GPS架构分析