MIN] =5; //处理未接收字符 tcflush(fd,TCIFLUSH); if((tcsetattr(fd,TCSANOW,&new_cfg))!=0) { perror("tcsetattr"); return -1; } return 0; } //打开串口函数 int open_port(int com_port) { int fd; #if (COM_TYPE == GNR_COM) //使用普通串口 char* dev[] = {"/dev/ttyS0","/dev/ttyS1","/dev/ttyS2"}; #else//使用USB转串口 char* dev[] = {"/dev/ttyUSB0","/dev/ttyUSB1","/dev/ttyUSB2"}; #endif if((com_port<0)||(com_port > MAX_COM_NUM)) { return -1; } //打开串口 if((fd=open(dev[com_port-1],O_RDWR|O_NOCTTY|O_NDELAY))<0) { perror("open serial port"); return -1; } //恢复串口为堵塞状态 if(fcntl(fd,F_SETFL,0) <0 ) { perror("fcntl F_SETFL\n"); return -1; } //测试是否为终端设备 if(isatty(STDIN_FILENO)==0) { perror("standard input is not a terminal device"); } return fd; } void print_info(void) { //打印选择界面,即引导的字符号 printf("Now the receive time is %s\n",GPS_DATA.GPS_time); printf("The star is %c 3\n",GPS_DATA.GPS_sv); printf("The earth latitude is :%s\n",GPS_DATA.GPS_wd); printf("The earth longitude is :%s\n",GPS_DATA.GPS_jd); printf("The train speed is:%s km/h\n",GPS_DATA.GPS_speed); printf("The date is:%s\n",GPS_DATA.GPS_date); } void GPS_resolve_GPRMC(char data) { //$GPRMC,092427.604,V,4002.1531,N,11618.3097,E,0.000,0.00,280812,,E,N*08 if(data==',') { ++SectionID; i=0; } else { switch(SectionID) { case 1://02:48:13 GPS_DATA.GPS_time[i++]=data; if(i==2 || i==5) { GPS_DATA.GPS_time[i++]=':'; } GPS_DATA.GPS_time[8]='\0'; break; case 2: if(data=='A') GPS_DATA.GPS_sv='>'; else GPS_DATA.GPS_sv='<'; break; case 3://3158.4608 GPS_DATA.GPS_wd[++i]=data; GPS_DATA.GPS_wd[12]='\0'; break; case 4: if(data=='N') GPS_DATA.GPS_wd[0]='N'; else if(data=='S') GPS_DATA.GPS_wd[0]='S'; break; case 5://11848.3737,E GPS_DATA.GPS_jd[++i]=data; GPS_DATA.GPS_jd[12]='\0'; break; case 6: if(data=='E') GPS_DATA.GPS_jd[0]='E'; else if(data=='W') GPS_DATA.GPS_jd[0]='W'; break; case 7://10.05 GPS_DATA.GPS_speed[i++]=data; GPS_DATA.GPS_speed[4]='\0'; break; case 9://15-07-06 -> 06-07-15 GPS_DATA.GPS_date[i++]=data; |