📄 garmin_api_1ver.c
字号:
#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,¶meter[0]); }else inserir_GPALM(&GPALM_VAR,n_par,¶meter[0]); }else if(strcmp("GPGGA",command)==0){ //printf("\nGlobal Positioning System Fix Data (GGA)"); inserir_GPGGA(GPGGA_VAR,n_par,¶meter[0]); }else if(strcmp("GPGSA",command)==0){ //printf("\nGPS DOP and Active Satellites (GSA)"); inserir_GPGSA(GPGSA_VAR,n_par,¶meter[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,¶meter[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,¶meter[0]); }else inserir_GPGSV(&GPGSV_VAR,n_par,¶meter[0]); }else if(strcmp("GPRMC",command)==0){ //printf("\nRecommended Minimum Specific GPS/TRANSIT Data (RMC)"); inserir_GPRMC(GPRMC_VAR,n_par,¶meter[0]); }else if(strcmp("GPVTG",command)==0){ printf("\nTrack Made Good and Ground Speed (VTG)"); inserir_GPVTG(GPVTG_VAR,n_par,¶meter[0]); }else if(strcmp("GPGLL",command)==0){ //printf("\nGeographic Position (GLL)"); inserir_GPGLL(GPGLL_VAR,n_par,¶meter[0]); }else if(strcmp("PGRME",command)==0){ //printf("\nEstimated Error Information (PGRME)"); inserir_PGRME(PGRME_VAR,n_par,¶meter[0]); }else if(strcmp("PGRMF",command)==0){ printf("\nGPS Fix Data Sentence (PGRMF)"); inserir_PGRMF(PGRMF_VAR,n_par,¶meter[0]); }else if(strcmp("PGRMT",command)==0){ //printf("\nSensor Status Information (PGRMT)"); inserir_PGRMT(PGRMT_VAR,n_par,¶meter[0]); }else if(strcmp("PGRMV",command)==0){ //printf("\n3D Velocity Information (PGRMV)"); inserir_PGRMV(PGRMV_VAR,n_par,¶meter[0]); }else if(strcmp("PGRMB",command)==0){ //printf("\nDGPS Beacon Information (PGRMB)"); inserir_PGRMB(PGRMB_VAR,n_par,¶meter[0]); }else if(strcmp("PGRMI",command)==0){ //printf("\nSensor Initialization Information (PGRMI)"); inserir_PGRMI(PGRMI_VAR,n_par,¶meter[0]); }else if(strcmp("PGRMC",command)==0){ //printf("\nSensor Configuration Information (PGRMC)"); inserir_PGRMC(PGRMC_VAR,n_par,¶meter[0]); }else if(strcmp("PGRMC1",command)==0){ //printf("\nAdditional Sensor Configuration Information (PGRMC1)"); inserir_PGRMC1(PGRMC1_VAR,n_par,¶meter[0]); }else if(strcmp("PGRMO",command)==0){ //printf("\nOutput Sentence Enable/Disable (PGRMO)"); inserir_PGRMO(PGRMO_VAR,n_par,¶meter[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 + -