`
huangqinqin
  • 浏览: 367086 次
  • 性别: Icon_minigender_2
  • 来自: 福州
社区版块
存档分类
最新评论

Android GPS架构分析

阅读更多
转载时请注明出处和作者
文章出处:http://danielwood.cublog.cn
作者:Daniel Wood
----------------------------------------------------------
看Android的GPS模块有两个月了吧,终于可以写点东西出来。首先来看看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\services\java\com\android\server
这个目录只有一个文件
|-- LocationManagerService.java
是Location服务对内部实现的一种封装。

JNI:
frameworks/base/core/jni/android_location_GpsLocationProvider.cpp
JNI层只有一个文件,起到承上启下的作用。上层承接Framework,下层调用HAL层具体硬件抽象实现。

HAL:Hardware Abstract Layer 硬件抽象层
hardware\libhardware_legacy\gps
hardware\libhardware_legacy\include\hardware_legacy\gps.h
HAL层相当于一个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中。它们的实现是在android_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;
分享到:
评论

相关推荐

    AndroidGPS架构分析.pdf

    Android GPS 架构分析 Android GPS 架构分析是一个重要的知识点,在 Android 系统中,GPS location provider 是一个核心组件,负责提供位置信息给应用程序。在这个架构中,我们可以看到 LocationManagerService 是...

    androidGPS架构分析推荐.pdf

    "Android GPS 架构分析" Android GPS 架构是 Android 系统中用来实现 GPS 功能的软硬件架构。从 Android GPS 架构中,我们可以了解到 GPS 的底层实现机制和相关的数据结构。 1. GPS 位置信息结构体 (GpsLocation)...

    android GPS 架构分析

    GPS模块的代码结构;Framework/JNI/HAL

    androidGPS架构分析借鉴.pdf

    本文将深入分析Android GPS架构的关键组成部分,以及它们如何协同工作来实现准确的定位。 首先,我们来看GPS架构的核心结构体和接口。这些定义在`hardware/libhardware/include/hardware/gps.h`头文件中,为开发者...

    Android_GPS架构分析

    Android GPS架构分析主要涉及Android系统如何管理和使用GPS硬件来获取定位信息。在Android中,GPS功能的实现是通过一系列组件和服务协同工作来完成的。以下是对这一架构的详细分析: 首先,Android系统中的GPS支持...

    android gps架构详细分析

    ### Android GPS架构详细分析 #### 一、概述 Android GPS架构设计旨在为移动设备提供精确的位置定位服务。本文将从Android框架(Framework)至本地方法接口(JNI)再到硬件抽象层(HAL)进行深入解析,帮助读者...

    android GPS架构之GPS的开启与关闭

    Android GPS 架构之 GPS 的开启与关闭 Android GPS 架构中的 GPS 开启与关闭是指在 Android 系统中如何启动和关闭 GPS 设备的过程。本文将详细介绍 GPS 的开启与关闭的代码实现、系统启动过程、数据库写入过程等...

    Android GPS模块架构分析

    ### Android GPS模块架构分析 #### 一、GPS模块概述与重要性 全球定位系统(Global Positioning System, GPS)是现代移动设备中不可或缺的功能之一。它不仅支持基础的地图导航功能,还广泛应用于各种位置感知应用中...

    Android之GPS架构分析

    ### Android之GPS架构分析 #### 一、概述 在Android平台中,GPS定位服务作为一项核心功能,为用户提供了精确的位置信息。本文将以Android 2.2版本为基础,深入探讨其GPS架构的设计与实现,包括从应用层到硬件抽象...

    gps启动流程分析

    Android GPS 架构分析中,整个系统可以分为四个主要部分:Framework、JNI、HAL 和应用程序。其中,Framework 负责提供给应用程序调用的 API,JNI 层实现了 Framework 和 HAL 之间的交互,而 HAL 则提供了硬件抽象层...

    Android_GPS.zip_android_android gps

    Android_GPS.zip这个压缩包文件包含了关于Android GPS架构的深入分析,旨在帮助开发者理解其工作原理和如何在源码层面进行操作。以下是该主题的详细阐述: 一、Android GPS架构 Android GPS架构主要由以下几部分...

    android_hardware_gps GPS驱动

    在Android 10环境下,GPS驱动需要与全志的硬件架构兼容,确保在不同设备上提供一致的定位性能。Android 10引入了多项改进,包括更好的位置权限管理、更精确的定位服务等,这些都要求GPS驱动具备良好的兼容性和优化。...

    android GPS 驱动源码

    HAL是Android系统架构中的一个重要组成部分,它位于应用程序框架层和Linux内核层之间,起到了桥梁的作用。HAL为上层应用程序和系统服务提供了标准接口,同时封装了底层硬件的具体操作,使得系统可以跨平台地访问不同...

    Android Ublox GPS 驱动

    首先,我们要理解Android的GPS架构。Android的GPS系统基于HAL(硬件抽象层)设计,它位于操作系统核心与硬件之间,提供了标准化接口供上层应用程序调用。在Android中,GPS HAL负责与硬件交互,获取GPS数据,并将其...

    Android GPS HAL 硬件抽象层

    Android GPS HAL 的架构主要分为三部分: GPS HAL 层、 Framework 层和应用层。其中,GPS HAL 层是 Android 操作系统中最底层的硬件抽象层,负责与 GPS 硬件进行交互;Framework 层是 Android 操作系统的核心层,...

Global site tag (gtag.js) - Google Analytics