📄 main.c
字号:
#include <stdio.h>#include <string.h>#include <sys/types.h>#include <errno.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#include <termios.h>#include <stdlib.h>#include "serial.h"//#define UInt32 unsigned int#define Int16 short#define UInt16 unsigned short#define UInt8 unsigned char#define Boolean int#define false 0#define true 1#define GPS_RECV_CMD_MAX_BUF 256 //the buffer size//the gga info structtypedef struct GGAINFO{ int bIsGPGGA; UInt8 hour, bjhour, min, sec, secFrac; double latitude; UInt8 latNS; double longitude; UInt8 lgtEW; // UInt8 hour, bjhour, min, sec, secFrac; UInt8 satellites; Int16 altitude; // UInt8 altUnit; }GGAINFO;int main(void){ int fd; int i; char buffer[GPS_RECV_CMD_MAX_BUF];//receive buffer char tmp; GGAINFO ggainfo; char Degree[4]; char Minute[8]; char Hour[4]; char Minu[4]; char Second[4]; char Satnum[4]; int no = 0; //open the COM if((fd=open_port(fd,4))<0) { perror("open_port error"); return; } printf("fd=%d\n",fd); //set the COM if((i=set_opt(fd,9600,8,'N',1))<0) { perror("set_opt error"); return; } // while(1) { while(!Is_startGP(fd));// printf("start to receive\n"); //receive the info for(i = 0; i<GPS_RECV_CMD_MAX_BUF;i++) { read(fd,&tmp,1); buffer[i]=tmp;// printf("%c",buffer[i]); if(tmp=='\n')break; }// printf("\n"); //proc the GGA info if(Is_GGA(buffer)) { ggainfo.bIsGPGGA = 1; //Time:6-15 no = 6; for(i = 0;i < 4;i++) Hour[i]=0; Hour[0]=buffer[no]; Hour[1]=buffer[no+1]; no += 2; for(i = 0;i < 4;i++) Minu[i]=0; Minu[0]=buffer[no]; Minu[1]=buffer[no+1]; no += 2; for(i = 0;i < 4;i++) Second[i]=0; Second[0]=buffer[no]; Second[1]=buffer[no+1]; ggainfo.hour = atoi(Hour); ggainfo.min = atoi(Minu); ggainfo.sec = atoi(Second); ggainfo.secFrac = 0; ggainfo.bjhour = ggainfo.hour + 8; if(ggainfo.bjhour > 24) ggainfo.bjhour -= 24; //Latitude:17-25 no = 17; for(i = 0;i < 4;i++) Degree[i]=0; Degree[0]=buffer[no]; Degree[1]=buffer[no+1]; no+=2; for(i=0;i<8;i++) Minute[i]=0; for(i=0;i<7;i++) Minute[i]=buffer[no+i]; // int l=atoi(Degree); ggainfo.latitude=(atof(Minute)) / 60.0 + atoi(Degree); //NS:27 ggainfo.latNS = buffer[27]; //Longitude:29-38 no = 29; for(i=0;i<4;i++) Degree[i]=0; Degree[0]=buffer[no]; Degree[1]=buffer[no+1]; Degree[2]=buffer[no+2]; no+=3; for(i=0;i<8;i++) Minute[i]=0; for(i=0;i<7;i++) Minute[i]=buffer[no+i]; // int B=atoi(Degree); ggainfo.longitude=(atof(Minute)) / 60.0 + atoi(Degree); //WE:40 ggainfo.lgtEW = buffer[40]; //the number of satellite:44-45 no = 44; for(i = 0;i < 4;i++) Satnum[i]=0; Satnum[0]=buffer[no]; Satnum[1]=buffer[no+1]; ggainfo.satellites = atoi(Satnum); printf("UTC Time:%d h %d m %d s\n",ggainfo.hour,ggainfo.min,ggainfo.sec); printf("BJ Time:%d h %d m %d s\n",ggainfo.bjhour,ggainfo.min,ggainfo.sec); printf("Latitude:%c wei %f \n",ggainfo.latNS,ggainfo.latitude); printf("Longitude:%c jing %f \n",ggainfo.lgtEW,ggainfo.longitude); printf("Satellites:%d \n",ggainfo.satellites); printf("\n"); } else continue; sleep(1); } close(fd); return 0;}int Is_startGP(int fp){ int status=0; char cc,tmp; read(fp,&cc,1); tmp=cc; if(tmp=='$')status=1; return status;}int Is_GGA(char p[GPS_RECV_CMD_MAX_BUF]){ int status=0; if(p[2] == 'G' && p[3] == 'G' && p[4] == 'A') status=1; return status;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -