Changeset 366 in ntrip for trunk/BNC/RTCM3
- Timestamp:
- Jan 17, 2007, 4:17:20 PM (18 years ago)
- Location:
- trunk/BNC/RTCM3
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified trunk/BNC/RTCM3/RTCM3Decoder.cpp ¶
r341 r366 90 90 if (rr == 2) { 91 91 std::cerr << "No valid RINEX! All values are modulo 299792.458!\n"; 92 92 // exit(1); 93 93 } 94 94 … … 107 107 108 108 for (int jj = 0; jj < _Parser.numdatatypes; jj++) { 109 110 if ( !(_Parser.Data.dataflags[ii] & _Parser.dataflag[jj]) 111 || isnan(_Parser.Data.measdata[ii][_Parser.datapos[jj]]) 112 || isinf(_Parser.Data.measdata[ii][_Parser.datapos[jj]]) ) { 113 continue; 109 int v = 0; 110 int df = _Parser.dataflag[jj]; 111 int pos = _Parser.datapos[jj]; 112 if ( (_Parser.Data.dataflags[ii] & df) 113 && !isnan(_Parser.Data.measdata[ii][pos]) 114 && !isinf(_Parser.Data.measdata[ii][pos])) { 115 v = 1; 114 116 } 115 117 else { 118 df = _Parser.dataflag2[jj]; 119 pos = _Parser.datapos2[jj]; 120 if ( (_Parser.Data.dataflags[ii] & df) 121 && !isnan(_Parser.Data.measdata[ii][pos]) 122 && !isinf(_Parser.Data.measdata[ii][pos])) { 123 v = 1; 124 } 125 } 126 if(!v) 127 { continue; } 128 else 129 { 116 130 if (_Parser.dataflag[jj] & GNSSDF_C1DATA) { 117 131 obs->C1 = _Parser.Data.measdata[ii][_Parser.datapos[jj]]; 132 } 133 else if (_Parser.dataflag[jj] & GNSSDF_C2DATA) { 134 obs->C2 = _Parser.Data.measdata[ii][_Parser.datapos[jj]]; 118 135 } 119 136 else if (_Parser.dataflag[jj] & GNSSDF_P1DATA) { … … 123 140 obs->P2 = _Parser.Data.measdata[ii][_Parser.datapos[jj]]; 124 141 } 125 else if ( _Parser.dataflag[jj]& (GNSSDF_L1CDATA|GNSSDF_L1PDATA)) {126 obs->L1 = _Parser.Data.measdata[ii][ _Parser.datapos[jj]];142 else if (df & (GNSSDF_L1CDATA|GNSSDF_L1PDATA)) { 143 obs->L1 = _Parser.Data.measdata[ii][pos]; 127 144 obs->SNR1 = _Parser.Data.snrL1[ii]; 128 145 } 129 else if ( _Parser.dataflag[jj]& (GNSSDF_L2CDATA|GNSSDF_L2PDATA)) {130 obs->L2 = _Parser.Data.measdata[ii][ _Parser.datapos[jj]];146 else if (df & (GNSSDF_L2CDATA|GNSSDF_L2PDATA)) { 147 obs->L2 = _Parser.Data.measdata[ii][pos]; 131 148 obs->SNR2 = _Parser.Data.snrL2[ii]; 132 149 } 150 } 133 151 } 134 152 _obsList.push_back(obs); -
TabularUnified trunk/BNC/RTCM3/rtcm3torinex.cpp ¶
r327 r366 1 1 /* 2 2 Converter for RTCM3 data to RINEX. 3 $Id: rtcm3torinex.c,v 1.1 1 2006/11/21 08:27:35stoecker Exp $3 $Id: rtcm3torinex.c,v 1.16 2007/01/11 15:32:26 stoecker Exp $ 4 4 Copyright (C) 2005-2006 by Dirk Stoecker <stoecker@euronik.eu> 5 5 … … 51 51 52 52 /* CVS revision and version */ 53 static char revisionstr[] = "$Revision: 1.1 1$";53 static char revisionstr[] = "$Revision: 1.16 $"; 54 54 55 55 static uint32_t CRC24(long size, const unsigned char *buf) … … 332 332 gnss->dataflags[num] |= s; 333 333 gnss->measdata[num][se] = i*0.25; 334 i /= 4* 4;334 i /= 4*6; 335 335 if(i > 9) i = 9; 336 336 else if(i < 1) i = 1; … … 380 380 gnss->dataflags[num] |= s; 381 381 gnss->measdata[num][se] = i*0.25; 382 i /= 4* 4;382 i /= 4*6; 383 383 if(i > 9) i = 9; 384 384 else if(i < 1) i = 1; … … 495 495 gnss->dataflags[num] |= s; 496 496 gnss->measdata[num][se] = i*0.25; 497 i /= 4* 4;497 i /= 4*6; 498 498 if(i > 9) i = 9; 499 499 else if(i < 1) i = 1; … … 543 543 gnss->dataflags[num] |= s; 544 544 gnss->measdata[num][se] = i*0.25; 545 i /= 4* 4;545 i /= 4*6; 546 546 if(i > 9) i = 9; 547 547 else if(i < 1) i = 1; … … 654 654 } 655 655 656 #define NUMSTARTSKIP 3 656 #define NUMSTARTSKIP 1 657 658 //////////////////////////////////////////////////////////////////// 659 // Aenderung Perlt - kein check auf vorhandene Daten 660 // Abgefragt werden : C1 C2 L1 L2 P1 P2 S1 S2 661 657 662 void HandleHeader(struct RTCM3ParserData *Parser) 658 663 { 659 struct HeaderData hdata;660 char thebuffer[MAXHEADERBUFFERSIZE];661 char *buffer = thebuffer;662 size_t buffersize = sizeof(thebuffer);663 664 int i; 664 665 hdata.data.named.version =666 " 2.11 OBSERVATION DATA M (Mixed)"667 " RINEX VERSION / TYPE";668 669 {670 const char *str;671 time_t t;672 struct tm * t2;673 674 #ifdef NO_RTCM3_MAIN675 if(revisionstr[0] == '$')676 {677 char *a;678 int i=0;679 for(a = revisionstr+11; *a && *a != ' '; ++a)680 revisionstr[i++] = *a;681 revisionstr[i] = 0;682 }683 #endif684 685 str = getenv("USER");686 if(!str) str = "";687 t = time(&t);688 t2 = gmtime(&t);689 hdata.data.named.pgm = buffer;690 i = 1+snprintf(buffer, buffersize,691 "RTCM3TORINEX %-7.7s%-20.20s%04d-%02d-%02d %02d:%02d "692 "PGM / RUN BY / DATE",693 revisionstr, str, 1900+t2->tm_year, t2->tm_mon+1, t2->tm_mday, t2->tm_hour,694 t2->tm_min);695 buffer += i; buffersize -= i;696 697 hdata.data.named.observer = buffer;698 i = 1+snprintf(buffer, buffersize,699 "%-20.20s "700 "OBSERVER / AGENCY", str);701 buffer += i; buffersize -= i;702 }703 704 hdata.data.named.marker =705 "RTCM3TORINEX "706 "MARKER NAME";707 708 hdata.data.named.receiver =709 " "710 "REC # / TYPE / VERS";711 712 hdata.data.named.antenna =713 " "714 "ANT # / TYPE";715 716 hdata.data.named.position =717 " .0000 .0000 .0000 "718 "APPROX POSITION XYZ";719 720 hdata.data.named.antennaposition =721 " .0000 .0000 .0000 "722 "ANTENNA: DELTA H/E/N";723 724 hdata.data.named.wavelength =725 " 1 1 "726 "WAVELENGTH FACT L1/2";727 728 {729 #define CHECKFLAGS(a, b) \730 if(flags & GNSSDF_##a##DATA \731 && !data[RINEXENTRY_##b##DATA]) \732 { \733 Parser->dataflag[Parser->numdatatypes] = GNSSDF_##a##DATA; \734 Parser->datapos[Parser->numdatatypes++] = data[RINEXENTRY_##b##DATA] \735 = GNSSENTRY_##a##DATA; \736 snprintf(tbuffer+tbufferpos, sizeof(tbuffer)-tbufferpos, " "#b); \737 tbufferpos += 6; \738 }739 740 665 int flags = Parser->startflags; 741 666 int data[RINEXENTRY_NUMBER]; 742 char tbuffer[6*RINEXENTRY_NUMBER+1];743 int tbufferpos = 0;744 667 for(i = 0; i < RINEXENTRY_NUMBER; ++i) 745 668 data[i] = 0; … … 747 670 flags |= Parser->Data.dataflags[i]; 748 671 749 CHECKFLAGS(C1,C1) 750 CHECKFLAGS(C2,C2) 751 CHECKFLAGS(P1,P1) 752 CHECKFLAGS(P2,P2) 753 CHECKFLAGS(L1C,L1) 754 CHECKFLAGS(L1P,L1) 755 CHECKFLAGS(L2C,L2) 756 CHECKFLAGS(L2P,L2) 757 CHECKFLAGS(D1C,D1) 758 CHECKFLAGS(D1P,D1) 759 CHECKFLAGS(D2C,D2) 760 CHECKFLAGS(D2P,D2) 761 CHECKFLAGS(S1C,S1) 762 CHECKFLAGS(S1P,S1) 763 CHECKFLAGS(S2C,S2) 764 CHECKFLAGS(S2P,S2) 765 766 hdata.data.named.typesofobs = buffer; 767 i = 1+snprintf(buffer, buffersize, 768 "%6i%-54.54s# / TYPES OF OBSERV", Parser->numdatatypes, tbuffer); 769 if(Parser->numdatatypes>9) 770 { 771 i += snprintf(buffer+i-1, buffersize, 772 "\n %-54.54s# / TYPES OF OBSERV", tbuffer+9*6); 773 } 774 buffer += i; buffersize -= i; 775 } 776 777 { 778 struct converttimeinfo cti; 779 converttime(&cti, Parser->Data.week, 780 (int)floor(Parser->Data.timeofweek/1000.0)); 781 hdata.data.named.timeoffirstobs = buffer; 782 i = 1+snprintf(buffer, buffersize, 783 " %4d %2d %2d %2d %2d %10.7f GPS " 784 "TIME OF FIRST OBS", cti.year%100, cti.month, cti.day, cti.hour, 785 cti.minute, cti.second + fmod(Parser->Data.timeofweek/1000.0,1.0)); 786 787 buffer += i; buffersize -= i; 788 } 789 790 hdata.numheaders = 11; 791 792 if(Parser->headerfile) 793 { 794 FILE *fh; 795 if((fh = fopen(Parser->headerfile, "r"))) 796 { 797 size_t siz; 798 char *lastblockstart; 799 if((siz = fread(buffer, 1, buffersize-1, fh)) > 0) 800 { 801 buffer[siz] = '\n'; 802 if(siz == buffersize) 803 { 804 RTCM3Error("Header file is too large. Only %d bytes read.", 805 siz); 806 } 807 /* scan the file line by line and enter the entries in the list */ 808 /* warn for "# / TYPES OF OBSERV" and "TIME OF FIRST OBS" */ 809 /* overwrites entries, except for comments */ 810 lastblockstart = buffer; 811 for(i = 0; i < (int)siz; ++i) 812 { 813 if(buffer[i] == '\n') 814 { /* we found a line */ 815 char *end; 816 while(buffer[i+1] == '\r') 817 ++i; /* skip \r in case there are any */ 818 end = buffer+i; 819 while(*end == '\t' || *end == ' ' || *end == '\r' || *end == '\n') 820 *(end--) = 0; 821 if(end-lastblockstart < 60+5) /* short line */ 822 RTCM3Error("Short Header line '%s' ignored.\n", lastblockstart); 823 else 824 { 825 int pos; 826 if(!strcmp("COMMENT", lastblockstart+60)) 827 pos = hdata.numheaders; 828 else 829 { 830 for(pos = 0; pos < hdata.numheaders; ++pos) 831 { 832 if(!strcmp(hdata.data.unnamed[pos]+60, lastblockstart+60)) 833 break; 834 } 835 if(!strcmp("# / TYPES OF OBSERV", lastblockstart+60) 836 || !strcmp("TIME OF FIRST OBS", lastblockstart+60)) 837 { 838 RTCM3Error("Overwriting header '%s' is dangerous.\n", 839 lastblockstart+60); 840 } 841 } 842 if(pos >= MAXHEADERLINES) 843 { 844 RTCM3Error("Maximum number of header lines of %d reached.\n", 845 MAXHEADERLINES); 846 } 847 else if(!strcmp("END OF HEADER", lastblockstart+60)) 848 { 849 RTCM3Error("End of header ignored.\n"); 850 } 851 else 852 { 853 hdata.data.unnamed[pos] = lastblockstart; 854 if(pos == hdata.numheaders) 855 ++hdata.numheaders; 856 } 857 } 858 lastblockstart = buffer+i+1; 859 } 860 } 861 } 862 else 863 { 864 RTCM3Error("Could not read data from headerfile '%s'.\n", 865 Parser->headerfile); 866 } 867 fclose(fh); 868 } 869 else 870 { 871 RTCM3Error("Could not open header datafile '%s'.\n", 872 Parser->headerfile); 873 } 874 } 875 876 #ifndef NO_RTCM3_MAIN 877 for(i = 0; i < hdata.numheaders; ++i) 878 RTCM3Text("%s\n", hdata.data.unnamed[i]); 879 RTCM3Text(" " 880 "END OF HEADER\n"); 881 #endif 882 } 672 Parser->dataflag[Parser->numdatatypes] = GNSSDF_C1DATA; 673 Parser->datapos[Parser->numdatatypes] = GNSSENTRY_C1DATA; 674 data[RINEXENTRY_C1DATA] = ++Parser->numdatatypes; 675 676 Parser->dataflag[Parser->numdatatypes] = GNSSDF_C2DATA; 677 Parser->datapos[Parser->numdatatypes] = GNSSENTRY_C2DATA; 678 data[RINEXENTRY_C2DATA] = ++Parser->numdatatypes; 679 680 Parser->dataflag[Parser->numdatatypes] = GNSSDF_P1DATA; 681 Parser->datapos[Parser->numdatatypes] = GNSSENTRY_P1DATA; 682 data[RINEXENTRY_P1DATA] = ++Parser->numdatatypes; 683 684 Parser->dataflag[Parser->numdatatypes] = GNSSDF_P2DATA; 685 Parser->datapos[Parser->numdatatypes] = GNSSENTRY_P2DATA; 686 data[RINEXENTRY_P2DATA] = ++Parser->numdatatypes; 687 688 Parser->dataflag[Parser->numdatatypes] = GNSSDF_L1CDATA; 689 Parser->datapos[Parser->numdatatypes] = GNSSENTRY_L1CDATA; 690 data[RINEXENTRY_L1DATA] = ++Parser->numdatatypes; 691 Parser->dataflag2[data[RINEXENTRY_L1DATA]-1] = GNSSDF_L1PDATA; 692 Parser->datapos2[data[RINEXENTRY_L1DATA]-1] = GNSSENTRY_L1PDATA; 693 694 Parser->dataflag[Parser->numdatatypes] = GNSSDF_L2CDATA; 695 Parser->datapos[Parser->numdatatypes] = GNSSENTRY_L2CDATA; 696 data[RINEXENTRY_L2DATA] = ++Parser->numdatatypes; 697 Parser->dataflag2[data[RINEXENTRY_L2DATA]-1] = GNSSDF_L2PDATA; 698 Parser->datapos2[data[RINEXENTRY_L2DATA]-1] = GNSSENTRY_L2PDATA; 699 700 Parser->dataflag[Parser->numdatatypes] = GNSSDF_S1CDATA; 701 Parser->datapos[Parser->numdatatypes] = GNSSENTRY_S1CDATA; 702 data[RINEXENTRY_S1DATA] = ++Parser->numdatatypes; 703 Parser->dataflag2[data[RINEXENTRY_S1DATA]-1] = GNSSDF_S1PDATA; 704 Parser->datapos2[data[RINEXENTRY_S1DATA]-1] = GNSSENTRY_S1PDATA; 705 706 Parser->dataflag[Parser->numdatatypes] = GNSSDF_S2CDATA; 707 Parser->datapos[Parser->numdatatypes] = GNSSENTRY_S2CDATA; 708 data[RINEXENTRY_S2DATA] = ++Parser->numdatatypes; 709 Parser->dataflag2[data[RINEXENTRY_S2DATA]-1] = GNSSDF_S2PDATA; 710 Parser->datapos2[data[RINEXENTRY_S2DATA]-1] = GNSSENTRY_S2PDATA; 711 712 Parser->dataflag[Parser->numdatatypes] = GNSSDF_D1CDATA; 713 Parser->datapos[Parser->numdatatypes] = GNSSENTRY_D1CDATA; 714 data[RINEXENTRY_D1DATA] = ++Parser->numdatatypes; 715 Parser->dataflag2[data[RINEXENTRY_D1DATA]-1] = GNSSDF_D1PDATA; 716 Parser->datapos2[data[RINEXENTRY_D1DATA]-1] = GNSSENTRY_D1PDATA; 717 718 Parser->dataflag[Parser->numdatatypes] = GNSSDF_D2CDATA; 719 Parser->datapos[Parser->numdatatypes] = GNSSENTRY_D2CDATA; 720 data[RINEXENTRY_D2DATA] = ++Parser->numdatatypes; 721 Parser->dataflag2[data[RINEXENTRY_D2DATA]-1] = GNSSDF_D2PDATA; 722 Parser->datapos2[data[RINEXENTRY_D2DATA]-1] = GNSSENTRY_D2PDATA; 723 } 724 // Ende Aenderung Perlt - kein check auf vorhandene Daten 725 883 726 884 727 void HandleByte(struct RTCM3ParserData *Parser, unsigned int byte) … … 955 798 for(j = 0; j < Parser->numdatatypes; ++j) 956 799 { 957 if(!(Parser->Data.dataflags[i] & Parser->dataflag[j]) 958 || isnan(Parser->Data.measdata[i][Parser->datapos[j]]) 959 || isinf(Parser->Data.measdata[i][Parser->datapos[j]])) 800 int v = 0; 801 int df = Parser->dataflag[j]; 802 int pos = Parser->datapos[j]; 803 if((Parser->Data.dataflags[i] & df) 804 && !isnan(Parser->Data.measdata[i][pos]) 805 && !isinf(Parser->Data.measdata[i][pos])) 806 { 807 v = 1; 808 } 809 else 810 { 811 df = Parser->dataflag2[j]; 812 pos = Parser->datapos2[j]; 813 814 if((Parser->Data.dataflags[i] & df) 815 && !isnan(Parser->Data.measdata[i][pos]) 816 && !isinf(Parser->Data.measdata[i][pos])) 817 { 818 v = 1; 819 } 820 } 821 822 if(!v) 960 823 { /* no or illegal data */ 961 824 RTCM3Text(" "); … … 965 828 char lli = ' '; 966 829 char snr = ' '; 967 if( Parser->dataflag[j]& (GNSSDF_L1CDATA|GNSSDF_L1PDATA))830 if(df & (GNSSDF_L1CDATA|GNSSDF_L1PDATA)) 968 831 { 969 832 if(Parser->Data.dataflags[i] & GNSSDF_LOCKLOSSL1) … … 971 834 snr = '0'+Parser->Data.snrL1[i]; 972 835 } 973 if( Parser->dataflag[j]& (GNSSDF_L2CDATA|GNSSDF_L2PDATA))836 if(df & (GNSSDF_L2CDATA|GNSSDF_L2PDATA)) 974 837 { 975 838 if(Parser->Data.dataflags[i] & GNSSDF_LOCKLOSSL2) … … 978 841 } 979 842 RTCM3Text("%14.3f%c%c", 980 Parser->Data.measdata[i][ Parser->datapos[j]],lli,snr);843 Parser->Data.measdata[i][pos],lli,snr); 981 844 } 982 845 if(j%5 == 4 || j == Parser->numdatatypes-1) … … 989 852 990 853 #ifndef NO_RTCM3_MAIN 991 static char datestr[] = "$Date: 200 6/11/21 08:27:35$";854 static char datestr[] = "$Date: 2007/01/11 15:32:26 $"; 992 855 993 856 /* The string, which is send as agent in HTTP request */ … … 1286 1149 if(!(he=gethostbyname(args.server))) 1287 1150 { 1288 perror("gethostbyname");1151 RTCM3Error("Function gethostbyname: %s\n", strerror(errno)); 1289 1152 exit(1); 1290 1153 } 1291 1154 if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) 1292 1155 { 1293 perror("socket");1156 RTCM3Error("Function socket: %s\n", strerror(errno)); 1294 1157 exit(1); 1295 1158 } … … 1301 1164 sizeof(struct sockaddr)) == -1) 1302 1165 { 1303 perror("connect");1166 RTCM3Error("Function connect: %s\n", strerror(errno)); 1304 1167 exit(1); 1305 1168 } … … 1339 1202 exit(1); 1340 1203 } 1341 snprintf(buf+i, 5, "\r\n\r\n"); 1342 i += 5; 1204 buf[i++] = '\r'; 1205 buf[i++] = '\n'; 1206 buf[i++] = '\r'; 1207 buf[i++] = '\n'; 1343 1208 } 1344 1209 if(send(sockfd, buf, (size_t)i, 0) != i) 1345 1210 { 1346 perror("send");1211 RTCM3Error("Function send: %s\n", strerror(errno)); 1347 1212 exit(1); 1348 1213 } -
TabularUnified trunk/BNC/RTCM3/rtcm3torinex.h ¶
r320 r366 1 1 #ifndef RTCM3TORINEX_H 2 #define RTCM3TORINE S_H2 #define RTCM3TORINEX_H 3 3 4 4 /* 5 5 Converter for RTCM3 data to RINEX. 6 $Id: rtcm3torinex.h,v 1. 3 2006/11/15 12:31:31stoecker Exp $6 $Id: rtcm3torinex.h,v 1.5 2007/01/11 14:10:13 stoecker Exp $ 7 7 Copyright (C) 2005-2006 by Dirk Stoecker <stoecker@euronik.eu> 8 8 … … 94 94 #define GLO_WAVELENGTH_L2(a) (LIGHTSPEED / GLO_FREQU_L2(a)) /* m */ 95 95 96 /* unimportant, only for approx. time needed */97 #define LEAPSECONDS 1498 99 96 /* Additional flags for the data field, which tell us more. */ 100 97 #define GNSSDF_LOCKLOSSL1 (1<<29) /* lost lock on L1 */ 101 98 #define GNSSDF_LOCKLOSSL2 (1<<30) /* lost lock on L2 */ 99 100 #define LEAPSECONDS 14 /* only needed for approx. time */ 102 101 103 102 struct gnssdata { … … 127 126 int datapos[RINEXENTRY_NUMBER]; 128 127 int dataflag[RINEXENTRY_NUMBER]; 128 int datapos2[RINEXENTRY_NUMBER]; 129 int dataflag2[RINEXENTRY_NUMBER]; 129 130 int numdatatypes; 130 131 int validwarning;
Note:
See TracChangeset
for help on using the changeset viewer.