Changeset 1218 in ntrip
- Timestamp:
- Nov 19, 2008, 2:56:05 PM (16 years ago)
- Location:
- trunk/BNC
- Files:
-
- 16 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/BNC/RTCM/GPSDecoder.h
r1184 r1218 27 27 28 28 #include <iostream> 29 #include <vector> 30 #include <string> 29 31 #include <QPointer> 30 32 #include <QList> … … 121 123 class GPSDecoder { 122 124 public: 123 virtual t_irc Decode(char* buffer, int bufLen ) = 0;125 virtual t_irc Decode(char* buffer, int bufLen, std::vector<std::string>& errmsg) = 0; 124 126 125 127 virtual ~GPSDecoder() { -
trunk/BNC/RTCM/RTCM2Decoder.cpp
r1167 r1218 42 42 #include <sstream> 43 43 #include <iomanip> 44 #include <set> 44 45 45 46 #include "../bncutils.h" … … 64 65 65 66 RTCM2Decoder::~RTCM2Decoder() { 66 for (t_ pairMap::iterator ii = _ephPair.begin(); ii != _ephPair.end(); ii++) {67 for (t_listMap::iterator ii = _ephList.begin(); ii != _ephList.end(); ii++) { 67 68 delete ii->second; 68 69 } … … 104 105 105 106 // 106 t_irc RTCM2Decoder::Decode(char* buffer, int bufLen) { 107 t_irc RTCM2Decoder::Decode(char* buffer, int bufLen, vector<string>& errmsg) { 108 109 errmsg.clear(); 107 110 108 111 _buffer.append(buffer, bufLen); … … 165 168 if (_msg2021.valid()) { 166 169 decoded = true; 167 translateCorr2Obs( );170 translateCorr2Obs(errmsg); 168 171 } 169 172 } … … 182 185 183 186 184 void RTCM2Decoder::storeEph(const gpsephemeris& gpseph) {187 bool RTCM2Decoder::storeEph(const gpsephemeris& gpseph, string& storedPRN, vector<int>& IODs) { 185 188 t_ephGPS eph; eph.set(&gpseph); 186 189 187 storeEph(eph);188 } 189 190 191 void RTCM2Decoder::storeEph(const t_ephGPS& gpseph) {190 return storeEph(eph, storedPRN, IODs); 191 } 192 193 194 bool RTCM2Decoder::storeEph(const t_ephGPS& gpseph, string& storedPRN, vector<int>& IODs) { 192 195 t_ephGPS* eph = new t_ephGPS(gpseph); 193 196 194 197 string prn = eph->prn(); 195 198 196 t_ pairMap::iterator ip = _ephPair.find(prn);197 if (ip == _eph Pair.end() ) {198 ip = _eph Pair.insert(pair<string, t_ephPair*>(prn, new t_ephPair)).first;199 } 200 t_eph Pair* pair= ip->second;201 202 if ( !pair->eph || eph->isNewerThan(pair->eph) ) {203 delete pair->oldEph; 204 pair->oldEph = pair->eph;205 pair->eph = eph;206 207 return ;199 t_listMap::iterator ip = _ephList.find(prn); 200 if (ip == _ephList.end() ) { 201 ip = _ephList.insert(pair<string, t_ephList*>(prn, new t_ephList)).first; 202 } 203 t_ephList* ephList = ip->second; 204 205 bool stored = ephList->store(eph); 206 207 if ( stored ) { 208 storedPRN = eph->prn(); 209 ephList->getIODs(IODs); 210 return true; 208 211 } 209 212 210 213 delete eph; 214 215 return false; 211 216 } 212 217 213 218 214 void RTCM2Decoder::translateCorr2Obs( ) {219 void RTCM2Decoder::translateCorr2Obs(vector<string>& errmsg) { 215 220 216 221 if ( !_msg03.validMsg || !_msg2021.valid() ) { … … 248 253 const RTCM2_2021::HiResCorr* corr = icorr->second; 249 254 255 // beg test 256 if ( corr->PRN >= 200 ) { 257 continue; 258 } 259 // end test 260 261 250 262 ostringstream oPRN; oPRN.fill('0'); 251 263 … … 255 267 string PRN(oPRN.str()); 256 268 257 t_pairMap::const_iterator ieph = _ephPair.find(PRN); 258 const t_eph* eph0 = 0; 259 const t_eph* eph1 = 0; 260 261 if ( ieph != _ephPair.end() ) { 262 eph0 = ieph->second->eph; 263 eph1 = ieph->second->oldEph; 264 } 265 266 if ( !eph0 && !eph1 ) { 269 t_listMap::const_iterator ieph = _ephList.find(PRN); 270 271 if ( ieph == _ephList.end() ) { 272 errmsg.push_back("missing eph for " + PRN); 267 273 continue; 268 274 } … … 277 283 p_obs new_obs = 0; 278 284 285 // missing IOD 286 vector<string> missingIOD; 287 vector<string> hasIOD; 279 288 for (unsigned ii = 0; ii < 4; ii++) { 280 289 int IODcorr = 0; … … 312 321 } 313 322 314 eph = 0; 315 if ( eph0 && eph0->IOD() == IODcorr ) 316 eph = eph0; 317 else if ( eph1 && eph1->IOD() == IODcorr ) 318 eph = eph1; 319 if ( eph && corr ) { 323 eph = ieph->second->getEph(IODcorr); 324 325 if ( eph ) { 326 ostringstream msg; 327 msg << obsT << ':' << setw(3) << eph->IOD(); 328 hasIOD.push_back(msg.str()); 329 330 320 331 int GPSWeek_tot; 321 332 double GPSWeeks_tot; … … 372 383 } 373 384 } 385 else if ( IODcorr != 0 ) { 386 ostringstream msg; 387 msg << obsT << ':' << setw(3) << IODcorr; 388 missingIOD.push_back(msg.str()); 389 } 374 390 } // loop over frequencies 375 391 392 // Error report 393 if ( missingIOD.size() ) { 394 ostringstream missingIODstr; 395 396 copy(missingIOD.begin(), missingIOD.end(), ostream_iterator<string>(missingIODstr, " ")); 397 398 errmsg.push_back("missing eph for " + PRN + " , IODs " + missingIODstr.str()); 399 } 400 401 // Store new observation 376 402 if ( new_obs ) { 377 403 _obsList.push_back( new_obs ); 378 } 379 } 380 } 404 405 ///ostringstream hasIODstr; 406 ///copy(hasIOD.begin(), hasIOD.end(), ostream_iterator<string>(hasIODstr, " ")); 407 ///errmsg.push_back("decoded PRN " + PRN + " : " + hasIODstr.str()); 408 } 409 } 410 } -
trunk/BNC/RTCM/RTCM2Decoder.h
r1167 r1218 27 27 28 28 #include <map> 29 #include <vector> 30 #include <list> 29 31 30 32 #include "GPSDecoder.h" … … 39 41 RTCM2Decoder(const std::string& ID); 40 42 virtual ~RTCM2Decoder(); 41 virtual t_irc Decode(char* buffer, int bufLen );43 virtual t_irc Decode(char* buffer, int bufLen, std::vector<std::string>& errmsg); 42 44 43 void storeEph(const gpsephemeris& gpseph);44 void storeEph(const t_ephGPS& gpseph);45 bool storeEph(const gpsephemeris& gpseph, std::string& storedPRN, std::vector<int>& IODs); 46 bool storeEph(const t_ephGPS& gpseph, std::string& storedPRN, std::vector<int>& IODs); 45 47 46 48 t_irc getStaCrd(double& xx, double& yy, double& zz); 47 49 48 t_irc getStaCrd(double& xx, double& yy,double& zz,50 t_irc getStaCrd(double& xx, double& yy, double& zz, 49 51 double& dx1, double& dy1, double& dz1, 50 52 double& dx2, double& dy2, double& dz2); … … 56 58 private: 57 59 58 class t_eph Pair{60 class t_ephList { 59 61 public: 60 t_ephPair() { 61 eph = 0; 62 oldEph = 0; 62 t_ephList() {} 63 64 ~t_ephList() { 65 for (std::list<t_eph*>::iterator ii = _eph.begin(); ii != _eph.end(); ii++) { 66 delete (*ii); 67 } 68 } 69 70 bool store(t_eph* eph) { 71 if ( _eph.size() == 0 ) { 72 _eph.push_back(eph); 73 return true; 74 } 75 76 std::list<t_eph*>::iterator ii = _eph.begin(); 77 while (ii != _eph.end()) { 78 if ( eph->IOD() == (*ii)->IOD() ) { 79 return false; 80 } 81 if ( ! eph->isNewerThan(*ii) ) { 82 break; 83 } 84 ++ii; 85 } 86 87 if ( ii == _eph.begin() && _eph.size() == MAXSIZE) { 88 return false; 89 } 90 91 _eph.insert(ii, eph); 92 93 while ( _eph.size() > MAXSIZE ) { 94 delete _eph.front(); 95 _eph.pop_front(); 96 } 97 98 return true; 63 99 } 64 100 65 ~t_ephPair() { 66 delete eph; 67 delete oldEph; 101 const t_eph* getEph(int IOD) const { 102 for (std::list<t_eph*>::const_iterator ii = _eph.begin(); ii != _eph.end(); ii++) { 103 if ( (*ii)->IOD() == IOD ) { 104 return (*ii); 105 } 106 } 107 return 0; 68 108 } 69 70 t_eph* eph; 71 t_eph* oldEph; 109 110 void getIODs(std::vector<int>& IODs) const { 111 IODs.clear(); 112 for (std::list<t_eph*>::const_iterator ii = _eph.begin(); ii != _eph.end(); ii++) { 113 IODs.push_back((*ii)->IOD()); 114 } 115 } 116 117 static const unsigned MAXSIZE = 3; 118 119 std::list<t_eph*> _eph; 72 120 }; 73 121 74 void translateCorr2Obs( );122 void translateCorr2Obs(std::vector<std::string>& errmsg); 75 123 76 124 std::string _ID; … … 86 134 rtcm2::RTCM2_22 _msg22; 87 135 rtcm2::RTCM2_2021 _msg2021; 88 std::map<std::string, t_eph Pair*> _ephPair;136 std::map<std::string, t_ephList*> _ephList; 89 137 90 typedef std::map<std::string, t_eph Pair*> t_pairMap;138 typedef std::map<std::string, t_ephList*> t_listMap; 91 139 }; 92 140 -
trunk/BNC/RTCM3/RTCM3Decoder.cpp
r1185 r1218 121 121 // 122 122 //////////////////////////////////////////////////////////////////////////// 123 t_irc RTCM3Decoder::Decode(char* buffer, int bufLen) { 123 t_irc RTCM3Decoder::Decode(char* buffer, int bufLen, vector<string>& errmsg) { 124 125 errmsg.clear(); 124 126 125 127 bool decoded = false; … … 128 130 // ----------------------------------------- 129 131 if (_mode == unknown || _mode == corrections) { 130 if ( _coDecoder->Decode(buffer, bufLen ) == success ) {132 if ( _coDecoder->Decode(buffer, bufLen, errmsg) == success ) { 131 133 decoded = true; 132 134 … … 354 356 decoded = true; 355 357 gpsephemeris* ep = new gpsephemeris(_Parser.ephemerisGPS); 358 359 #ifdef DEBUG_RTCM2_2021 360 QString msg = QString("%1: got eph %2 IODC %3 GPSweek %4 TOC %5 TOE %6") 361 .arg(_staID) 362 .arg(ep->satellite, 2) 363 .arg(ep->IODC, 4) 364 .arg(ep->GPSweek, 4) 365 .arg(ep->TOC, 6) 366 .arg(ep->TOE, 6); 367 emit(newMessage(msg.toAscii())); 368 #endif 369 356 370 emit newGPSEph(ep); 357 371 } -
trunk/BNC/RTCM3/RTCM3Decoder.h
r1095 r1218 40 40 RTCM3Decoder(const QString& fileName); 41 41 virtual ~RTCM3Decoder(); 42 virtual t_irc Decode(char* buffer = 0, int bufLen = 0);42 virtual t_irc Decode(char* buffer, int bufLen, std::vector<std::string>& errmsg); 43 43 signals: 44 44 void newMessage(QByteArray msg); -
trunk/BNC/RTCM3/RTCM3coDecoder.cpp
r1154 r1218 109 109 // 110 110 //////////////////////////////////////////////////////////////////////////// 111 t_irc RTCM3coDecoder::Decode(char* buffer, int bufLen) { 111 t_irc RTCM3coDecoder::Decode(char* buffer, int bufLen, vector<string>& errmsg) { 112 113 errmsg.clear(); 112 114 113 115 _buffer.append(buffer, bufLen); -
trunk/BNC/RTCM3/RTCM3coDecoder.h
r974 r1218 42 42 RTCM3coDecoder(const QString& staID); 43 43 virtual ~RTCM3coDecoder(); 44 virtual t_irc Decode(char* buffer = 0, int bufLen = 0);44 virtual t_irc Decode(char* buffer, int bufLen, std::vector<std::string>& errmsg); 45 45 46 46 signals: -
trunk/BNC/RTIGS/RTIGSDecoder.cpp
r661 r1218 69 69 // 70 70 //////////////////////////////////////////////////////////////////////////// 71 t_irc RTIGSDecoder::Decode(char* buffer, int bufLen) { 71 t_irc RTIGSDecoder::Decode(char* buffer, int bufLen, vector<string>& errmsg) { 72 73 errmsg.clear(); 72 74 73 75 // Append the incomming data to the internal buffer -
trunk/BNC/RTIGS/RTIGSDecoder.h
r661 r1218 51 51 RTIGSDecoder(); 52 52 virtual ~RTIGSDecoder(); 53 virtual t_irc Decode(char* buffer = 0, int bufLen = 0);53 virtual t_irc Decode(char* buffer, int bufLen, std::vector<std::string>& errmsg); 54 54 private: 55 55 CGPS_Transform _GPSTrans; -
trunk/BNC/bnc.pro
r1044 r1218 5 5 ###CONFIG += debug 6 6 7 DEFINES += NO_RTCM3_MAIN 7 ##DEFINES += NO_RTCM3_MAIN DEBUG_RTCM2_2021 8 DEFINES += NO_RTCM3_MAIN 8 9 9 10 RESOURCES += bnc.qrc -
trunk/BNC/bncapp.cpp
r1171 r1218 149 149 void bncApp::slotMessage(const QByteArray msg) { 150 150 151 QMutexLocker locker(&_mutex );151 QMutexLocker locker(&_mutexMessage); 152 152 153 153 messagePrivate(msg); … … 198 198 199 199 gpsephemeris** ee = &_gpsEph[gpseph->satellite-1]; 200 200 201 if ( *ee == 0 || 201 202 gpseph->GPSweek > (*ee)->GPSweek || -
trunk/BNC/bncapp.h
r1166 r1218 75 75 QString _bncVersion; 76 76 QMutex _mutex; 77 QMutex _mutexMessage; 77 78 QString _ephPath; 78 79 QString _ephFileNameGPS; -
trunk/BNC/bncgetthread.cpp
r1201 r1218 41 41 #include <stdlib.h> 42 42 #include <iomanip> 43 #include <sstream> 43 44 44 45 #include <QFile> … … 543 544 544 545 if (_inspSegm<1) { 545 _decoder->Decode(data, nBytes); 546 vector<string> errmsg; 547 _decoder->Decode(data, nBytes, errmsg); 548 #ifdef DEBUG_RTCM2_2021 549 for (unsigned ii = 0; ii < errmsg.size(); ii++) { 550 emit newMessage(_staID + ": " + errmsg[ii].c_str()); 551 } 552 #endif 546 553 } 547 554 else { … … 553 560 554 561 if (decode) { 555 if ( _decoder->Decode(data, nBytes) == success ) { 562 vector<string> errmsg; 563 if ( _decoder->Decode(data, nBytes, errmsg) == success ) { 556 564 numSucc += 1; 557 565 } … … 559 567 decode = false; 560 568 } 569 #ifdef DEBUG_RTCM2_2021 570 for (unsigned ii = 0; ii < errmsg.size(); ii++) { 571 emit newMessage(_staID + ": " + errmsg[ii].c_str()); 572 } 573 #endif 561 574 } 562 575 … … 737 750 bool dump = true; 738 751 739 /*// RTCMv2 XYZ740 // ----------741 RTCM2Decoder* decoder2 = dynamic_cast<RTCM2Decoder*>(_decoder);742 if ( decoder2 && !_rnx_set_position ) {752 // RTCMv2 XYZ 753 // ---------- 754 RTCM2Decoder* decoder2 = dynamic_cast<RTCM2Decoder*>(_decoder); 755 if ( decoder2 && !_rnx_set_position ) { 743 756 double stax, stay, staz; 744 757 double dL1[3], dL2[3]; … … 746 759 dL1[0], dL1[1], dL1[2], 747 760 dL2[0], dL2[1], dL2[2]) == success ) { 748 QByteArray msg; 749 QTextStream out(&msg);750 out.setRealNumberNotation(QTextStream::FixedNotation);751 out.setRealNumberPrecision(5);752 //// _rnx->setApproxPos(stax, stay, staz);753 out << "STA " << staID()754 << ' ' << qSetFieldWidth(15) << stax755 << ' ' << qSetFieldWidth(15) << stay756 << ' ' << qSetFieldWidth(15) << staz757 << " L1 " << qSetFieldWidth(10) << dL1[0]758 << ' ' << qSetFieldWidth(10) << dL1[1]759 << ' ' << qSetFieldWidth(10) << dL1[2]760 << " L2 " << qSetFieldWidth(10) << dL2[0]761 << ' ' << qSetFieldWidth(10) << dL2[1]762 << ' ' << qSetFieldWidth(10) << dL2[2] << endl;761 762 ostringstream msg2; msg2.setf(ios::fixed); 763 msg2 << "station coordinates " << staID().data() 764 << ' ' << setw(14) << setprecision(5) << stax 765 << ' ' << setw(14) << setprecision(5) << stay 766 << ' ' << setw(14) << setprecision(5) << staz 767 << " L1 " 768 << ' ' << setw(8) << setprecision(5) << dL1[0] 769 << ' ' << setw(8) << setprecision(5) << dL1[1] 770 << ' ' << setw(8) << setprecision(5) << dL1[2] 771 << " L2 " 772 << ' ' << setw(8) << setprecision(5) << dL2[0] 773 << ' ' << setw(8) << setprecision(5) << dL2[1] 774 << ' ' << setw(8) << setprecision(5) << dL2[2] 775 << ends; 763 776 _rnx_set_position = true; 764 emit newMessage( msg);777 emit newMessage(QByteArray(msg2.str().c_str())); 765 778 } 766 } */ 767 768 ////RTCM2Decoder* decoder2 = dynamic_cast<RTCM2Decoder*>(_decoder); 769 ////if ( decoder2 && !_rnx_set_position ) { 770 //// double stax, stay, staz; 771 //// if ( decoder2->getStaCrd(stax, stay, staz) == success ) { 772 //// _rnx->setApproxPos(stax, stay, staz); 773 //// _rnx_set_position = true; 774 //// } 775 //// else { 776 //// dump = false; 777 //// } 778 ////} 779 779 } 780 780 781 if ( dump ) { 781 782 long iSec = long(floor(obs->_o.GPSWeeks+0.5)); … … 942 943 QMutexLocker locker(&_mutex); 943 944 944 decoder->storeEph(gpseph); 945 } 946 } 947 945 string storedPRN; 946 vector<int> IODs; 947 948 if ( decoder->storeEph(gpseph, storedPRN, IODs) ) { 949 #ifdef DEBUG_RTCM2_2021 950 QString msg = _staID + QString(": stored eph %1 IODs").arg(storedPRN.c_str()); 951 952 for (unsigned ii = 0; ii < IODs.size(); ii++) { 953 msg += QString(" %1").arg(IODs[ii],4); 954 } 955 956 emit(newMessage(msg.toAscii())); 957 #endif 958 } 959 } 960 } 961 -
trunk/BNC/bncwindow.cpp
r1204 r1218 67 67 68 68 connect((bncApp*)qApp, SIGNAL(newMessage(QByteArray)), 69 this, SLOT(slotWindowMessage(QByteArray)));69 this, SLOT(slotWindowMessage(QByteArray))); 70 70 71 71 // Create Actions … … 755 755 void bncWindow::slotWindowMessage(const QByteArray msg) { 756 756 757 #ifdef DEBUG_RTCM2_2021 758 const int maxBufferSize = 1000; 759 #else 757 760 const int maxBufferSize = 10000; 761 #endif 758 762 759 763 QString txt = _log->toPlainText() + "\n" + -
trunk/BNC/bnczerodecoder.cpp
r1154 r1218 82 82 // Decode Method 83 83 //////////////////////////////////////////////////////////////////////// 84 t_irc bncZeroDecoder::Decode(char* buffer, int bufLen) { 84 t_irc bncZeroDecoder::Decode(char* buffer, int bufLen, vector<string>& errmsg) { 85 errmsg.clear(); 85 86 reopen(); 86 87 _out->write(buffer, bufLen); -
trunk/BNC/bnczerodecoder.h
r934 r1218 34 34 bncZeroDecoder(const QString& fileName); 35 35 ~bncZeroDecoder(); 36 virtual t_irc Decode(char* buffer, int bufLen );36 virtual t_irc Decode(char* buffer, int bufLen, std::vector<std::string>& errmsg); 37 37 private: 38 38 void reopen();
Note:
See TracChangeset
for help on using the changeset viewer.