GNSS定位

Copyright © Quectel Wireless Solutions Co., Ltd. 2026. All rights reserved.


功能概述

GNSS(Global Navigation Satellite System,全球导航卫星系统)是依托多轨道卫星无线电信号,为全球范围内设备提供高精度位置、运动速度与标准时间信息的卫星定位系统。主流GNSS系统包含 中国BDS北斗系统美国GPS系统俄罗斯GLONASS系统欧盟Galileo系统 四大全球卫星导航体系,设备可兼容多系统联合定位,大幅提升定位可用性与精度。

GNSS定位核心原理为接收机同步接收多颗卫星广播信号,通过解析信号测距信息与卫星星历数据,解算设备终端的三维地理位置、运动状态及时间信息,是室外高精度定位的核心方案,可与LBS基站定位形成互补,适配全场景物联网定位需求。

基本组成要素

完整的GNSS卫星定位系统由卫星星座、地面控制段、用户接收机、卫星信号结构、定位解算算法五大核心要素构成,各模块协同完成卫星信号传输、校准与位置解算全流程。

  • 卫星星座:由多颗卫星组成,分布在不同的轨道上,确保全球覆盖和定位精度。

  • 地面控制段:监控卫星状态、上传星历和时钟修正数据。

  • 用户接收机:接收卫星信号,解算位置、速度和时间信息。

  • 卫星信号结构:GNSS卫星发射的无线电信号,包含测距码、导航数据和载波频率。

  • 定位解算算法:通过接收多颗卫星的信号,计算接收机的位置坐标。

定位流程

GNSS定位为标准化端到端信号处理与数据解算流程,依托卫星信号传播、接收机信号处理、算法拟合修正,实现精准定位。完整流程分为五大核心步骤:

  1. 信号接收:接收机通过天线接收来自多颗GNSS卫星的无线电信号。信号包含测距码(C/A码、P码)、导航数据和载波频率。

  2. 信号处理:接收机对信号进行放大、滤波和下变频处理。通过相关器捕获和跟踪卫星信号,提取伪距和载波相位测量值。

  3. 位置解算:基于伪距测量值,通过最小二乘法或卡尔曼滤波算法计算接收机的位置坐标。GNSS三维定位需要至少 4颗卫星 的有效信号才能解算三维位置(经度、纬度、高度)和时间。

  4. 误差修正:针对卫星信号传播与设备解算过程中的固有误差,进行针对性补偿修正,主要修正项包含电离层信号延迟、对流层信号折射延迟、卫星钟差、相对论效应、轨道偏差等基础误差。高端场景可使用差分GNSS(DGNSS)或实时动态定位(RTK)技术提高定位精度。

  5. 输出结果:输出位置坐标(纬度、经度、高度)、速度、航向和时间信息。终端通过 NMEA 0183协议 输出标准化的定位数据语句。

GNSS NMEA语句详解

GGA语句

GGA语句格式定义

语句类型

格式定义

GGA

$--GGA,<time>,<Lat>,<N>,<Lon>,<E>,<FS>,<NoSV>,<HDOP>,<msl>,<M>,<Altref>,<M>,<DiffAge>,<DiffStation>*cs



示例:$GPGGA,060845.00,4004.74005,N,11614.19613,E,1,10,0.85,53.5,M,,M,,*7B

GGA语句参数说明

参数

类型

描述

--

字符串

定位系统标识
GP :GPS
PQ/GB/BD:BDS
GA:Galileo
GL:GLONASS
GN :多系统混合定位

<time>

字符串

UTC时间;格式:hhmmss.ss
hh:小时
mm:分钟
ss.ss:秒

<Lat>

字符串

纬度;格式:ddmm.mmmmm
dd:度
mm.mmmmm:分

<N>

字符串

北纬或南纬指示
N:北纬
S:南纬

<Lon>

字符串

经度;格式:dddmm.mmmmm
ddd:度
mm.mmmmm:分

<E>

字符串

东经或西经指示
E:东经
W:西经

<FS>

uint

定位状态标识
0:无效
1:单点定位
2:差分定位
6:递推定位

<NoSV>

uint

参与定位的卫星数量

<HDOP>

双精度浮点数

水平精度因子;范围:0.00~99.99;不定位时参数值为99.99

<msl>

双精度浮点数

椭球高或海拔高;固定输出1位小数(CFGGEOID即高程配置为1)

<M>

字符串

椭球高单位或海拔高单位,参数值固定为 M;不定位时参数值为空

<Altref>

双精度浮点数

海平面分离度;仅在CFGGEOID即高程配置为1时有效,否则参数值固定为空。

<M>

字符串

海平面分离度单位,参数值固定为 M;不定位时参数值为空

<DiffAge>

双精度浮点数

差分校正时延;单位:秒;非差分定位时参数值为空

<DiffStation>

双精度浮点数

参考站ID;非差分定位时参数值为空

cs

字符串

校验和;本条语句从’$‘到’*'之间的所有字符进行异或运算得到的十六进制数值

GLL语句

GLL语句格式定义

语句类型

格式定义

GLL

$--GLL,< Lat>,< N>,< Lon>,<E>,<time>,<Valid>,<Mode>*cs

 

示例:$GPGLL,4004.74005,N,11614.19613,E,060845.00,A,A*6F

GLL语句参数说明

参数

类型

描述

--

字符串

定位系统标识
GP :GPS
PQ/GB/BD:BDS
GA:Galileo
GL:GLONASS
GN :多系统混合定位

<Lat>

字符串

纬度;格式:ddmm.mmmmm
dd:度
mm.mmmmm:分

<N>

字符串

北纬或南纬指示
N:北纬
S:南纬

<Lon>

字符串

经度;格式:dddmm.mmmmm
ddd:度
mm.mmmmm:分

<E>

字符串

东经或西经指示
E:东经
W:西经

<time>

字符串

UTC时间;格式:hhmmss.ss
hh:小时
mm:分钟
ss.ss:秒

<Valid>

字符串

位置有效标识
V:无效
A:有效

<Mode>

字符串

定位系统模式标识
N:未定位
A:单点定位
D:差分定位

cs

字符串

校验和;本条语句从’$‘到’*'之间的所有字符进行异或运算得到的十六进制数值

GSA语句

GSA语句格式定义

语句类型

格式定义

GSA

$--GSA,<Smode>,<FS>,<sv1>,<sv2>,<sv3>,<sv4>,<sv5>,<sv6>,<sv7>,<sv8>,<sv9>,<sv10>,<sv11>,<sv12>,<PDOP>,<HDOP>,<VDOP>,<systemID>*cs



示例:$GPGSA,A,3,02,03,06,09,12,17,19,23,28,25,,,1.34,0.85,1.04,1*1E

GSA语句参数说明

参数

类型

描述

--

字符串

定位系统标识
GP :GPS
PQ/GB/BD:BDS
GA:Galileo
GL:GLONASS
GN :多系统混合定位

<Smode>

字符串

定位模式指定状态
M:手动指定2D或3D定位
A:自动切换2D或3D定位

<FS>

uint

定位模式
1:未定位
2:2D定位
3:3D定位

<sv1>~<sv12>

uint

参与定位的卫星号;参与定位的卫星不足12颗时,不足的区域为空;多于12颗时,只输出前12颗卫星
01~32:GPS卫星号
01~37:BDS卫星号
65~92:GLONASS卫星号
01~36:Galileo卫星号

<PDOP>

双精度浮点数

位置精度因子;范围:0.00~99.99;不定位时参数值为99.99

<HDOP>

双精度浮点数

水平精度因子;范围:0.00~99.99;不定位时参数值为99.99

<VDOP>

双精度浮点数

垂向精度因子;范围:0.00~99.99;不定位时参数值为99.99

<systemID>

uint

NMEA协议定义的GNSS系统ID
1:GPS系统ID
2:GLONASS系统ID
3:Galileo系统ID
4:BDS系统ID

cs

字符串

校验和;本条语句从’$‘到’*'之间的所有字符进行异或运算得到的十六进制数值

GSV语句

GSV语句格式定义

语句类型

格式定义

GSV

$--GSV,<NoMsg>,<MsgNo>,<NoSv>,<sv1>,<elv1>,<az1>,<cno1>,<sv2>,<elv2>,<az2>,<cno2>,<sv3>,<elv3>,<az3>,<cno3>,<sv4>,<elv4>,<az4>,<cno4>,<signalID>*cs

 

示例:\(GPGSV,3,01,11,02,34,277,41,03,16,043,35,05,04,215,35,06,69,333,48,0*57<br> \)GPGSV,3,02,11,09,25,110,41,12,31,305,43,17,55,116,46,19,76,088,46,056
\(GPGSV,3,03,11,23,23,077,40,25,04,328,32,28,05,171,36,0*67<br> \)GBGSV,3,01,12,01,37,145,42,02,34,225,39,03,44,188,42,04,25,123,37,0
4C
\(GBGSV,3,02,12,05,17,249,36,06,30,169,38,07,03,188,31,08,69,027,43,0*4E<br> \)GBGSV,3,03,12,09,09,186,34,10,15,211,36,12,26,306,40,13,60,316,44,0*48

GSV语句参数说明

参数

类型

描述

--

字符串

定位系统标识
GP :GPS
PQ/GB/BD:BDS
GA:Galileo
GL:GLONASS
GN :多系统混合定位

<NoMsg>

uint

GSV语句总数;最小值为1;范围:01~ 99;参数值固定为两位,不足两位前面补零
<NoMsg> 为本系统的GSV语句总数,例如GPGSV中的 <NoMsg> 为GPGSV的语句总数,不包含GBGSV语句的数量

<MsgNo>

uint

本条GSV语句的编号;最小值为1;范围:01~ 99;参数值固定为两位,不足两位前面补零
<MsgNo> 为本条GSV语句在本系统GSV语句中的编号

<NoSv>

uint

本系统可见卫星的总数

<sv1>~<sv4>

uint

第1至第4颗卫星的卫星号
01~32:GPS卫星号
01~37:BDS卫星号
65~92:GLONASS卫星号
01~36:Galileo卫星号

<elv1>~<elv4>

uint

第1至第4颗卫星的仰角;范围:0~90;单位:度;参数值固定为两位,不足两位前面补零

<az1>~<az4>

uint

第1至第4颗卫星的方位角;范围:0~359;单位:度;参数值固定为三位,不足三位前面补零

<cno1>~<cno4>

uint

第1至第4颗卫星的载噪比;范围:0~99;单位:dBHz;参数值固定为两位,不足两位前面补零;未跟踪的卫星,该参数值为空

<signalID>

uint

NMEA协议定义的信号ID(参数值固定为0)

cs

字符串

校验和;本条语句从’$‘到’*'之间的所有字符进行异或运算得到的十六进制数值

RMC语句

RMC语句格式定义

语句类型

格式定义

RMC

$--RMC,<time>,<status>,<Lat>,<N>,<Lon>,<E>,<spd>,<cog>,<date>,<mv>,<mvE>,<mode>,<navStates>*cs

 

示例:$GPRMC,060845.00,A,4004.74005,N,11614.19613,E,,,180817,,,A,V*0B

RMC语句参数说明

参数

类型

描述

--

字符串

定位系统标识
GP :GPS
PQ/GB/BD:BDS
GA:Galileo
GL:GLONASS
GN :多系统混合定位

<time>

字符串

UTC时间;格式:hhmmss.ss
hh:小时
mm:分钟
ss.ss:秒

<status>

字符串

位置有效标识
V:无效
A:有效

<Lat>

字符串

纬度;格式:ddmm.mmmmm
dd:度
mm.mmmmm:分

<N>

字符串

北纬或南纬指示
N:北纬
S:南纬

<Lon>

字符串

经度;格式:dddmm.mmmmm
ddd:度
mm.mmmmm:分

<E>

字符串

东经或西经指示
E:东经
W: 西经

<spd>

双精度浮点数

地面速率;单位:节;从北向起顺时针计算;测速失败或静态场景速度极小时,参数值为空

<cog>

双精度浮点数

地面航向;单位:度

<date>

字符串

UTC日期;格式:ddmmyy
dd:日
mm:月
yy:年

<mv>

双精度浮点数

磁偏角;参数值固定为空

<mvE>

字符串

磁偏角方向;参数值固定为空

<mode>

字符串

定位模式
N:未定位
A:单点定位
D:差分定位

<navStates>

字符串

导航状态标志
V:设备不提供导航状态信息

cs

字符串

校验和;本条语句从’$‘到’*'之间的所有字符进行异或运算得到的十六进制数值

VTG语句

VTG语句格式定义

语句类型

格式定义

VTG

$--VTG,<cogt>,<T>,<cogm>,<M>,<sog>,<N>,<kph>,<K>,<mode>*cs

 

示例:$GPVTG,,T,,M,0.000,N,0.000,K,A*23

VTG语句参数说明

参数

类型

描述

--

字符串

定位系统标识
GP :GPS
PQ/GB/BD:BDS
GA:Galileo
GL:GLONASS
GN :多系统混合定位

<cogt>

双精度浮点数

以真北为参考基准的地面航向;范围:0.000~359.999;单位:度;测速失败或静态场景速度极小时,参数值为空

<T>

字符串

航向标志;参数值固定为 T

<cogm>

双精度浮点数

以磁北为参考基准的地面航向;范围:0.000~359.999;单位:度;参数值默认为空

<M>

字符串

航向标志;参数值固定为 M

<sog>

双精度浮点数

地面速率;单位:节

<N>

字符串

速率单位;参数值固定为 N

<kph>

双精度浮点数

地面速率;单位:千米/时

<K>

字符串

速率单位;参数值固定为 K

<mode>

字符串

定位模式。
N:未定位
A:单点定位
D:差分定位

cs

字符串

校验和;本条语句从’$‘到’*'之间的所有字符进行异或运算得到的十六进制数值

GST语句

GST语句格式定义

语句类型

格式定义

GST

$--GST,<time>,<rngRMS>,<stdMajor>,<stdMinor>,<hdg>,<stdLat>,<stdLon>,<stdAlt>*cs

 

示例:$GNGST,065909.57,,,,,,,*53

GST语句参数说明

参数

类型

描述

--

字符串

定位系统标识
GP :GPS
PQ/GB/BD:BDS
GA:Galileo
GL:GLONASS
GN :多系统混合定位

<time>

字符串

UTC时间;格式:hhmmss.ss
hh:小时
mm:分钟
ss.ss:秒

<rngRMS>

双精度浮点数

伪距误差的均方差;最大值为3750000;单位:米

<stdMajor>

双精度浮点数

误差椭圆的半长轴;固定值为空;单位:米

<stdMinor>

双精度浮点数

误差椭圆的半短轴;固定值为空;单位:米

<hdg>

双精度浮点数

误差椭圆的半长轴指向,从正北起顺时针,固定填空;单位:度

<stdLat>

双精度浮点数

纬度方向的误差均方差;单位:米

<stdLon>

双精度浮点数

经度方向的误差均方差;单位:米

<stdAlt>

双精度浮点数

高度方向的误差均方差;单位:米

cs

字符串

校验和;本条语句从’$‘到’*'之间的所有字符进行异或运算得到的十六进制数值

GNSS API

头文件

qcm_gnss_api.h

函数概览

函数

说明

qcm_gnss_init()

初始化GNSS功能

qcm_gnss_deinit()

反初始化GNSS功能

qcm_gnss_start()

启动GNSS定位服务

qcm_gnss_stop()

停止GNSS定位服务

qcm_gnss_get_location()

获取GNSS定位信息

qcm_gnss_get_nmeasrc_sentences()

直接获取原始的NMEA语句

qcm_gnss_set_cfg()

配置GNSS功能参数

qcm_gnss_get_cfg()

获取当前的GNSS功能参数配置

qcm_gnss_set_reset_mode()

设置GNSS重启模式

qcm_gnss_get_state()

获取当前GNSS功能的状态

qcm_gnss_send_raw_data()

向GNSS芯片发送原始命令

qcm_gnss_delete_assistance_data()

删除GNSS辅助定位数据

qcm_gnss_get_version()

获取GNSS版本信息

函数详解

qcm_gnss_init

  • 功能描述
    初始化GNSS功能。

  • 函数原型

qcm_gnss_err_e qcm_gnss_init(qcm_gnss_notify_cb_t status_cb, qcm_gnss_nmea_cb_t nmea_cb)
  • 参数说明

参数名

输入/输出

类型

说明

status_cb

输入

qcm_gnss_notify_cb_t

GNSS状态通知回调函数;详见 qcm_gnss_notify_cb_t

nmea_cb

输入

qcm_gnss_nmea_cb_t

NMEA语句回调函数;详见 qcm_gnss_nmea_cb_t

qcm_gnss_notify_cb_t

  • 功能描述
    获取GNSS状态通知。

  • 函数原型

typedef void (*qcm_gnss_notify_cb_t)(qcm_gnss_notify_e notify, qcm_gnss_err_e error_code)
  • 参数说明

参数名

输入/输出

类型

说明

notify

输出

qcm_gnss_notify_e

触发回调的事件类型;详见 qcm_gnss_notify_e

error_code

输出

qcm_gnss_err_e

当前事件结果码类型;详见 qcm_gnss_err_e

  • 返回值说明

qcm_gnss_nmea_cb_t

  • 功能描述
    获取GNSS NMEA语句。

  • 函数原型

typedef void (*qcm_gnss_nmea_cb_t)(const char *nmea, int nmea_len)
  • 参数说明

参数名

输入/输出

类型

说明

nmea

输出

char

NMEA语句

nmea_len

输出

int

NMEA语句长度;单位:字节

  • 返回值说明

qcm_gnss_deinit

  • 功能描述
    反初始化GNSS功能。调用此函数后,GNSS功能将停止工作,所有相关资源将被释放。

  • 函数原型

qcm_gnss_err_e qcm_gnss_deinit(void)

qcm_gnss_start

  • 功能描述
    启动GNSS定位服务。建议在启动前先进行服务配置。

  • 函数原型

qcm_gnss_err_e qcm_gnss_start(void)

备注

此函数为异步接口,实际启动结果将通过 qcm_gnss_notify_cb_t() 回调函数的 QCM_GNSS_NOTIFY_START_EVT 事件通知。

qcm_gnss_stop

  • 功能描述
    停止GNSS定位服务。

  • 函数原型

qcm_gnss_err_e qcm_gnss_stop(void)

备注

此函数为异步接口,实际停止结果将通过 qcm_gnss_notify_cb_t() 回调函数的 QCM_GNSS_NOTIFY_STOP_EVT 事件通知。

qcm_gnss_get_location

  • 功能描述
    获取GNSS定位信息。

  • 函数原型

qcm_gnss_err_e qcm_gnss_get_location(qcm_gnss_location_t *location)
  • 参数说明

参数名

输入/输出

类型

说明

location

输出

qcm_gnss_location_t

定位信息;详见 qcm_gnss_location_t

备注

此函数为同步接口,调用后直接返回当前的定位信息。若GNSS尚未定位成功,将返回错误。

qcm_gnss_get_nmeasrc_sentences

  • 功能描述
    直接获取原始的NMEA语句。

  • 函数原型

qcm_gnss_err_e qcm_gnss_get_nmeasrc_sentences(qcm_gnss_nmeasrc_sentences_t *nmeasrc_sentences)
  • 参数说明

参数名

输入/输出

类型

说明

nmeasrc_sentences

输出

qcm_gnss_nmeasrc_sentences_t

NMEA语句;详见 qcm_gnss_nmeasrc_sentences_t

备注

此函数为同步接口,返回的数据为原始的NMEA语句格式,需要自行解析和处理。

qcm_gnss_set_cfg

  • 功能描述
    配置GNSS功能参数。

  • 函数原型

qcm_gnss_err_e qcm_gnss_set_cfg(qcm_gnss_cfg_t *cfg)
  • 参数说明

参数名

输入/输出

类型

说明

cfg

输入

qcm_gnss_cfg_t

GNSS配置参数;详见 qcm_gnss_cfg_t

备注

此函数为异步接口,配置完GNSS参数后,需要通过 qcm_gnss_notify_cb_t() 回调函数的 QCM_GNSS_NOTIFY_CFG_EVT 事件确认配置结果。

qcm_gnss_get_cfg

  • 功能描述
    获取当前的GNSS功能参数配置。

  • 函数原型

qcm_gnss_err_e qcm_gnss_get_cfg(qcm_gnss_cfg_t *cfg)
  • 参数说明

参数名

输入/输出

类型

说明

cfg

输出

qcm_gnss_cfg_t

GNSS配置参数;详见 qcm_gnss_cfg_t

备注

此函数为同步接口,调用后直接返回当前的GNSS参数配置。

qcm_gnss_set_reset_mode

  • 功能描述
    设置GNSS重启模式。

  • 函数原型

qcm_gnss_err_e qcm_gnss_set_reset_mode(qcm_gnss_reset_type_e reset_mode)
  • 参数说明

参数名

输入/输出

类型

说明

reset_mode

输入

qcm_gnss_reset_type_e

GNSS重启模式;详见 qcm_gnss_reset_type_e

备注

此函数为异步接口。

qcm_gnss_get_state

  • 功能描述
    获取当前GNSS功能的状态。

  • 函数原型

qcm_gnss_state_e qcm_gnss_get_state(void)

备注

此函数为同步接口,直接返回当前的GNSS状态。

qcm_gnss_send_raw_data

  • 功能描述
    向GNSS芯片发送原始命令。

  • 函数原型

qcm_gnss_err_e qcm_gnss_send_raw_data(char *cmd, int cmd_len)
  • 参数说明

参数名

输入/输出

类型

说明

cmd

输入

char

GNSS原始命令字符串

cmd_len

输入

int

GNSS原始命令字符串长度;单位:字节

备注

此函数为异步接口,执行结果将通过 qcm_gnss_notify_cb_t() 回调函数的 QCM_GNSS_NOTIFY_SEND_RAW_DATA_EVT 事件通知。

qcm_gnss_delete_assistance_data

  • 功能描述
    删除GNSS辅助定位数据。

  • 函数原型

qcm_gnss_err_e qcm_gnss_delete_assistance_data(void)

备注

此函数为异步接口,执行结果将通过 qcm_gnss_notify_cb_t() 回调函数的 QCM_GNSS_NOTIFY_DEL_ASSIST_DATA_EVT 事件通知。

qcm_gnss_get_version

  • 功能描述
    获取GNSS版本信息。

  • 函数原型

qcm_gnss_err_e qcm_gnss_get_version(char *version, int len)
  • 参数说明

参数名

输入/输出

类型

说明

version

输出

char

版本信息缓冲区指针

len

输入

int

缓冲区长度;单位:字节

备注

此函数为同步接口,执行后直接返回GNSS版本信息。

结构体定义

qcm_gnss_location_t

定位信息结构体定义如下:

typedef struct{
    /* RMC */
    int             valid;            
    double          latitude;         
    unsigned char   latitude_cardinal;  
    double          longitude;        
    unsigned char   longitude_cardinal; 
    double          speed;             
    double          course;           
    qosa_rtc_time_t time;         


    /* GSA */
    unsigned char mode; 
    int navmode; 
    double pdop; 
    double hdop; 
    double vdop;

    
    /* GGA */
    int   satellites_tracked; 
    float altitude;          

    
    /* VTG */
    double        cogt;      
    unsigned char cogt_flag;
    double        cogm;      
    unsigned char cogm_flag; 
    double        spkn;
    unsigned char spkn_flag;
    double        spkm;     
    unsigned char spkm_flag;
    unsigned char mode_indicator_flag; 
} qcm_gnss_location_t

参数

类型

说明

valid

int

定位有效性
1:有效
0:无效

latitude

double

纬度

latitude_cardinal

unsigned char

N:北纬
S:南纬

longitude

double

经度

longitude_cardinal

unsigned char

E: 东经
W: 西经

speed

double

地面速度;单位:节

course

double

地面航向;单位:度

time

qosa_rtc_time_t

定位时间信息;详见 qosa_rtc_time_t

mode

unsigned char

定位模式指定状态
M:手动指定2D或3D定位
A:自动切换2D或3D定位

navmode

int

定位模式
1:未定位;无法获得有效位置解算
2:2D定位;仅获得经纬度(至少需3颗卫星)
3:3D定位;获得经纬度和海拔高度(至少需4颗卫星)

pdop

double

位置精度因子

hdop

double

水平精度因子

vdop

double

垂直精度因子

satellites_tracked

int

参与定位的卫星数量

altitude

float

海拔高度;单位:米

cogt

double

以真北为参考基准的地面航向;范围:0.000~359.999;单位:度

cogt_flag

unsigned char

航向标志;参数值固定为 T

cogm

double

以磁北为参考基准的地面航向;范围:0.000~359.999;单位:度

cogm_flag

unsigned char

航向标志;参数值固定为 M

spkn

double

地面速率;单位:节

spkn_flag

unsigned char

速率单位;参数值固定为 N

spkm

double

地面速率;单位:千米/时

spkm_flag

unsigned char

速率单位;参数值固定为 K

mode_indicator_flag

unsigned char

模式指示器标志
A:自主模式
D:差分模式
E:估算模式
M:手动输入模式
S:模拟器模式
N:数据无效

备注

  1. 1节 = 1海里/小时 = 1.852公里/小时

  2. 1公里/小时 = 0.54节

qcm_gnss_nmeasrc_sentences_t

NMEA语句结构体定义如下:

typedef struct{
    char gga[QCM_GNSS_NMEA_LEN];
    char rmc[QCM_GNSS_NMEA_LEN];
    char gsv[QCM_CONSTEL_MAX][QCM_GNSS_GSV_NUM][QCM_GNSS_NMEA_LEN];
    char gsa[QCM_GNSS_GSA_NUM][QCM_GNSS_NMEA_LEN];
    char vtg[QCM_GNSS_NMEA_LEN];
    char gll[QCM_GNSS_NMEA_LEN];
    char gst[QCM_GNSS_NMEA_LEN];
} qcm_gnss_nmeasrc_sentences_t

参数

类型

说明

gga

char

GGA协议头原始语句字符串

rmc

char

RMC协议头原始语句字符串

gsv

char

GSV协议头原始语句字符串

gsa

char

GSA协议头原始语句字符串

vtg

char

VTG协议头原始语句字符串

gll

char

GLL协议头原始语句字符串

gst

char

GST协议头原始语句字符串

qcm_gnss_cfg_t

GNSS配置参数结构体定义如下:

typedef struct
{
    qosa_bool_t constel_nmea[QCM_CONSTEL_MAX][QCM_NMEA_MAX];
    qcm_gnss_multi_constel_e multi_constel;
    qosa_uint32_t fix_count;
    qcm_gnss_agps_cfg_t agps_cfg;
    qcm_gnss_ntp_cfg_t ntp_cfg;
    qosa_uint8_t simid; 
    qosa_uint8_t pdpcid;
    qcm_gnss_reset_type_e reset_mode;
    qosa_bool_t apflash_enable;
    qosa_bool_t backup_power_enable;
    qcm_gnss_bds_prefix_e bds_prefix;
    qosa_bool_t debug_enable;
} qcm_gnss_cfg_t

参数

类型

说明

constel_nmea

qosa_bool_t

布尔类型的二维数组,用于指定卫星体系输出的NMEA语句开关;行索引对应卫星星系(详见 qcm_gnss_constel_e),列索引对应NMEA语句类型(详见 qcm_gnss_nmea_type_e
举例:constel_nmea[QCM_CONSTEL_GPS][QCM_NMEA_GGA]= true 表示开启GPS系统的GGA定位数据输出

multi_constel

qcm_gnss_multi_constel_e

定位卫星组合;详见 qcm_gnss_multi_constel_e

fix_count

qosa_uint32_t

定位次数;若为0,则表示持续定位

agps_cfg

qcm_gnss_agps_cfg_t

AGPS相关配置;详见 qcm_gnss_agps_cfg_t

ntp_cfg

qcm_gnss_ntp_cfg_t

NTP相关配置;详见 qcm_gnss_ntp_cfg_t

simid

qosa_uint8_t

SIM卡ID

pdpcid

qosa_uint8_t

PDP ID

reset_mode

qcm_gnss_reset_type_e

GNSS芯片启动模式;详见 qcm_gnss_reset_type_e
此成员不起作用,实际功能由 qcm_gnss_set_reset_mode() 函数完成

apflash_enable

qosa_bool_t

AP-Flash使能开关;与备电功能互斥,不允许同时开启
QOSA_TRUE:启用AP-Flash
QOSA_FALSE:禁用AP-Flash

backup_power_enable

qosa_bool_t

备电使能开关;与AP-Flash功能互斥,不允许同时开启
QOSA_TRUE:启用备电
QOSA_FALSE:禁用备电

bds_prefix

qcm_gnss_bds_prefix_e

BDS北斗系统NMEA语句前缀;详见 qcm_gnss_bds_prefix_e

debug_enable

qosa_bool_t

GNSS芯片调试模式开关
QOSA_TRUE:启用GNSS芯片调试模式
QOSA_FALSE:禁用GNSS芯片调试模式

qcm_gnss_agps_cfg_t

AGPS相关配置结构体定义如下:

typedef struct
{
    qosa_bool_t  enable;                                
    char         url[QCM_GNSS_AGPS_URL_LEN];            
    char         vendor_id[QCM_GNSS_AGPS_VENDOR_ID_LEN]; 
    char         model_id[QCM_GNSS_AGPS_MODEL_ID_LEN];  
    char         password[QCM_GNSS_AGPS_PASSWORD_LEN]; 
} qcm_gnss_agps_cfg_t

参数

类型

说明

enable

qosa_bool_t

AGPS功能使能开关
QOSA_TRUE:启用AGPS功能
QOSA_FALSE:禁用AGPS功能

url

char

AGPS服务器地址

vendor_id

char

供应商账号

model_id

char

用户账号

password

char

用户密码

qcm_gnss_ntp_cfg_t

NTP相关配置结构体定义如下:

typedef struct
{
    qosa_bool_t  enable;                       
    char         url[QCM_GNSS_NTP_URL_LEN];   
    int          port;                       
} qcm_gnss_ntp_cfg_t

参数

类型

说明

enable

qosa_bool_t

NTP功能使能开关
QOSA_TRUE:启用NTP功能
QOSA_FALSE:禁用NTP功能

url

char

NTP服务器地址

port

int

NTP端口号

qosa_rtc_time_t

定位时间信息结构体定义如下:

typedef struct
{
    int tm_sec;
    int tm_min;
    int tm_hour;
    int tm_mday;
    int tm_mon;
    int tm_year;
    int tm_wday;
} qosa_rtc_time_t

参数

类型

说明

tm_sec

int

秒;范围:0~59

tm_min

int

分;范围:0~59

tm_hour

int

时;范围:0~23

tm_mday

int

日;范围:1~31

tm_mon

int

月;范围:0~11,0代表一月,11代表十二月

tm_year

int

年;自1900年起经过的年数

tm_wday

int

周几;范围:0~6,0代表周日

枚举定义

qcm_gnss_err_e

GNSS结果码枚举定义如下:

typedef enum
{
    QCM_GNSS_ERR_OK         = 0, 

    QCM_GNSS_ERR_UNKNOW     = 1,  
    QCM_GNSS_ERR_INVAL_PARM = 2,  
    QCM_GNSS_ERR_NO_MEMORY  = 3,  
    QCM_GNSS_ERR_NOT_INIT   = 4,  
    QCM_GNSS_ERR_BUSY       = 5,  
    QCM_GNSS_ERR_EXECUTE    = 6,  
    QCM_GNSS_ERR_NOT_START  = 7,  
    QCM_GNSS_ERR_NOT_RUN    = 8,  
    QCM_GNSS_ERR_FIRMWARE   = 9, 
    QCM_GNSS_ERR_PDP        = 10, 
    QCM_GNSS_ERR_SOCKET     = 11, 
} qcm_gnss_err_e

成员

说明

QCM_GNSS_ERR_OK

操作成功

QCM_GNSS_ERR_UNKNOW

未知错误

QCM_GNSS_ERR_INVAL_PARM

无效参数

QCM_GNSS_ERR_NO_MEMORY

内存不足

QCM_GNSS_ERR_NOT_INIT

未初始化

QCM_GNSS_ERR_BUSY

资源繁忙

QCM_GNSS_ERR_EXECUTE

执行失败

QCM_GNSS_ERR_NOT_START

GNSS服务未开启

QCM_GNSS_ERR_NOT_RUN

定位未运行

QCM_GNSS_ERR_FIRMWARE

固件加载失败

QCM_GNSS_ERR_PDP

PDP激活失败

QCM_GNSS_ERR_SOCKET

Socket连接错误

qcm_gnss_constel_e

卫星星系枚举定义如下:

typedef enum
{
    QCM_CONSTEL_GPS = 0,     
    QCM_CONSTEL_GLONASS = 1,  
    QCM_CONSTEL_GALILEO = 2,  
    QCM_CONSTEL_BDS = 3,    
    QCM_CONSTEL_MULTISYS = 4, 
    QCM_CONSTEL_MAX = 5,   
} qcm_gnss_constel_e

成员

说明

QCM_CONSTEL_GPS

美国GPS卫星系统

QCM_CONSTEL_GLONASS

俄罗斯GLONASS卫星系统

QCM_CONSTEL_GALILEO

欧盟Galileo卫星系统

QCM_CONSTEL_BDS

中国BDS北斗卫星系统

QCM_CONSTEL_MULTISYS

多星系联合定位

QCM_CONSTEL_MAX

卫星星系枚举数量上限

qcm_gnss_nmea_type_e

NMEA语句类型枚举定义如下:

typedef enum
{
    QCM_NMEA_GGA = 0,     
    QCM_NMEA_RMC = 1, 
    QCM_NMEA_GSA = 2, 
    QCM_NMEA_GSV = 3, 
    QCM_NMEA_VTG = 4, 
    QCM_NMEA_GLL = 5, 
    QCM_NMEA_TXT = 6,                     
    QCM_NMEA_ZDA = 7,                           
    QCM_NMEA_GNS = 8,                                    
    QCM_NMEA_GST = 9,                 
    QCM_NMEA_MAX = 10,
} qcm_gnss_nmea_type_e

成员

说明

QCM_NMEA_GGA

GGA语句

QCM_NMEA_RMC

RMC语句

QCM_NMEA_GSA

GSA语句

QCM_NMEA_GSV

GSV语句

QCM_NMEA_VTG

VTG语句

QCM_NMEA_GLL

GLL语句

QCM_NMEA_TXT

TXT语句

QCM_NMEA_ZDA

ZDA语句

QCM_NMEA_GNS

GNS语句

QCM_NMEA_GST

GST语句

QCM_NMEA_MAX

NMEA语句类型枚举总数上限

qcm_gnss_notify_e

触发回调的事件类型枚举定义如下:

typedef enum
{
    QCM_GNSS_NOTIFY_CFG_EVT,            
    QCM_GNSS_NOTIFY_START_EVT,          
    QCM_GNSS_NOTIFY_STOP_EVT,          
    QCM_GNSS_NOTIFY_SEND_RAW_DATA_EVT, 
    QCM_GNSS_NOTIFY_DEL_ASSIST_DATA_EVT,
    
    
    QCM_GNSS_NOTIFY_FIRMWARE_LOAD_EVT, 
    QCM_GNSS_NOTIFY_TRACK,             
    QCM_GNSS_NOTIFY_FIX_ACQUIRED,     
    QCM_GNSS_NOTIFY_FIX_LOST,          
    QCM_GNSS_NOTIFY_SYSTEM_TIME_UPDATE,
    QCM_GNSS_NOTIFY_AGPS_UPDATE_EVT,   
    QCM_GNSS_NOTIFY_ERROR_RECOVERABLE,
    QCM_GNSS_NOTIFY_ERROR_FATAL,      
    QCM_GNSS_NOTIFY_FIX_SESSION_DONE, 
} qcm_gnss_notify_e

成员

说明

QCM_GNSS_NOTIFY_CFG_EVT

配置参数设置成功通知

QCM_GNSS_NOTIFY_START_EVT

GNSS服务启动状态通知

QCM_GNSS_NOTIFY_STOP_EVT

GNSS服务停止状态通知

QCM_GNSS_NOTIFY_SEND_RAW_DATA_EVT

发送原始命令完成通知

QCM_GNSS_NOTIFY_DEL_ASSIST_DATA_EVT

删除辅助数据完成通知

QCM_GNSS_NOTIFY_FIRMWARE_LOAD_EVT

固件加载结果通知

QCM_GNSS_NOTIFY_TRACK

跟踪会话已启动通知

QCM_GNSS_NOTIFY_FIX_ACQUIRED

有效定位获取通知

QCM_GNSS_NOTIFY_FIX_LOST

定位丢失通知

QCM_GNSS_NOTIFY_SYSTEM_TIME_UPDATE

系统时间更新通知

QCM_GNSS_NOTIFY_AGPS_UPDATE_EVT

AGPS辅助数据更新通知

QCM_GNSS_NOTIFY_ERROR_RECOVERABLE

可恢复错误通知

QCM_GNSS_NOTIFY_ERROR_FATAL

致命不可恢复错误通知

QCM_GNSS_NOTIFY_FIX_SESSION_DONE

跟踪会话完成通知

qcm_gnss_multi_constel_e

卫星定位组合枚举定义如下:

typedef enum{
    QCM_MULTI_GP = 0,         
    QCM_MULTI_GP_GB_GL = 1,  
    QCM_MULTI_GP_GB_GA = 2,   
    QCM_MULTI_GP_GL_GA = 3,   
    QCM_MULTI_GP_GL = 4,     
    QCM_MULTI_GP_GB = 5,     
    QCM_MULTI_GP_GA = 6,      
    QCM_MULTI_GB = 7,         
    QCM_MULTI_GP_GB_GA_GL = 8, 
} qcm_gnss_multi_constel_e

成员

说明

QCM_MULTI_GP

GPS

QCM_MULTI_GP_GB_GL

GPS + BDS + GLONASS

QCM_MULTI_GP_GB_GA

GPS + BDS + Galileo

QCM_MULTI_GP_GL_GA

GPS + GLONASS + Galileo

QCM_MULTI_GP_GL

GPS + GLONASS

QCM_MULTI_GP_GB

GPS + BDS

QCM_MULTI_GP_GA

GPS + Galileo

QCM_MULTI_GB

BDS

QCM_MULTI_GP_GB_GA_GL

GPS + BDS + Galileo + GLONASS

qcm_gnss_reset_type_e

GNSS芯片启动类型枚举定义如下:

typedef enum{
    QCM_GNSS_RESET_COLD = 0, 
    QCM_GNSS_RESET_HOT  = 1, 
    QCM_GNSS_RESET_WARM = 2, 
} qcm_gnss_reset_type_e

成员

说明

QCM_GNSS_RESET_COLD

冷启动

QCM_GNSS_RESET_HOT

热启动

QCM_GNSS_RESET_WARM

温启动

qcm_gnss_bds_prefix_e

BDS北斗系统NMEA语句前缀枚举定义如下:

typedef enum{
    QCM_GNSS_BDS_PREFIX_PQ = 0, 
    QCM_GNSS_BDS_PREFIX_GB = 1, 
    QCM_GNSS_BDS_PREFIX_BD = 2, 
} qcm_gnss_bds_prefix_e

成员

说明

QCM_GNSS_BDS_PREFIX_PQ

语句前缀:PQ

QCM_GNSS_BDS_PREFIX_GB

语句前缀:GB

QCM_GNSS_BDS_PREFIX_BD

语句前缀:BD

qcm_gnss_state_e

GNSS功能状态枚举定义如下:

typedef enum{
    QCM_GNSS_STATE_IDLE,      
    QCM_GNSS_STATE_SYS_INIT, 
    QCM_GNSS_STATE_GNSS_INIT,
    QCM_GNSS_STATE_TRACK,  
    QCM_GNSS_STATE_STOP,    
    QCM_GNSS_STATE_SYS_DEINIT 
} qcm_gnss_state_e

成员

说明

QCM_GNSS_STATE_IDLE

GNSS尚未启动且未进行初始化

QCM_GNSS_STATE_SYS_INIT

系统初始化完成,已完成底层资源申请与系统级准备工作

QCM_GNSS_STATE_GNSS_INIT

GNSS芯片正在上电并进行初始化

QCM_GNSS_STATE_TRACK

GNSS功能正在跟踪卫星信号,同时解析定位数据

QCM_GNSS_STATE_STOP

GNSS功能正在关闭

QCM_GNSS_STATE_SYS_DEINIT

系统反初始化中,正在彻底关闭GNSS并释放占用的系统资源

应用逻辑流程图

image

示例代码

完整示例代码请查看 https://github.com/UniRTOS/UniRTOS-Doc-Examples/blob/main/network/location/gnss/gnss_demo.c