这里只列出了一条语句的解码函数,其他语句的解码其实都是差不多的,不过很少使用。/****************************************************************************************************
* FunctionName : Gps_GPGGAParse()
* Description : $GPGGA,085223.136,3957.6286,N,11619.2078,E,1,03,4.0,6.5,M,-6.5,M,0.0,0000*63
* EntryParameter : None
* ReturnValue : None
****************************************************************************************************/
void Gps_GPGGAParse(GPS_PCK *pPck, GPS_FRM *pFrm)
{
/*
字段1:UTC 时间,hhmmss.sss,时分秒格式
字段2:纬度ddmm.mmmm,度分格式(前导位数不足则补0)
字段3:纬度N(北纬)或S(南纬)
字段4:经度dddmm.mmmm,度分格式(前导位数不足则补0)
字段5:经度E(东经)或W(西经)
字段6:GPS状态,0=未定位,1=非差分定位,2=差分定位,3=无效PPS,6=正在估算
字段7:正在使用的卫星数量(00 - 12)(前导位数不足则补0)
字段8:HDOP水平精度因子(0.5 - 99.9)
字段9:海拔高度(-9999.9 - 99999.9)
字段10:地球椭球面相对大地水准面的高度
字段11:差分时间(从最近一次接收到差分信号开始的秒数,如果不是差分定位将为空)
字段12:差分站ID号0000 - 1023(前导位数不足则补0,如果不是差分定位将为空)
字段13:校验值
*/
u8 cmmCnt = 0; // 逗号计数
u8 *pComma, *pHead;
pHead = &pFrm->Buf[7];
while (cmmCnt < 9) // 此语句有9个逗号
{
pComma = (u8 *)(strchr((const char *)pHead, ',')); // 寻找","符号位置
if ((pComma != (u8 *)NULL) && (pHead != pComma))
{
*pComma++ = 0;
switch (cmmCnt)
{
case 0: break; // 纬度ddmm.mmmm,度分格式(前导位数不足则补0)
case 1: break; // 纬度N(北纬)或S(南纬)
case 2: break; // 纬度N(北纬)或S(南纬)
case 3: break; // 经度dddmm.mmmm,度分格式(前导位数不足则补0)
case 4: break; // 经度E(东经)或W(西经)
case 5: break; // GPS状态,0=未定位,1=非差分定位,2=差分定位,3=无效PPS,6=正在估算
case 6: Gps_SateNum(&pPck->SateNum, pHead); break; // 正在使用的卫星数量(00 - 12)(前导位数不足则补0)
case 7: Gps_LevelFactor(pPck->LvlAcc, pHead); break; // HDOP水平精度因子(0.5 - 99.9)
case 8: Gps_Elevation(pPck->Ele, pHead); break; // 海拔高度(-9999.9 - 99999.9)
default: break;
}
}
else
{
pComma++;
}
pHead = pComma;
cmmCnt++;
}
}
/***************************************************************************************************
* FunctionName : Gps_GPGLLParse()
* Description : $GPGLL,4250.5589,S,14718.5084,E,092204.999,A*2D
* EntryParameter : None
* ReturnValue : None
****************************************************************************************************/
void Gps_GPGLLParse(GPS_PCK *pPck, GPS_FRM *pFrm)
{
/*
字段1:纬度ddmm.mmmm,度分格式(前导位数不足则补0)
字段2:纬度N(北纬)或S(南纬)
字段3:经度dddmm.mmmm,度分格式(前导位数不足则补0)
字段4:经度E(东经)或W(西经)
字段5:UTC时间,hhmmss.sss格式
字段6:状态,A=定位,V=未定位
字段7:校验值
*/
return ;
}
/****************************************************************************************************
* FunctionName : Gps_GPGSAParse()
* Description : $GPGSA,A,3,01,20,19,13,,,,,,,,,40.4,24.4,32.2*0A
* EntryParameter : None
* ReturnValue : None
****************************************************************************************************/
void Gps_GPGSAParse(GPS_PCK *pPck, GPS_FRM *pFrm)
{
/*
字段 1:定位模式,A=自动手动2D/3D,M=手动2D/3D
字段 2:定位类型,1=未定位,2=2D定位,3=3D定位
字段 3:PRN码(伪随机噪声码),第 1信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段 4:PRN码(伪随机噪声码),第 2信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段 5:PRN码(伪随机噪声码),第 3信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段 6:PRN码(伪随机噪声码),第 4信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段 7:PRN码(伪随机噪声码),第 5信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段 8:PRN码(伪随机噪声码),第 6信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段 9:PRN码(伪随机噪声码),第 7信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段10:PRN码(伪随机噪声码),第 8信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段11:PRN码(伪随机噪声码),第 9信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段12:PRN码(伪随机噪声码),第10信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段13:PRN码(伪随机噪声码),第11信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段14:PRN码(伪随机噪声码),第12信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段15:PDOP综合位置精度因子(0.5 - 99.9)
字段16:HDOP水平精度因子(0.5 - 99.9)
字段17:VDOP垂直精度因子(0.5 - 99.9)
字段18:校验值
*/
return ;
}
/****************************************************************************************************
* FunctionName : Gps_GPGSVParse()
* Description : $GPGSV,3,1,10,20,78,331,45,01,59,235,47,22,41,069,,13,32,252,45*70
* EntryParameter : None
* ReturnValue : None
****************************************************************************************************/
void Gps_GPGSVParse(GPS_PCK *pPck, GPS_FRM *pFrm)
{
/*
字段 1:本次GSV语句的总数目(1 - 3)
字段 2:本条GSV语句是本次GSV语句的第几条(1 - 3)
字段 3:当前可见卫星总数(00 - 12)(前导位数不足则补0)
字段 4:PRN 码(伪随机噪声码)(01 - 32)(前导位数不足则补0)
字段 5:卫星仰角(00 - 90)度(前导位数不足则补0)
字段 6:卫星方位角(00 - 359)度(前导位数不足则补0)
字段 7:信噪比(00-99)dbHz
字段 8:PRN 码(伪随机噪声码)(01 - 32)(前导位数不足则补0)
字段 9:卫星仰角(00 - 90)度(前导位数不足则补0)
字段10:卫星方位角(00 - 359)度(前导位数不足则补0)
字段11:信噪比(00-99)dbHz
字段12:PRN 码(伪随机噪声码)(01 - 32)(前导位数不足则补0)
字段13:卫星仰角(00 - 90)度(前导位数不足则补0)
字段14:卫星方位角(00 - 359)度(前导位数不足则补0)
字段15:信噪比(00-99)dbHz
字段16:校验值
*/
return ;
}
/****************************************************************************************************
* FunctionName : Gps_GPVTGParse()
* Description : $GPVTG,89.68,T,,M,0.00,N,0.0,K*5F
* EntryParameter : None
* ReturnValue : None
****************************************************************************************************/
void Gps_GPVTGParse(GPS_PCK *pPck, GPS_FRM *pFrm)
{
/*
字段1:运动角度,000 - 359,(前导位数不足则补0)
字段2:T=真北参照系
字段3:运动角度,000 - 359,(前导位数不足则补0)
字段4:M=磁北参照系
字段5:水平运动速度(0.00)(前导位数不足则补0)
字段6:N=节,Knots
字段7:水平运动速度(0.00)(前导位数不足则补0)
字段8:K=公里/时,km/h
字段9:校验值
*/
return ;
} 复制代码
[ 本帖最后由 zhaojun_xf 于 2013-8-13 07:00 编辑 ]