C GPS解析器功能不支持';我不能和新的接收器一起工作

C GPS解析器功能不支持';我不能和新的接收器一起工作,c,parsing,gps,C,Parsing,Gps,我正在使用一个旧设备(2006年-非常精简的嵌入式Linux)从外部接收器获取GPS纬度和经度。GPS坐标显示在设备的LCD显示屏上。在最初的GPS接收机出现故障之前,它一直工作正常。他们用一个新的接收器替换了它,但现在它不再工作了,我在LCD上看到的只是:纬度:-/经度:- 我试着看看新的GPS接收器是否可以工作。似乎GPGGA数据包就在那里。旧设备需要GPGGA数据包进行解析/处理 char-GPSLatBuf[12],GPSLonBuf[12]; int parseGPSData(char

我正在使用一个旧设备(2006年-非常精简的嵌入式Linux)从外部接收器获取GPS纬度和经度。GPS坐标显示在设备的LCD显示屏上。在最初的GPS接收机出现故障之前,它一直工作正常。他们用一个新的接收器替换了它,但现在它不再工作了,我在LCD上看到的只是:纬度:-/经度:-

我试着看看新的GPS接收器是否可以工作。似乎GPGGA数据包就在那里。旧设备需要GPGGA数据包进行解析/处理

char-GPSLatBuf[12],GPSLonBuf[12];
int parseGPSData(char*gpsBuffer)
{
char*p;
字符gpsQuality='0';
if((p=strstrstr(gpsBuffer,“$GPGGA”))==NULL)
返回-1;
memset(GPSLatBuf,0,sizeof(GPSLatBuf));
memset(GPSLonBuf,0,sizeof(GPSLonBuf));
p+=7;//UTC时间
如果(*p!=',')
{
p+=10;//纬度
如果(*p!=',')
{
memcpy(和GPSLatBuf[1],第9页);
p+=10;//N/S半球
如果(*p!=',')
{
GPSLatBuf[0]=(*p=='N')?'+':'-';
p+=2;//经度
如果(*p!=',')
{
memcpy(和GPSLonBuf[1],第10页);
p+=11;//东西半球
如果(*p!=',')
{
GPSLonBuf[0]=(*p=='E')?'+':'-';
p+=2;//GPS质量
如果(*p!=',')
gpsQuality=*p;
}
}
}
}
}
如果(gpsQuality==“0”)
返回-1;
返回0;
}

希望看到像以前一样的非空字段:+4916.4600/-12311.1200(只是一个示例,因为我现在没有看到任何显示)。

希望这不会太晚。
其思想是:GPGGA消息*中数据的小数位数在某种程度上特定于GPS模块。
因此,您的代码在这里有一个问题,因为它使用固定偏移来搜索纬度、经度等。
解决这个问题很容易:与其使用固定偏移量,不如使用
strstr()
函数搜索分隔符(“,”) 以下是更正后的代码:

int-parseGPSData(char*gpsBuffer)
{
char*p;
字符gpsQuality='0';
if((p=strstrstr(gpsBuffer,“$GPGGA”))==NULL)
返回-1;
memset(GPSLatBuf,0,sizeof(GPSLatBuf));
memset(GPSLonBuf,0,sizeof(GPSLonBuf));
如果((p=strstrstr(p,“,”)!=NULL)
{
p++;//有UTC时间
如果((p=strstrstr(p,“,”)!=NULL)
{
p++;//纬度
memcpy(和GPSLatBuf[1],第9页);
如果((p=strstrstr(p,“,”)!=NULL)
{
p++;///N/S半球
GPSLatBuf[0]=(*p=='N')?'+':'-';
如果((p=strstrstr(p,“,”)!=NULL)
{
p++;//经度
memcpy(和GPSLonBuf[1],第10页);
如果((p=strstrstr(p,“,”)!=NULL)
{
p++;//东/西半球
GPSLonBuf[0]=(*p=='E')?'+':'-';
如果((p=strstrstr(p,“,”)!=NULL)
gpsQuality=p[1];
}
}
}
}
}
如果(gpsQuality==“0”)
返回-1;
返回0;
}  
我很肯定这会解决你的问题:)


*编辑
以下是NMEA GGA消息的外观-示例:

$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47

where:  
##     GGA          Global Positioning System Fix Data  
##     123519       Fix taken at 12:35:19 UTC  
##     4807.038,N   Latitude 48 deg 07.038' N  
##     01131.000,E  Longitude 11 deg 31.000' E  
##     ...  

您可以在此处找到更多有用的信息:

用可用信息无法回答此问题。您需要知道旧接收器的接口是什么,以及新接收器的行为如何不同。既然你还没有确定新型号,我们也无能为力。即使你指定了它,也会有很多问题需要回答。你有新设备的编程手册吗?如果不是,那么就这样做。找出哪个字符串不可解析,根据它生成一个测试用例并进行调试。我也考虑过调试,但它是一个旧设备,它不提供调试信息,也不提供日志。幸运的是,我们有源代码。代码似乎可以移植,即使不是在目标上也可以调试。@JonathanLeffler:但是,好吧,GPGGA应该是标准的NMEA消息,对吗?或者是否允许有变化、不同的实现?