基于android 的GPS 移植——主要结构体及接口介绍

本文介绍了Android GPS驱动的HAL层实现,包括GPS接口的主要结构体、回调函数和数据结构。讲解了GPS的工作模式、卫星状态、位置模式、辅助数据删除等关键概念,并阐述了GPSInterface在GPS通信中的作用。
摘要由CSDN通过智能技术生成

最近负责 Android 驱动的GPS部分,所谓Android驱动 我觉得可以说成是linux应用

之前发了一个图描述了 Android GPS 架构

GPS芯片大多采用串口通信,所以只要CPU能够提供一个UART 驱动, 那么跟GPS芯片通信是没有问题的,

但是现在很多GPS功能不是一个单独的芯片,大部分都是一个芯片上有好几种无线模块 比如 Blletooth WiFi FM等

有时候 有些功能就会去复用一个UART,这样在管理上就相对麻烦, 要将一个UART驱动, 模拟成一个HCI的接口而后才能使GPS功能(TI1281)


比较好的是我们的项目是单一的GPS chip 听说apple也是用的这一款,不过人家拿的是全部的source code,而我们只有部分的code而没有核心算法的code 很郁闷, 但是即便是只有部分code从里边还是可以学到很多的机制


对于android GPS驱动来说主要的工作是实现HAL层 计编译生成一个叫做gps.***.so的动态库的 代码.
由app发出定位申请,此时会去启动一个定位服务线程,此线程会调用到Location provider 服务在App Framwork中,在次会通过被native方法调用到JNI中,JNI获得GpsInterface并传给接口一个回调函数的实现。
GpsInterface就是由HAL层最主要实现

介绍下gps.h下得重要相关结构题定义
在android2.3中gps.h定义在/hardware/inclue/hardware下
主要的结构
1、相关宏定义:

  • 定位模式定义
    /** Requested operational mode for GPS operation. */
    typedef uint32_t GpsPositionMode;
    // IMPORTANT: Note that the following values must match
    // constants in GpsLocationProvider.java.
    /** Mode for running GPS standalone (no assistance). */
    #define GPS_POSITION_MODE_STANDALONE    0    //纯GPS 使用卫星定位
    /** AGPS MS-Based mode. */
    #define GPS_POSITION_MODE_MS_BASED      1    //基于用户终端的A-GPS
    /** AGPS MS-Assisted mode. */
    #define GPS_POSITION_MODE_MS_ASSISTED   2    //基于用户终端辅助A-GPS



  • 工作模式
    /** Requested recurrence mode for GPS operation. */
    typedef uint32_t GpsPositionRecurrence;
    // IMPORTANT: Note that the following values must match
    // constants in GpsLocationProvider.java.
    /** Receive GPS fixes on a recurring basis at a specified period. */
    #define GPS_POSITION_RECURRENCE_PERIODIC    0//周期性的
    /** Request a single shot GPS fix. */
    #define GPS_POSITION_RECURRENCE_SINGLE      1//单次工作


  • 辅助数据(在测试GPS性能时候又是需要删除全部或部分的辅助数据)
    /** Flags used to specify which aiding data to delete
        when calling delete_aiding_data(). */

    typedef uint16_t GpsAidingData;
    // IMPORTANT: Note that the following values must match
    // constants in GpsLocationProvider.java.
    #define GPS_DELETE_EPHEMERIS        0x0001
    #define GPS_DELETE_ALMANAC          0x0002
    #define GPS_DELETE_POSITION         0x0004
    #define GPS_DELETE_TIME             0x0008
    #define GPS_DELETE_IONO             0x0010
    #define GPS_DELETE_UTC              0x0020
    #define GPS_DELETE_HEALTH           0x0040
    #define GPS_DELETE_SVDIR            0x0080
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值