在发送指令:AT+CGNSINF后,返回信息
1,1,20190602092953.000,XX.XXXXXX,YY.YYYYYY,136.833,0.00,0.0,2,,1.5,1.7,0.9,,7,7,,,41,,
指令解析如下:
解析代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct GGPS_DATA
{
char GNSSrunstatus[2];//GNSS run status:0 = GNSS off and 1 = GNSS on
char Fixstatus[2];//Fix status:0 = Not fixed positon and 1 = Fixed positon
char UTCdatetime[19];//UTC date & Time
char latitude[11];//Latitude
char logitude[12];//Longitude
char altitude[9];//MSL Altitude
char speedOTG[7];//Speed Over Ground
char course[7];//Course Over Ground
char fixmode[2];//Fix Mode
char Reserved1[2];//Reserved1
char HDOP[5];//HDOP
char PDOP[5];//PDOP
char VDOP[5];//VDOP
char Reserved2[2];//Reserved2
char satellitesinview[3];//GPS Satellites in View
char GNSSsatellitesused[3];//GNSS Satellites Used
char GLONASSsatellitesused[3];//GLONASS Satellites in View
char Reserved3[2];//Reserved3
char CN0max[3];//C/N0 max
char HPA[7];//HPA
char VPA[7];//VPA
};
struct GGPS_DATA GPS_DATA;
//input:AT+CGNSINF Command Response
//output:struct GGPS_DATA
void GPS_CGNSINF_Analyze(char *origin,struct GGPS_DATA *gpsdata)
{
int counter = 0;
char tmp[150] = {0};
char *lptr = NULL;
char *localptr = NULL;
lptr=strstr(origin,"+CGNSINF");
if(lptr==NULL)return;
else lptr+=10;
while(*lptr!='\0')
{
if(*lptr==','&&*(lptr+1)==',')
{
tmp[counter]=*lptr;
counter++;
tmp[counter]='0';
}
else if(*lptr=='\r'&&*(lptr+1)=='\n'&&counter<148)
{
tmp[counter] = '0';
tmp[counter+1] = ',';
tmp[counter+2] = 0;
break;
}
else
tmp[counter]=*lptr;
lptr++;
counter++;
//avoid array out of range
if(counter>=148)return;
}
//Clear struct data
memset(gpsdata,0,sizeof(struct GGPS_DATA));
localptr = strtok(tmp,",");if(localptr == NULL) return;
strcpy(gpsdata->GNSSrunstatus,localptr);
localptr = strtok(NULL,",");if(localptr == NULL) return;
strcpy(gpsdata->Fixstatus,localptr);
localptr = strtok(NULL,",");if(localptr == NULL) return;
strcpy(gpsdata->UTCdatetime,localptr);
localptr = strtok(NULL,",");if(localptr == NULL) return;
strcpy(gpsdata->latitude,localptr);
localptr = strtok(NULL,",");if(localptr == NULL) return;
strcpy(gpsdata->logitude,localptr);
localptr = strtok(NULL,",");if(localptr == NULL) return;
strcpy(gpsdata->altitude,localptr);
localptr = strtok(NULL,",");if(localptr == NULL) return;
strcpy(gpsdata->speedOTG,localptr);
localptr = strtok(NULL,",");if(localptr == NULL) return;
strcpy(gpsdata->course,localptr);
localptr = strtok(NULL,",");if(localptr == NULL) return;
strcpy(gpsdata->fixmode,localptr);
localptr = strtok(NULL,",");if(localptr == NULL) return;
strcpy(gpsdata->Reserved1,localptr);
localptr = strtok(NULL,",");if(localptr == NULL) return;
strcpy(gpsdata->HDOP,localptr);
localptr = strtok(NULL,",");if(localptr == NULL) return;
strcpy(gpsdata->PDOP,localptr);
localptr = strtok(NULL,",");if(localptr == NULL) return;
strcpy(gpsdata->VDOP,localptr);
localptr = strtok(NULL,",");if(localptr == NULL) return;
strcpy(gpsdata->Reserved2,localptr);
localptr = strtok(NULL,",");if(localptr == NULL) return;
strcpy(gpsdata->satellitesinview,localptr);
localptr = strtok(NULL,",");if(localptr == NULL) return;
strcpy(gpsdata->GNSSsatellitesused,localptr);
localptr = strtok(NULL,",");if(localptr == NULL) return;
strcpy(gpsdata->GLONASSsatellitesused,localptr);
localptr = strtok(NULL,",");if(localptr == NULL) return;
strcpy(gpsdata->Reserved3,localptr);
localptr = strtok(NULL,",");if(localptr == NULL) return;
strcpy(gpsdata->CN0max,localptr);
localptr = strtok(NULL,",");if(localptr == NULL) return;
strcpy(gpsdata->HPA,localptr);
localptr = strtok(NULL,"\r\n");if(localptr == NULL) return;
strcpy(gpsdata->VPA,localptr);
}
char test1[150]="asdfghjkl +CGNSINF: 1,0,19800106000007.000,,,,0.00,0.0,0,,,,,,0,0,,,,,\r\n\r\nOK\r\n asdfghjkl";
char test2[150]="asdfghjkl +CGNSINF: 1,1,20180209053930.000,31.362958,120.707803,-13.471,0.00,7.4,2,,0.7,1.3,1.1,,15,15,,,40,,\r\n\r\nOK\r\n asdfghjkl";
int main(void)
{
GPS_CGNSINF_Analyze(test2,&GPS_DATA);
printf("UTCdatetime = %s \n",GPS_DATA.UTCdatetime);
printf("latitude = %s \n",GPS_DATA.latitude);
printf("logitude = %s \n",GPS_DATA.logitude);
printf("satellitesinview = %s \n",GPS_DATA.satellitesinview);
return 0;
}
ref: