基于C语言对NMEA-0183命令进行解析,实现从TXT文档中按数据包读入数据并进行解析,之后根据用户输入定位是否有效,速度阈值,定位卫星数目,卫星信号强度等条件进行筛选输出。
解析引用声明
#ifndef _ANALYSIS_H_
#define _ANALYSIS_H_
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#include"Type.h"
#include"Operation.h"
#include"NMEA_GPZDA_Analysis.h"
#include"NMEA_GPGGA_Analysis.h"
#include"NMEA_GPGLL_Analysis.h"
#include"NMEA_GPVTG_Analysis.h"
#include"NMEA_GPGSA_Analysis.h"
#include"NMEA_GPGSV_Analysis.h"
#include"NMEA_GPRMC_Analysis.h"
#endif // _ANALYSIS_H_
GPZDA解析
#ifndef _NMEA_GPZDA_Analysis_H_
#define _NMEA_GPZDA_Analysis_H_
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#include"Operation.h"
#include"Type.h"
/******************************************************************************
* Function - NMEA GPZDA Analysis
*
* Purpose - GPZDA命令解析
*
* Description - 当前时间信息
* $GPZDA,(1),(2),(3),(4),(5),(6)*hh(CR)(LF)
*
* modification history
* ----------------------------------------
* v1.0 , 2018-12-20, LynxZhang written
* ----------------------------------------
******************************************************************************/
u8 *NMEA_GPZDA_Analysis(Nmea_msg *gpsx,u8 *buf)
{
u8 *p1, *node;
u8 posx;
u32 temp;
if(strlen((char*)buf) == 0)
{
return buf;
}
p1 = (u8*)strnstr((char *)buf, "$GPZDA", 6);
if (p1 == NULL)
{
return buf;
}
posx = NMEA_Comma_Pos(p1, 1);/*UTC时间*/
if(posx != 0XFF)
{
temp = NMEA_Str2num(p1 + posx) / NMEA_Pow(10, 2);/*UTC时间,hhmmss.ss去掉ms*/
gpsx->utc.hour = temp / 10000;
gpsx->utc.mint = (temp / 100) % 100;
gpsx->utc.sec = temp % 100;
}
posx = NMEA_Comma_Pos(p1, 2);
if (posx != 0XFF)
gpsx->utc.date = NMEA_Str2num(p1 + posx);
posx = NMEA_Comma_Pos(p1, 3);
if (posx != 0XFF)
gpsx->utc.month = NMEA_Str2num(p1 + posx);
posx = NMEA_Comma_Pos(p1, 4);
if (posx != 0XFF)
gpsx->utc.year = NMEA_Str2num(p1 + posx);
posx = NMEA_End_Pos(p1);/*6*/
node = p1 + posx + 1;
return node;
}
#endif // _NMEA_GPZDA_Analysis_H_
GPGGA解析
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#include"Operation.h"
#include"Type.h"
/******************************************************************************
* Function - NMEA GPGGA Analysis
*
* Purpose - GPGGA命令解析
*
* Description - GPS定位信息
* $GPGGA,(1),(2),(3),(4),(5),(6),(7),(8),(9),M,(10),M,(11),(12)*hh(CR)(LF)
*
* modification history
* ----------------------------------------
* v1.0 , 2018-12-13, LynxZhang written
* ----------------------------------------
******************************************************************************/
u8 *NMEA_GPGGA_Analysis(Nmea_msg *gpsx,u8 *buf)
{
u8 *p1, *node;
u8 posx;
u32 temp;
float rs;
if(strlen((char*)buf) == 0)
{
return buf;
}
p1 = (u8*)strnstr((char *)buf, "$GPGG