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

📄 garmin_api.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;pos_info position;/*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[50];		int n_par=0;	int i,a;					//if(correct_stc(&message[0]))	//{			a=strlen(string);		for(i=0;i<=a;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;		if(argv[0]!=NULL) strcpy((*fila)->n_1,argv[0]);		if(argv[1]!=NULL) strcpy((*fila)->n_2,argv[1]);		if(argv[2]!=NULL) strcpy((*fila)->n_3,argv[2]);		if(argv[3]!=NULL) strcpy((*fila)->n_4,argv[3]);		if(argv[4]!=NULL) strcpy((*fila)->n_5,argv[4]);		if(argv[5]!=NULL) strcpy((*fila)->n_6,argv[5]);		if(argv[6]!=NULL) strcpy((*fila)->n_7,argv[6]);		if(argv[7]!=NULL) strcpy((*fila)->n_8,argv[7]);		if(argv[8]!=NULL) strcpy((*fila)->n_9,argv[8]);		if(argv[9]!=NULL) strcpy((*fila)->n_10,argv[9]);		if(argv[10]!=NULL) strcpy((*fila)->n_11,argv[10]);		if(argv[11]!=NULL) strcpy((*fila)->n_12,argv[11]);		if(argv[12]!=NULL) strcpy((*fila)->n_13,argv[12]);		if(argv[13]!=NULL) strcpy((*fila)->n_14,argv[13]);		if(argv[14]!=NULL) 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;		if(argv[0]!=NULL) strcpy((*fila)->n_1,argv[0]);		if(argv[1]!=NULL) strcpy((*fila)->n_2,argv[1]);		if(argv[2]!=NULL) strcpy((*fila)->n_3,argv[2]);		if(argv[3]!=NULL) strcpy((*fila)->n_4,argv[3]);		if(argv[4]!=NULL) strcpy((*fila)->n_5,argv[4]);		if(argv[5]!=NULL) strcpy((*fila)->n_6,argv[5]);		if(argv[6]!=NULL) 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[]){	if(argv[0]!=NULL) strcpy(estrutura->n_1,argv[0]);	if(argv[2]!=NULL) strcpy(estrutura->n_2,argv[1]);	if(argv[3]!=NULL) strcpy(estrutura->n_3,argv[2]);	if(argv[4]!=NULL) strcpy(estrutura->n_4,argv[3]);	if(argv[5]!=NULL) strcpy(estrutura->n_5,argv[4]);	if(argv[6]!=NULL) strcpy(estrutura->n_6,argv[5]);	if(argv[7]!=NULL) 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[]){		if(argv[0]!=NULL) strcpy(estrutura->n_1,argv[0]);	if(argv[1]!=NULL) strcpy(estrutura->n_2,argv[1]);	if(argv[2]!=NULL) strcpy(estrutura->n_3,argv[2]);	if(argv[3]!=NULL) strcpy(estrutura->n_4,argv[3]);	if(argv[4]!=NULL) strcpy(estrutura->n_5,argv[4]);	if(argv[5]!=NULL) strcpy(estrutura->n_6,argv[5]);	if(argv[6]!=NULL) strcpy(estrutura->n_7,argv[6]);	if(argv[7]!=NULL) strcpy(estrutura->n_8,argv[7]);	if(argv[8]!=NULL) strcpy(estrutura->n_9,argv[8]);	if(argv[9]!=NULL) strcpy(estrutura->n_10,argv[9]);	if(argv[10]!=NULL) strcpy(estrutura->n_11,argv[10]);	if(argv[11]!=NULL) strcpy(estrutura->n_12,argv[11]);	if(argv[12]!=NULL) strcpy(estrutura->n_13,argv[12]);	if(argv[13]!=NULL) 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[]){	if(argv[0]!=NULL) strcpy(estrutura->n_1,argv[0]);	if(argv[1]!=NULL) strcpy(estrutura->n_2,argv[1]);	if(argv[2]!=NULL) strcpy(estrutura->n_3,argv[2]);	if(argv[3]!=NULL) strcpy(estrutura->n_4,argv[3]);	if(argv[4]!=NULL) strcpy(estrutura->n_5,argv[4]);	if(argv[5]!=NULL) strcpy(estrutura->n_6,argv[5]);	if(argv[6]!=NULL) strcpy(estrutura->n_7,argv[6]);	if(argv[7]!=NULL) strcpy(estrutura->n_8,argv[7]);	if(argv[8]!=NULL) strcpy(estrutura->n_9,argv[8]);	if(argv[9]!=NULL) strcpy(estrutura->n_10,argv[9]);	if(argv[10]!=NULL) strcpy(estrutura->n_11,argv[10]);	if(argv[11]!=NULL) strcpy(estrutura->n_12,argv[11]);	if(argv[12]!=NULL) strcpy(estrutura->n_13,argv[12]);		int fd = open("./PGRMC1", 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(PGRMC1));	if (bytes_written < 0){		printf("\nwrite error: %s\n", strerror(errno));		_exit(0);		}		close(fd);	}void inserir_PGRMO(PGRMO *estrutura, int argc,char *argv[]){	if(argv[0]!=NULL) strcpy(estrutura->n_1,argv[0]);	if(argv[1]!=NULL) strcpy(estrutura->n_2,argv[1]);		int fd = open("./PGRMO", 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(PGRMO));	if (bytes_written < 0){		printf("\nwrite error: %s\n", strerror(errno));		_exit(0);		}		close(fd);	}void inserir_GPGGA(GPGGA *estrutura, int argc,char *argv[]){	if(argv[0]!=NULL) strcpy(estrutura->n_1,argv[0]);	if(argv[1]!=NULL) strcpy(estrutura->n_2,argv[1]);	if(argv[2]!=NULL) strcpy(estrutura->n_3,argv[2]);	if(argv[3]!=NULL) strcpy(estrutura->n_4,argv[3]);	if(argv[4]!=NULL) strcpy(estrutura->n_5,argv[4]);	if(argv[5]!=NULL) strcpy(estrutura->n_6,argv[5]);	if(argv[6]!=NULL) strcpy(estrutura->n_7,argv[6]);

⌨️ 快捷键说明

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