Changeset 1024 in ntrip
- Timestamp:
- Aug 7, 2008, 4:01:56 PM (17 years ago)
- Location:
- trunk/BNC
- Files:
-
- 4 added
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/BNC/RTCM/GPSDecoder.h
r649 r1024 47 47 double L1; // L1 carrier phase (cycles) 48 48 double L2; // L2 carrier phase (cycles) 49 int slip_cnt_L1; // L1 cumulative loss of continuity indicator 50 int slip_cnt_L2; // L2 cumulative loss of continuity indicator 49 51 double S1; // L1 signal-to noise ratio 50 52 double S2; // L2 signal-to noise ratio -
trunk/BNC/RTCM/RTCM2.cpp
r728 r1024 945 945 cph_L1.resize(0); // Carrier phase [m] 946 946 cph_L2.resize(0); // Carrier phase [m] 947 slip_L1.resize(0); // Slip counter 948 slip_L2.resize(0); // Slip counter 947 949 948 950 availability.reset(); // Message status flags … … 1005 1007 bool isGPS,isCAcode,isL1,isOth; 1006 1008 int NSat,idx; 1007 int sid,prn; 1009 int sid,prn,slip_cnt; 1008 1010 double t,rng,cph; 1009 1011 … … 1117 1119 // Carrier phase measurement (mod 2^23 [cy]; sign matched to range) 1118 1120 cph = -P.getBits(iSat*48+40,32)/256.0; 1121 1122 // Slip counter 1123 slip_cnt = P.getUnsignedBits(iSat*48+35,5); 1119 1124 1120 1125 // Is this a new PRN? … … 1132 1137 cph_L1.push_back(0.0); 1133 1138 cph_L2.push_back(0.0); 1139 slip_L1.push_back(-1); 1140 slip_L2.push_back(-1); 1134 1141 }; 1135 1142 1136 1143 // Store measurement 1137 1144 if (isL1) { 1138 cph_L1[idx] = cph; 1145 cph_L1 [idx] = cph; 1146 slip_L1[idx] = slip_cnt; 1139 1147 } 1140 1148 else { 1141 cph_L2[idx] = cph; 1149 cph_L2 [idx] = cph; 1150 slip_L2[idx] = slip_cnt; 1142 1151 }; 1143 1152 … … 1339 1348 1340 1349 }; // End of namespace rtcm2 1350 1351 1352 -
trunk/BNC/RTCM/RTCM2.h
r725 r1024 309 309 std::vector<double> cph_L1; // Carrier phase on L1 [cy] 310 310 std::vector<double> cph_L2; // Carrier phase on L2 [cy] 311 std::vector<int> slip_L1; // Carrier phase slip counter, L1 312 std::vector<int> slip_L2; // Carrier phase slip counter, L1 311 313 312 314 private: -
trunk/BNC/RTCM/RTCM2Decoder.cpp
r702 r1024 39 39 * -----------------------------------------------------------------------*/ 40 40 41 #include <math.h> 42 #include <sstream> 43 41 44 #include "../bncutils.h" 45 #include "rtcm_utils.h" 42 46 #include "GPSDecoder.h" 43 47 #include "RTCM2Decoder.h" 44 48 45 49 using namespace std; 50 using namespace rtcm2; 46 51 47 52 // … … 49 54 // 50 55 51 RTCM2Decoder::RTCM2Decoder() { 52 56 RTCM2Decoder::RTCM2Decoder(const std::string& ID) { 57 _ID = ID; 53 58 } 54 59 … … 58 63 59 64 RTCM2Decoder::~RTCM2Decoder() { 60 } 61 62 // 63 65 for (t_pairMap::iterator ii = _ephPair.begin(); ii != _ephPair.end(); ii++) { 66 delete ii->second; 67 } 68 } 69 70 71 // 72 t_irc RTCM2Decoder::getStaCrd(double& xx, double& yy, double& zz) { 73 if ( !_msg03.validMsg ) { 74 return failure; 75 } 76 77 xx = _msg03.x + (_msg22.validMsg ? _msg22.dL1[0] : 0.0); 78 yy = _msg03.y + (_msg22.validMsg ? _msg22.dL1[1] : 0.0); 79 zz = _msg03.z + (_msg22.validMsg ? _msg22.dL1[2] : 0.0); 80 81 return success; 82 } 83 84 85 // 64 86 t_irc RTCM2Decoder::Decode(char* buffer, int bufLen) { 65 87 … … 95 117 _obsList.push_back(obs); 96 118 if (_ObsBlock.PRN[iSat] > 100) { 97 obs->_o.satNum = _ObsBlock.PRN[iSat] % 100; 98 obs->_o.satSys = 'R'; 99 } 100 else { 101 obs->_o.satNum = _ObsBlock.PRN[iSat]; 102 obs->_o.satSys = 'G'; 103 } 104 obs->_o.GPSWeek = epochWeek; 105 obs->_o.GPSWeeks = epochSecs; 106 obs->_o.C1 = _ObsBlock.rng_C1[iSat]; 107 obs->_o.P1 = _ObsBlock.rng_P1[iSat]; 108 obs->_o.P2 = _ObsBlock.rng_P2[iSat]; 109 obs->_o.L1 = _ObsBlock.resolvedPhase_L1(iSat); 110 obs->_o.L2 = _ObsBlock.resolvedPhase_L2(iSat); 119 obs->_o.satNum = _ObsBlock.PRN[iSat] % 100; 120 obs->_o.satSys = 'R'; 121 } 122 else { 123 obs->_o.satNum = _ObsBlock.PRN[iSat]; 124 obs->_o.satSys = 'G'; 125 } 126 obs->_o.GPSWeek = epochWeek; 127 obs->_o.GPSWeeks = epochSecs; 128 obs->_o.C1 = _ObsBlock.rng_C1[iSat]; 129 obs->_o.P1 = _ObsBlock.rng_P1[iSat]; 130 obs->_o.P2 = _ObsBlock.rng_P2[iSat]; 131 obs->_o.L1 = _ObsBlock.resolvedPhase_L1(iSat); 132 obs->_o.L2 = _ObsBlock.resolvedPhase_L2(iSat); 133 obs->_o.slip_cnt_L1 = _ObsBlock.slip_L1[iSat]; 134 obs->_o.slip_cnt_L2 = _ObsBlock.slip_L2[iSat]; 111 135 } 112 136 _ObsBlock.clear(); 113 137 } 114 138 } 139 140 else if ( _PP.ID() == 20 || _PP.ID() == 21 ) { 141 _msg2021.extract(_PP); 142 143 if (_msg2021.valid()) { 144 translateCorr2Obs(); 145 } 146 } 147 148 else if ( _PP.ID() == 3 ) { 149 _msg03.extract(_PP); 150 } 151 152 else if ( _PP.ID() == 22 ) { 153 _msg22.extract(_PP); 154 } 115 155 } 116 156 return success; 117 157 } 118 158 159 160 161 void RTCM2Decoder::storeEph(const gpsephemeris& gpseph) { 162 t_ephGPS* eph = new t_ephGPS; eph->set(&gpseph); 163 164 string prn = eph->prn(); 165 166 t_pairMap::iterator ip = _ephPair.find(prn); 167 if (ip == _ephPair.end() ) { 168 ip = _ephPair.insert(pair<string, t_ephPair*>(prn, new t_ephPair)).first; 169 } 170 t_ephPair* pair = ip->second; 171 172 if ( !pair->eph || eph->isNewerThan(pair->eph) ) { 173 delete pair->oldEph; 174 pair->oldEph = pair->eph; 175 pair->eph = eph; 176 177 return; 178 } 179 180 delete eph; 181 } 182 183 184 void RTCM2Decoder::storeEph(const t_ephGPS& gpseph) { 185 t_ephGPS* eph = new t_ephGPS(gpseph); 186 187 string prn = eph->prn(); 188 189 t_pairMap::iterator ip = _ephPair.find(prn); 190 if (ip == _ephPair.end() ) { 191 ip = _ephPair.insert(pair<string, t_ephPair*>(prn, new t_ephPair)).first; 192 } 193 t_ephPair* pair = ip->second; 194 195 if ( !pair->eph || eph->isNewerThan(pair->eph) ) { 196 delete pair->oldEph; 197 pair->oldEph = pair->eph; 198 pair->eph = eph; 199 200 return; 201 } 202 203 delete eph; 204 } 205 206 207 void RTCM2Decoder::translateCorr2Obs() { 208 209 if ( !_msg03.validMsg || !_msg2021.valid() ) { 210 return; 211 } 212 213 double stax = _msg03.x + (_msg22.validMsg ? _msg22.dL1[0] : 0.0); 214 double stay = _msg03.y + (_msg22.validMsg ? _msg22.dL1[1] : 0.0); 215 double staz = _msg03.z + (_msg22.validMsg ? _msg22.dL1[2] : 0.0); 216 217 int refWeek; 218 double refSecs; 219 currentGPSWeeks(refWeek, refSecs); 220 221 // Resolve receiver time of measurement (see RTCM 2.3, page 4-42, Message 18, Note 1) 222 // ---------------------------------------------------------------------------------- 223 double hoursec_est = _msg2021.hoursec(); // estimated time of measurement 224 double hoursec_rcv = rint(hoursec_est * 1e2) / 1e2; // receiver clock reading at hoursec_est 225 double rcv_clk_bias = (hoursec_est - hoursec_rcv) * c_light; 226 227 int GPSWeek; 228 double GPSWeeks; 229 resolveEpoch(hoursec_est, refWeek, refSecs, 230 GPSWeek, GPSWeeks); 231 232 int GPSWeek_rcv; 233 double GPSWeeks_rcv; 234 resolveEpoch(hoursec_rcv, refWeek, refSecs, 235 GPSWeek_rcv, GPSWeeks_rcv); 236 237 // Loop over all satellites 238 // ------------------------ 239 for (RTCM2_2021::data_iterator icorr = _msg2021.data.begin(); 240 icorr != _msg2021.data.end(); icorr++) { 241 const RTCM2_2021::HiResCorr* corr = icorr->second; 242 243 ostringstream oPRN; oPRN.fill('0'); 244 245 oPRN << (corr->PRN < 200 ? 'G' : 'R') 246 << setw(2) << (corr->PRN < 200 ? corr->PRN : corr->PRN - 200); 247 248 string PRN(oPRN.str()); 249 250 t_pairMap::const_iterator ieph = _ephPair.find(PRN); 251 const t_eph* eph0 = 0; 252 const t_eph* eph1 = 0; 253 254 if ( ieph != _ephPair.end() ) { 255 eph0 = ieph->second->eph; 256 eph1 = ieph->second->oldEph; 257 } 258 259 260 if ( !eph0 && !eph1 ) { 261 continue; 262 } 263 264 double L1 = 0; 265 double L2 = 0; 266 double P1 = 0; 267 double P2 = 0; 268 string obsT = ""; 269 270 // new observation 271 p_obs new_obs = 0; 272 273 for (unsigned ii = 0; ii < 4; ii++) { 274 int IODcorr = 0; 275 double corrVal = 0; 276 const t_eph* eph = 0; 277 double* obsVal = 0; 278 279 switch (ii) { 280 case 0: // --- L1 --- 281 IODcorr = corr->IODp1; 282 corrVal = corr->phase1 * LAMBDA_1; 283 obsVal = &L1; 284 obsT = "L1"; 285 break; 286 case 1: // --- L2 --- 287 IODcorr = corr->IODp2; 288 corrVal = corr->phase2 * LAMBDA_2; 289 obsVal = &L2; 290 obsT = "L2"; 291 break; 292 case 2: // --- P1 --- 293 IODcorr = corr->IODr1; 294 corrVal = corr->range1; 295 obsVal = &P1; 296 obsT = "P1"; 297 break; 298 case 3: // --- P2 --- 299 IODcorr = corr->IODr2; 300 corrVal = corr->range2; 301 obsVal = &P2; 302 obsT = "P2"; 303 break; 304 default: 305 continue; 306 } 307 308 eph = 0; 309 if ( eph0 && eph0->IOD() == IODcorr ) 310 eph = eph0; 311 else if ( eph1 && eph1->IOD() == IODcorr ) 312 eph = eph1; 313 if ( eph && corr ) { 314 int GPSWeek_tot; 315 double GPSWeeks_tot; 316 double rho, xSat, ySat, zSat, clkSat; 317 cmpRho(eph, stax, stay, staz, 318 GPSWeek, GPSWeeks, 319 rho, GPSWeek_tot, GPSWeeks_tot, 320 xSat, ySat, zSat, clkSat); 321 322 *obsVal = rho - corrVal + rcv_clk_bias - clkSat; 323 324 if ( *obsVal == 0 ) *obsVal = ZEROVALUE; 325 326 // Allocate new memory 327 // ------------------- 328 if ( !new_obs ) { 329 new_obs = new t_obs(); 330 331 new_obs->_o.StatID[0] = '\x0'; 332 new_obs->_o.satSys = (corr->PRN < 200 ? 'G' : 'R'); 333 new_obs->_o.satNum = (corr->PRN < 200 ? corr->PRN : corr->PRN - 200); 334 335 new_obs->_o.GPSWeek = GPSWeek_rcv; 336 new_obs->_o.GPSWeeks = GPSWeeks_rcv; 337 } 338 339 // Store estimated measurements 340 // ---------------------------- 341 switch (ii) { 342 case 0: // --- L1 --- 343 new_obs->_o.L1 = *obsVal / LAMBDA_1; 344 new_obs->_o.slip_cnt_L1 = corr->lock1; 345 break; 346 case 1: // --- L2 --- 347 new_obs->_o.L2 = *obsVal / LAMBDA_2; 348 new_obs->_o.slip_cnt_L2 = corr->lock2; 349 break; 350 case 2: // --- C1 / P1 --- 351 if ( corr->Pind1 ) 352 new_obs->_o.P1 = *obsVal; 353 else 354 new_obs->_o.C1 = *obsVal; 355 break; 356 case 3: // --- C2 / P2 --- 357 if ( corr->Pind2 ) 358 new_obs->_o.P2 = *obsVal; 359 else 360 new_obs->_o.C2 = *obsVal; 361 break; 362 default: 363 continue; 364 } 365 } 366 } // loop over frequencies 367 368 if ( new_obs ) { 369 _obsList.push_back( new_obs ); 370 } 371 } 372 } -
trunk/BNC/RTCM/RTCM2Decoder.h
r649 r1024 26 26 #define INC_RTCM2DECODER_H 27 27 28 #include <list> 29 28 30 #include "GPSDecoder.h" 29 31 #include "RTCM2.h" 32 #include "RTCM2_2021.h" 33 #include "../RTCM3/rtcm3torinex.h" 34 #include "../RTCM3/ephemeris.h" 30 35 31 36 class RTCM2Decoder: public GPSDecoder { 32 37 33 38 public: 34 RTCM2Decoder(); 39 RTCM2Decoder(const std::string& ID); 35 40 virtual ~RTCM2Decoder(); 36 41 virtual t_irc Decode(char* buffer, int bufLen); 37 42 43 void storeEph(const gpsephemeris& gpseph); 44 void storeEph(const t_ephGPS& gpseph); 45 46 t_irc getStaCrd(double& xx, double& yy, double& zz); 47 48 const rtcm2::RTCM2_2021& msg2021() const { return _msg2021; } 49 38 50 private: 39 51 40 std::string _buffer; 41 rtcm2::RTCM2_Obs _ObsBlock; 42 rtcm2::RTCM2packet _PP; 52 class t_ephPair { 53 public: 54 t_ephPair() { 55 eph = 0; 56 oldEph = 0; 57 } 58 59 ~t_ephPair() { 60 delete eph; 61 delete oldEph; 62 } 63 64 t_eph* eph; 65 t_eph* oldEph; 66 }; 43 67 68 void translateCorr2Obs(); 69 70 std::string _ID; 71 72 std::string _buffer; 73 rtcm2::RTCM2packet _PP; 74 75 // for messages 18, 19 decoding 76 rtcm2::RTCM2_Obs _ObsBlock; 77 78 // for messages 20, 21 decoding 79 rtcm2::RTCM2_03 _msg03; 80 rtcm2::RTCM2_22 _msg22; 81 rtcm2::RTCM2_2021 _msg2021; 82 std::map<std::string, t_ephPair*> _ephPair; 83 84 typedef std::map<std::string, t_ephPair*> t_pairMap; 44 85 }; 45 86 -
trunk/BNC/bnc.pro
r866 r1024 2 2 # Switch to debug configuration 3 3 # ----------------------------- 4 CONFIG += release 5 ###CONFIG -= debug4 ###CONFIG += release 5 CONFIG += debug 6 6 7 7 DEFINES += NO_RTCM3_MAIN … … 27 27 bncconst.h bnchtml.h bnctableitem.h bnczerodecoder.h \ 28 28 RTCM/GPSDecoder.h RTCM/RTCM2.h RTCM/RTCM2Decoder.h \ 29 RTCM/RTCM2_2021.h RTCM/rtcm_utils.h \ 29 30 RTCM3/RTCM3Decoder.h RTCM3/rtcm3torinex.h \ 30 31 RTCM3/RTCM3coDecoder.h RTCM3/clock_orbit_rtcm.h \ 32 RTCM3/ephemeris.h RTCM3/timeutils.h \ 31 33 RTIGS/RTIGSDecoder.h RTIGS/rtigs_records.h \ 32 34 RTIGS/cgps_transform.h RTIGS/rtstruct.h RTIGS/rtacp.h RTIGS/gpswro.h … … 37 39 bnczerodecoder.cpp \ 38 40 RTCM/RTCM2.cpp RTCM/RTCM2Decoder.cpp \ 41 RTCM/RTCM2_2021.cpp RTCM/rtcm_utils.cpp \ 39 42 RTCM3/RTCM3Decoder.cpp RTCM3/rtcm3torinex.c \ 40 43 RTCM3/RTCM3coDecoder.cpp RTCM3/clock_orbit_rtcm.c \ 44 RTCM3/ephemeris.cpp RTCM3/timeutils.cpp \ 41 45 RTIGS/RTIGSDecoder.cpp RTIGS/cgps_transform.cpp 42 46 -
trunk/BNC/bncapp.cpp
r995 r1024 39 39 * -----------------------------------------------------------------------*/ 40 40 41 #include <iostream>42 41 #include <QSettings> 43 42 #include <QMessageBox> … … 190 189 void bncApp::slotNewGPSEph(gpsephemeris* gpseph) { 191 190 191 gpsephemeris copy_gpseph = *gpseph; 192 emit newEphGPS(copy_gpseph); 193 192 194 QMutexLocker locker(&_mutex); 193 195 … … 206 208 delete gpseph; 207 209 } 210 208 211 } 209 212 … … 601 604 //////////////////////////////////////////////////////////////////////////// 602 605 void bncApp::slotQuit() { 603 cout << "bncApp::slotQuit" << endl;604 606 delete _caster; 605 607 quit(); -
trunk/BNC/bncapp.h
r994 r1024 49 49 void slotQuit(); 50 50 51 signals: 52 void newMessage(QByteArray msg); 51 signals: 52 void newEphGPS(gpsephemeris gpseph); 53 void newMessage(QByteArray msg); 53 54 54 55 private slots: -
trunk/BNC/bncgetthread.cpp
r1022 r1024 140 140 _rnx = new bncRinex(_staID, mountPoint, format, latitude, longitude, nmea); 141 141 } 142 _rnx_set_position = false; 142 143 143 144 msleep(100); //sleep 0.1 sec … … 156 157 } 157 158 delete _decoder; 158 delete _rnx; 159 delete _rnx; 159 160 } 160 161 … … 365 366 if (_format.indexOf("RTCM_2") != -1) { 366 367 emit(newMessage("Get Data: " + _staID + " in RTCM 2.x format")); 367 _decoder = new RTCM2Decoder(); 368 _decoder = new RTCM2Decoder(_staID.data()); 368 369 } 369 370 else if (_format.indexOf("RTCM_3") != -1) { … … 557 558 558 559 delete [] data; 559 560 560 561 QListIterator<p_obs> it(_decoder->_obsList); 561 562 while (it.hasNext()) { … … 645 646 // ------------ 646 647 if (_rnx) { 647 long iSec = long(floor(obs->_o.GPSWeeks+0.5)); 648 long newTime = obs->_o.GPSWeek * 7*24*3600 + iSec; 649 if (_samplingRate == 0 || iSec % _samplingRate == 0) { 650 _rnx->deepCopy(obs); 651 } 652 _rnx->dumpEpoch(newTime); 653 } 654 648 bool dump = true; 649 650 RTCM2Decoder* decoder2 = dynamic_cast<RTCM2Decoder*>(_decoder); 651 if ( decoder2 && !_rnx_set_position ) { 652 double stax, stay, staz; 653 if ( decoder2->getStaCrd(stax, stay, staz) == success ) { 654 _rnx->setApproxPos(stax, stay, staz); 655 _rnx_set_position = true; 656 } 657 else { 658 dump = false; 659 } 660 } 661 662 if ( dump ) { 663 long iSec = long(floor(obs->_o.GPSWeeks+0.5)); 664 long newTime = obs->_o.GPSWeek * 7*24*3600 + iSec; 665 if (_samplingRate == 0 || iSec % _samplingRate == 0) { 666 _rnx->deepCopy(obs); 667 } 668 _rnx->dumpEpoch(newTime); 669 } 670 } 671 672 // Emit new observation signal 673 // --------------------------- 655 674 bool firstObs = (obs == _decoder->_obsList.first()); 656 675 obs->_status = t_obs::posted; … … 736 755 } 737 756 } 757 758 // 759 ////////////////////////////////////////////////////////////////////////////// 760 void bncGetThread::slotNewEphGPS(gpsephemeris gpseph) { 761 RTCM2Decoder* decoder = dynamic_cast<RTCM2Decoder*>(_decoder); 762 763 if ( decoder ) { 764 QMutexLocker locker(&_mutex); 765 766 decoder->storeEph(gpseph); 767 } 768 } 769 -
trunk/BNC/bncgetthread.h
r728 r1024 26 26 #define BNCGETTHREAD_H 27 27 28 #include <stdio.h> 29 28 30 #include <QThread> 29 31 #include <QtNetwork> … … 31 33 32 34 #include "RTCM/GPSDecoder.h" 35 #include "RTCM3/rtcm3torinex.h" 33 36 #include "bncconst.h" 34 37 … … 56 59 void error(QByteArray staID); 57 60 void newMessage(QByteArray msg); 61 62 public slots: 63 void slotNewEphGPS(gpsephemeris gpseph); 58 64 59 65 protected: … … 95 101 int _samplingRate; 96 102 bncRinex* _rnx; 103 bool _rnx_set_position; 97 104 QDateTime _decodeFailure; 98 105 QDateTime _decodeStart; -
trunk/BNC/bncrinex.cpp
r843 r1024 93 93 _rinexVers = 2; 94 94 } 95 96 _approxPos[0] = _approxPos[1] = _approxPos[2] = 0.0; 95 97 } 96 98 … … 447 449 // ------------------ 448 450 else { 449 double approxPos[3]; approxPos[0] = approxPos[1] = approxPos[2] = 0.0;450 451 double antennaNEU[3]; antennaNEU[0] = antennaNEU[1] = antennaNEU[2] = 0.0; 451 452 … … 477 478 << setw(20) << " " << "ANT # / TYPE" << endl; 478 479 _out.unsetf(ios::left); 479 _out << setw(14) << setprecision(4) << approxPos[0] 480 << setw(14) << setprecision(4) << approxPos[1] 481 << setw(14) << setprecision(4) << approxPos[2] 480 _out << setw(14) << setprecision(4) << _approxPos[0] 481 << setw(14) << setprecision(4) << _approxPos[1] 482 << setw(14) << setprecision(4) << _approxPos[2] 482 483 << " " << "APPROX POSITION XYZ" << endl; 483 484 _out << setw(14) << setprecision(4) << antennaNEU[0] … … 565 566 double sec = double(datTim.time().second()) + fmod(fObs->_o.GPSWeeks,1.0); 566 567 567 // RINEX Version 3 568 // --------------- 568 // Epoch header line: RINEX Version 3 569 // ---------------------------------- 569 570 if (_rinexVers == 3) { 570 char sbasflag = 'S';571 571 _out << datTim.toString("> yyyy MM dd hh mm ").toAscii().data() 572 572 << setw(10) << setprecision(7) << sec 573 573 << " " << 0 << setw(3) << dumpList.size() << endl; 574 575 QListIterator<p_obs> it(dumpList); 576 while (it.hasNext()) { 577 p_obs obs = it.next(); 578 // Changed data output, C1P, C2C|X, L2C|X, S2C|X added. Changed Output for SBAS Perlt 579 if (sbasflag != obs->_o.satSys) { 580 _out << obs->_o.satSys 581 << setw(2) << setfill('0') << obs->_o.satNum << setfill(' ') 582 << setw(14) << setprecision(3) << obs->_o.C1 << " " 583 << setw(14) << setprecision(3) << obs->_o.P1 << " " 584 << setw(14) << setprecision(3) << obs->_o.L1 << " " 585 << setw(1) << obs->_o.SNR1 586 << setw(14) << setprecision(3) << obs->_o.S1 << " " 587 << setw(14) << setprecision(3) << obs->_o.C2 << " " 588 << setw(14) << setprecision(3) << obs->_o.P2 << " " ; 589 if ((obs->_o.C2 != 0.0) && (obs->_o.P2 == 0.0)) { 590 _out << setw(14) << setprecision(3) << obs->_o.L2 << " " 591 << setw(1) << obs->_o.SNR2 592 << setw(14) << setprecision(3) << obs->_o.S2 << " " 593 << " 0.000 0.000 "; 594 } 595 else { 596 _out << " 0.000 0.000 " 597 << setw(14) << setprecision(3) << obs->_o.L2 << " " 598 << setw(1) << obs->_o.SNR2 599 << setw(14) << setprecision(3) << obs->_o.S2; 600 } 601 _out << endl; 602 } 603 else { 604 _out << obs->_o.satSys 605 << setw(2) << setfill('0') << obs->_o.satNum << setfill(' ') 606 << setw(14) << setprecision(3) << obs->_o.C1 << " " 607 << setw(14) << setprecision(3) << obs->_o.P1 << " " 608 << setw(14) << setprecision(3) << obs->_o.L1 << " " 609 << setw(1) << obs->_o.SNR1 610 << setw(14) << setprecision(3) << obs->_o.S1 << endl; 611 } 612 delete obs; 613 } 614 } 615 616 // RINEX Version 2 617 // --------------- 574 } 575 // Epoch header line: RINEX Version 2 576 // ---------------------------------- 618 577 else { 619 578 _out << datTim.toString(" yy MM dd hh mm ").toAscii().data() 620 579 << setw(10) << setprecision(7) << sec 621 580 << " " << 0 << setw(3) << dumpList.size(); 622 581 623 582 QListIterator<p_obs> it(dumpList); int iSat = 0; 624 583 while (it.hasNext()) { … … 632 591 } 633 592 _out << endl; 634 635 it.toFront(); 636 while (it.hasNext()) { 637 p_obs obs = it.next(); 638 593 } 594 595 QListIterator<p_obs> it(dumpList); 596 while (it.hasNext()) { 597 p_obs obs = it.next(); 598 599 // Cycle slips detection 600 // --------------------- 601 int prn = 0; 602 switch (obs->_o.satSys) { 603 case 'G': prn = obs->_o.satNum; break; 604 case 'R': prn = obs->_o.satNum + 200; break; 605 default: prn = obs->_o.satNum; 606 } 607 608 int lli1 = 0; 609 int lli2 = 0; 610 if ( _slip_cnt_L1.find(prn) != _slip_cnt_L1.end() && 611 _slip_cnt_L1.find(prn).value() != obs->_o.slip_cnt_L1 ) { 612 lli1 = 1; 613 } 614 if ( _slip_cnt_L2.find(prn) != _slip_cnt_L2.end() && 615 _slip_cnt_L2.find(prn).value() != obs->_o.slip_cnt_L2 ) { 616 lli2 = 1; 617 } 618 _slip_cnt_L1[prn]= obs->_o.slip_cnt_L1; 619 _slip_cnt_L2[prn]= obs->_o.slip_cnt_L2; 620 621 // RINEX Version 3 622 // --------------- 623 if (_rinexVers == 3) { 624 char sbasflag = 'S'; 625 // Changed data output, C1P, C2C|X, L2C|X, S2C|X added. Changed Output for SBAS Perlt 626 if (sbasflag != obs->_o.satSys) { 627 _out << obs->_o.satSys 628 << setw(2) << setfill('0') << obs->_o.satNum << setfill(' ') 629 << setw(14) << setprecision(3) << obs->_o.C1 << " " 630 << setw(14) << setprecision(3) << obs->_o.P1 << " " 631 << setw(14) << setprecision(3) << obs->_o.L1 << lli1 632 << setw(1) << obs->_o.SNR1 633 << setw(14) << setprecision(3) << obs->_o.S1 << " " 634 << setw(14) << setprecision(3) << obs->_o.C2 << " " 635 << setw(14) << setprecision(3) << obs->_o.P2 << " " ; 636 if ((obs->_o.C2 != 0.0) && (obs->_o.P2 == 0.0)) { 637 _out << setw(14) << setprecision(3) << obs->_o.L2 << lli2 638 << setw(1) << obs->_o.SNR2 639 << setw(14) << setprecision(3) << obs->_o.S2 << " " 640 << " 0.000 0.000 "; 641 } 642 else { 643 _out << " 0.000 0.000 " 644 << setw(14) << setprecision(3) << obs->_o.L2 << " " 645 << setw(1) << obs->_o.SNR2 646 << setw(14) << setprecision(3) << obs->_o.S2; 647 } 648 _out << endl; 649 } 650 else { 651 _out << obs->_o.satSys 652 << setw(2) << setfill('0') << obs->_o.satNum << setfill(' ') 653 << setw(14) << setprecision(3) << obs->_o.C1 << " " 654 << setw(14) << setprecision(3) << obs->_o.P1 << " " 655 << setw(14) << setprecision(3) << obs->_o.L1 << lli1 656 << setw(1) << obs->_o.SNR1 657 << setw(14) << setprecision(3) << obs->_o.S1 << endl; 658 } 659 } 660 661 // RINEX Version 2 662 // --------------- 663 else { 639 664 char lli = ' '; 640 665 char snr = ' '; … … 643 668 _out << setw(14) << setprecision(3) << obs->_o.P1 << lli << snr; 644 669 _out << setw(14) << setprecision(3) << obs->_o.P2 << lli << snr; 645 _out << setw(14) << setprecision(3) << obs->_o.L1 << lli 670 _out << setw(14) << setprecision(3) << obs->_o.L1 << lli1 646 671 << setw(1) << obs->_o.SNR1 << endl; 647 _out << setw(14) << setprecision(3) << obs->_o.L2 << lli 672 _out << setw(14) << setprecision(3) << obs->_o.L2 << lli2 648 673 << setw(1) << obs->_o.SNR2; 649 674 _out << setw(14) << setprecision(3) << obs->_o.S1 ; 650 675 _out << setw(16) << setprecision(3) << obs->_o.S2 ; 651 676 _out << endl; 652 653 delete obs; 654 }677 } 678 679 delete obs; 655 680 } 656 681 -
trunk/BNC/bncrinex.h
r675 r1024 49 49 QDateTime* nextEpoch = 0); 50 50 51 void setApproxPos(double stax, double stay, double staz) { 52 _approxPos[0] = stax; 53 _approxPos[1] = stay; 54 _approxPos[2] = staz; 55 } 56 51 57 protected: 52 58 virtual void run() {}; … … 81 87 bool _reloadTable; 82 88 bool _reloadDone; 89 double _approxPos[3]; 90 91 QMap<int, int> _slip_cnt_L1; 92 QMap<int, int> _slip_cnt_L2; 83 93 }; 84 94 -
trunk/BNC/bncwindow.cpp
r998 r1024 688 688 SLOT(slotNewBytes(QByteArray, double))); 689 689 690 connect(((bncApp*)qApp), SIGNAL(newEphGPS(gpsephemeris)), 691 getThread, SLOT(slotNewEphGPS(gpsephemeris))); 692 690 693 _caster->addGetThread(getThread); 691 694
Note:
See TracChangeset
for help on using the changeset viewer.