⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 garmin_api_1ver.c

📁 It is a software to decode information received by a normal GPS like GARMIN, UBLOX if it sends NMEA
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <termios.h> #include <string.h>                                                        #include <stdio.h>  #include <stdlib.h>                                                         #include <unistd.h>                                                          #include <fcntl.h>                                                           #include <sys/signal.h>                                                      #include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <errno.h>#include "garmin_api.h"//inicializar variáveis com filasGPALM GPALM_VAR=NULL;GPGSV GPGSV_VAR=NULL;//inicializar variáveis sem filasPGRMI PGRMI_VAR;PGRMC PGRMC_VAR;PGRMC1 PGRMC1_VAR;PGRMO PGRMO_VAR;GPGGA GPGGA_VAR;GPGSA GPGSA_VAR;GPRMC GPRMC_VAR;GPVTG GPVTG_VAR;GPGLL GPGLL_VAR;PGRME PGRME_VAR;PGRMF PGRMF_VAR;PGRMT PGRMT_VAR;PGRMV PGRMV_VAR;PGRMB PGRMB_VAR;sat_info satelites;/*int main(){		nmea_in("$GPRMC,170505,A,4011.1868,N,00825.0232,W,000.0,015.1,230908,004.0,W*7E");	nmea_in("$GPGGA,170505,4011.1868,N,00825.0232,W,1,06,2.0,40.0,M,51.3,M,,*6E");	nmea_in("$GPGSA,A,3,03,06,,16,18,,,22,31,,,,2.4,2.0,1.0*3E");	nmea_in("$GPGSV,3,1,11,03,49,291,52,06,63,303,51,14,19,163,00,16,40,356,47*76");	nmea_in("$GPGSV,3,2,11,18,32,067,49,19,05,293,00,21,17,026,00,22,56,113,45*79");	nmea_in("$GPGSV,3,3,11,31,16,189,45,33,43,191,49,34,00,000,00*49");		nmea_in("$GPGSV,3,1,11,03,49,291,52,06,63,303,51,14,19,163,00,16,40,356,47*76");	nmea_in("$GPGSV,3,2,11,18,32,067,49,19,05,293,00,21,17,026,00,22,56,113,45*79");	print(10);	return 0;}*/		int nmea_in(char *message){	char string[1000];	strcpy(string,message);	char *command, *parameter[30];		int n_par=0;	int i,a;		//printf("\n%s",message);	a=strlen(string);	for(i=0;i<=a;i++)	{		//printf("\n %d de %d - %c - %d",i,a,string[i],string[i]);				if(string[i]==36)		{						string[i]=0;			command=&string[i+1];		}else if(string[i]==44)		{			/*if(string[i+1]==42)			{				string[i+1]=0;				break;			}else*/ 				string[i]=0;				parameter[n_par]=&string[i+1];								n_par++;					}		if(string[i]==42) {						string[i]=0;			break;		}			}			/*	printf("\nCommand %s\nParameters:",command);		//printf("\nParameter 1 %s",parameter[0]);	for(i=0;i<n_par;i++)	{		printf("\n%d - %s",i,parameter[i]);	}	*/					if(strcmp("GPALM",command)==0){		//printf("\nGlobal Positioning System Almanac Data (ALM)");		if(strcmp(parameter[1],"1")==0)		{			//indica a chegada de uma nova mensagem logo apaga a informação ja existente			inic_GPALM(&GPALM_VAR);			inserir_GPALM(&GPALM_VAR,n_par,&parameter[0]);		}else 		inserir_GPALM(&GPALM_VAR,n_par,&parameter[0]);	}else if(strcmp("GPGGA",command)==0){		//printf("\nGlobal Positioning System Fix Data (GGA)");		inserir_GPGGA(GPGGA_VAR,n_par,&parameter[0]);	}else if(strcmp("GPGSA",command)==0){		//printf("\nGPS DOP and Active Satellites (GSA)");		inserir_GPGSA(GPGSA_VAR,n_par,&parameter[0]);	}else if(strcmp("GPGSV",command)==0){		//printf("\nGPS Satellites in View (GSV)");		if(strcmp(parameter[1],"1")==0) limpa_sat_info();		insert_sat_info(n_par,&parameter[0]);		if(strcmp(parameter[1],"1")==0)		{			//indica a chegada de uma nova mensagem logo apaga a informação ja existente			inic_GPGSV(&GPGSV_VAR);			inserir_GPGSV(&GPGSV_VAR,n_par,&parameter[0]);		}else 		inserir_GPGSV(&GPGSV_VAR,n_par,&parameter[0]);	}else if(strcmp("GPRMC",command)==0){			//printf("\nRecommended Minimum Specific GPS/TRANSIT Data (RMC)");		inserir_GPRMC(GPRMC_VAR,n_par,&parameter[0]);	}else if(strcmp("GPVTG",command)==0){		printf("\nTrack Made Good and Ground Speed (VTG)");		inserir_GPVTG(GPVTG_VAR,n_par,&parameter[0]);	}else if(strcmp("GPGLL",command)==0){		//printf("\nGeographic Position (GLL)");		inserir_GPGLL(GPGLL_VAR,n_par,&parameter[0]);	}else if(strcmp("PGRME",command)==0){		//printf("\nEstimated Error Information (PGRME)");		inserir_PGRME(PGRME_VAR,n_par,&parameter[0]);	}else if(strcmp("PGRMF",command)==0){		printf("\nGPS Fix Data Sentence (PGRMF)");		inserir_PGRMF(PGRMF_VAR,n_par,&parameter[0]);	}else if(strcmp("PGRMT",command)==0){		//printf("\nSensor Status Information (PGRMT)");		inserir_PGRMT(PGRMT_VAR,n_par,&parameter[0]);	}else if(strcmp("PGRMV",command)==0){		//printf("\n3D Velocity Information (PGRMV)");		inserir_PGRMV(PGRMV_VAR,n_par,&parameter[0]);	}else if(strcmp("PGRMB",command)==0){		//printf("\nDGPS Beacon Information (PGRMB)");		inserir_PGRMB(PGRMB_VAR,n_par,&parameter[0]);	}else if(strcmp("PGRMI",command)==0){		//printf("\nSensor Initialization Information (PGRMI)");		inserir_PGRMI(PGRMI_VAR,n_par,&parameter[0]);	}else if(strcmp("PGRMC",command)==0){		//printf("\nSensor Configuration Information (PGRMC)");		inserir_PGRMC(PGRMC_VAR,n_par,&parameter[0]);	}else if(strcmp("PGRMC1",command)==0){		//printf("\nAdditional Sensor Configuration Information (PGRMC1)");		inserir_PGRMC1(PGRMC1_VAR,n_par,&parameter[0]);	}else if(strcmp("PGRMO",command)==0){		//printf("\nOutput Sentence Enable/Disable (PGRMO)");		inserir_PGRMO(PGRMO_VAR,n_par,&parameter[0]);	}else {		printf("\nERROR\n%s ---> Sentence don't exist in memory",message);			}						return 0;}void inic_GPALM(GPALM *fila){	*fila=NULL;}void inic_GPGSV(GPGSV *fila){	*fila=NULL;}/*void carrega_GPALM(int argc,char *argv[],GPALM *fila){		if(strcmp(argv[1],"1")==0)	{		//indica a chegada de uma nova mensagem logo apaga a informação ja existente		inic(fila);		inserir_GPALM(fila,argc,&argv[0]);	}	else 		inserir_GPALM(fila,argc,&argv[0]);				}*/void inserir_GPALM(GPALM *fila, int argc,char *argv[]){	if(*fila==NULL)	{		*fila=(GPALM) malloc(sizeof(GPALM_TYP));		if (*fila==NULL) return;		strcpy((*fila)->n_1,argv[0]);		strcpy((*fila)->n_2,argv[1]);		strcpy((*fila)->n_3,argv[2]);		strcpy((*fila)->n_4,argv[3]);		strcpy((*fila)->n_5,argv[4]);		strcpy((*fila)->n_6,argv[5]);		strcpy((*fila)->n_7,argv[6]);		strcpy((*fila)->n_8,argv[7]);		strcpy((*fila)->n_9,argv[8]);		strcpy((*fila)->n_10,argv[9]);		strcpy((*fila)->n_11,argv[10]);		strcpy((*fila)->n_12,argv[11]);		strcpy((*fila)->n_13,argv[12]);		strcpy((*fila)->n_14,argv[13]);		strcpy((*fila)->n_15,argv[14]);				int fd = open("./GPALM", O_CREAT | O_APPEND | O_WRONLY , S_IRUSR | S_IWUSR );		if (fd < 0){			printf("open error: %s\n", strerror(errno));			_exit(0);		}		int bytes_written = write(fd,(*fila), sizeof(GPALM_TYP));		if (bytes_written < 0){			printf("\nwrite error: %s\n", strerror(errno));			_exit(0);			}				close(fd);				(**fila).prox=NULL;	}else	{		inserir_GPALM(&(**fila).prox,argc, &argv[0]);	}		} void inserir_GPGSV(GPGSV *fila, int argc,char *argv[]){	if(*fila==NULL)	{		*fila=(GPGSV) malloc(sizeof(GPGSV_TYP));		if (*fila==NULL) return;		strcpy((*fila)->n_1,argv[0]);		strcpy((*fila)->n_2,argv[1]);		strcpy((*fila)->n_3,argv[2]);		strcpy((*fila)->n_4,argv[3]);		strcpy((*fila)->n_5,argv[4]);		strcpy((*fila)->n_6,argv[5]);		strcpy((*fila)->n_7,argv[6]);				int fd = open("./GPGSV", O_CREAT | O_APPEND | O_WRONLY , S_IRUSR | S_IWUSR );		if (fd < 0){			printf("open error: %s\n", strerror(errno));			_exit(0);		}		int bytes_written = write(fd,(*fila), sizeof(GPGSV_TYP));		if (bytes_written < 0){			printf("\nwrite error: %s\n", strerror(errno));			_exit(0);			}				close(fd);					}else	{		inserir_GPGSV(&(**fila).prox,argc, &argv[0]);	}			} void listar_GPALM(GPALM fila){	if(fila==NULL) return;		printf("\nnumero de setenças: %s\nsetenca actual: %s",fila->n_1,fila->n_2);	listar_GPALM(fila->prox);}void listar_GPGSV(GPGSV fila){	if(fila==NULL) return;		printf("\nnumero de setenças: %s\nsetenca actual: %s",fila->n_1,fila->n_2);	listar_GPGSV(fila->prox);}void inserir_PGRMI(PGRMI estrutura, int argc,char *argv[]){	strcpy(estrutura.n_1,argv[0]);	strcpy(estrutura.n_2,argv[1]);	strcpy(estrutura.n_3,argv[2]);	strcpy(estrutura.n_4,argv[3]);	strcpy(estrutura.n_5,argv[4]);	strcpy(estrutura.n_6,argv[5]);	strcpy(estrutura.n_7,argv[6]);		int fd = open("./PGRMI", O_CREAT | O_APPEND | O_WRONLY , S_IRUSR | S_IWUSR );	if (fd < 0){		printf("open error: %s\n", strerror(errno));		_exit(0);	}	int bytes_written = write(fd,&estrutura, sizeof(PGRMI));	if (bytes_written < 0){		printf("\nwrite error: %s\n", strerror(errno));		_exit(0);		}		close(fd);		}void inserir_PGRMC(PGRMC estrutura, int argc,char *argv[]){		strcpy(estrutura.n_1,argv[0]);	strcpy(estrutura.n_2,argv[1]);	strcpy(estrutura.n_3,argv[2]);	strcpy(estrutura.n_4,argv[3]);	strcpy(estrutura.n_5,argv[4]);	strcpy(estrutura.n_6,argv[5]);	strcpy(estrutura.n_7,argv[6]);	strcpy(estrutura.n_8,argv[7]);	strcpy(estrutura.n_9,argv[8]);	strcpy(estrutura.n_10,argv[9]);	strcpy(estrutura.n_11,argv[10]);	strcpy(estrutura.n_12,argv[11]);	strcpy(estrutura.n_13,argv[12]);	strcpy(estrutura.n_14,argv[13]);		int fd = open("./PGRMC", O_CREAT | O_APPEND | O_WRONLY , S_IRUSR | S_IWUSR );	if (fd < 0){		printf("open error: %s\n", strerror(errno));		_exit(0);	}	int bytes_written = write(fd,&estrutura, sizeof(PGRMC));	if (bytes_written < 0){		printf("\nwrite error: %s\n", strerror(errno));		_exit(0);		}		close(fd);		}void inserir_PGRMC1(PGRMC1 estrutura, int argc,char *argv[]){	strcpy(estrutura.n_1,argv[0]);	strcpy(estrutura.n_2,argv[1]);	strcpy(estrutura.n_3,argv[2]);	strcpy(estrutura.n_4,argv[3]);	strcpy(estrutura.n_5,argv[4]);	strcpy(estrutura.n_6,argv[5]);	strcpy(estrutura.n_7,argv[6]);	strcpy(estrutura.n_8,argv[7]);	strcpy(estrutura.n_9,argv[8]);	strcpy(estrutura.n_10,argv[9]);	strcpy(estrutura.n_11,argv[10]);	strcpy(estrutura.n_12,argv[11]);	strcpy(estrutura.n_13,argv[12]);		int fd = open("./PGRMC1", O_CREAT | O_APPEND | O_WRONLY , S_IRUSR | S_IWUSR );	if (fd < 0){

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -