📄 garmin_api.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;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,¶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; 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 + -