Changeset 1044 in ntrip for trunk/BNC/bncrinex.cpp


Ignore:
Timestamp:
Aug 19, 2008, 11:36:54 AM (16 years ago)
Author:
zdenek
Message:

Zdenek Lukes: a) added logic for RTCM 2.3 messages 20/21 decoding

b) added logic for cycle slip flags (slip counters or lock time indicators) handling

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/BNC/bncrinex.cpp

    r1029 r1044  
    9393    _rinexVers = 2;
    9494  }
     95
     96  _approxPos[0] = _approxPos[1] = _approxPos[2] = 0.0;
    9597}
    9698
     
    447449  // ------------------
    448450  else {
    449     double approxPos[3];  approxPos[0]  = approxPos[1]  = approxPos[2]  = 0.0;
    450451    double antennaNEU[3]; antennaNEU[0] = antennaNEU[1] = antennaNEU[2] = 0.0;
    451452   
     
    477478         << setw(20) << " "                                          << "ANT # / TYPE"         << endl;
    478479    _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]
    482483         << "                  "                                     << "APPROX POSITION XYZ"  << endl;
    483484    _out << setw(14) << setprecision(4) << antennaNEU[0]
     
    565566  double sec = double(datTim.time().second()) + fmod(fObs->_o.GPSWeeks,1.0);
    566567
    567   // RINEX Version 3
    568   // ---------------
     568  // Epoch header line: RINEX Version 3
     569  // ----------------------------------
    569570  if (_rinexVers == 3) {
    570     char sbasflag = 'S';
    571571    _out << datTim.toString("> yyyy MM dd hh mm ").toAscii().data()
    572572         << setw(10) << setprecision(7) << sec
    573573         << "  " << 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  // ----------------------------------
    618577  else {
    619578    _out << datTim.toString(" yy MM dd hh mm ").toAscii().data()
    620579         << setw(10) << setprecision(7) << sec
    621580         << "  " << 0 << setw(3)  << dumpList.size();
    622    
     581
    623582    QListIterator<p_obs> it(dumpList); int iSat = 0;
    624583    while (it.hasNext()) {
     
    632591    }
    633592    _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    char lli1 = ' ';
     609    char lli2 = ' ';
     610    if      ( obs->_o.slip_cnt_L1 >= 0 ) {
     611      if ( _slip_cnt_L1.find(prn)         != _slip_cnt_L1.end() &&
     612           _slip_cnt_L1.find(prn).value() != obs->_o.slip_cnt_L1 ) {
     613        lli1 = '1';
     614      }
     615    }
     616    else if ( obs->_o.lock_timei_L1 >= 0 ) {
     617      if ( _lock_timei_L1.find(prn)         != _lock_timei_L1.end() &&
     618           _lock_timei_L1.find(prn).value() != obs->_o.lock_timei_L1 ) {
     619        lli1 = '1';
     620      }
     621    }
     622
     623    if ( obs->_o.slip_cnt_L2 >= 0 ) {
     624      if ( _slip_cnt_L2.find(prn)         != _slip_cnt_L2.end() &&
     625           _slip_cnt_L2.find(prn).value() != obs->_o.slip_cnt_L2 ) {
     626        lli2 = '1';
     627      }
     628    }
     629    else if ( obs->_o.lock_timei_L2 >= 0 ) {
     630      if ( _lock_timei_L2.find(prn)         != _lock_timei_L2.end() &&
     631           _lock_timei_L2.find(prn).value() != obs->_o.lock_timei_L2 ) {
     632        lli2 = '1';
     633      }
     634    }
     635
     636    _slip_cnt_L1[prn]   = obs->_o.slip_cnt_L1;
     637    _slip_cnt_L2[prn]   = obs->_o.slip_cnt_L2;
     638
     639    _lock_timei_L1[prn] = obs->_o.lock_timei_L1;
     640    _lock_timei_L2[prn] = obs->_o.lock_timei_L2;
     641
     642    // RINEX Version 3
     643    // ---------------
     644    if (_rinexVers == 3) {
     645      char sbasflag = 'S';
     646      // Changed data output, C1P, C2C|X, L2C|X, S2C|X added. Changed Output for SBAS Perlt 
     647      if (sbasflag != obs->_o.satSys) {
     648        _out << obs->_o.satSys
     649             << setw(2) << setfill('0') << obs->_o.satNum << setfill(' ')
     650             << setw(14) << setprecision(3) << obs->_o.C1 << "  " 
     651             << setw(14) << setprecision(3) << obs->_o.P1 << "  " 
     652             << setw(14) << setprecision(3) << obs->_o.L1 << lli1
     653             << setw(1)                     << obs->_o.SNR1
     654             << setw(14) << setprecision(3) << obs->_o.S1 << "  "
     655             << setw(14) << setprecision(3) << obs->_o.C2 << "  " 
     656             << setw(14) << setprecision(3) << obs->_o.P2 << "  " ;
     657        if ((obs->_o.C2 != 0.0) && (obs->_o.P2 == 0.0)) {
     658          _out << setw(14) << setprecision(3) << obs->_o.L2 << lli2
     659               << setw(1)                     << obs->_o.SNR2
     660               << setw(14) << setprecision(3) << obs->_o.S2 << "  "
     661               << "         0.000           0.000  ";
     662        }
     663        else {
     664          _out << "         0.000           0.000  "
     665               << setw(14) << setprecision(3) << obs->_o.L2 << " "
     666               << setw(1)                     << obs->_o.SNR2
     667               << setw(14) << setprecision(3) << obs->_o.S2;
     668        }
     669        _out << endl;
     670      }
     671      else {
     672        _out << obs->_o.satSys
     673             << setw(2) << setfill('0') << obs->_o.satNum << setfill(' ')
     674             << setw(14) << setprecision(3) << obs->_o.C1 << "  " 
     675             << setw(14) << setprecision(3) << obs->_o.P1 << "  " 
     676             << setw(14) << setprecision(3) << obs->_o.L1 << lli1
     677             << setw(1)                     << obs->_o.SNR1
     678             << setw(14) << setprecision(3) << obs->_o.S1 << endl;
     679      }
     680    }
     681
     682    // RINEX Version 2
     683    // ---------------
     684    else {
    639685      char lli = ' ';
    640686      char snr = ' ';
     
    643689      _out << setw(14) << setprecision(3) << obs->_o.P1 << lli << snr;
    644690      _out << setw(14) << setprecision(3) << obs->_o.P2 << lli << snr;
    645       _out << setw(14) << setprecision(3) << obs->_o.L1 << lli 
     691      _out << setw(14) << setprecision(3) << obs->_o.L1 << lli1
    646692           << setw(1) << obs->_o.SNR1 << endl;
    647       _out << setw(14) << setprecision(3) << obs->_o.L2 << lli
     693      _out << setw(14) << setprecision(3) << obs->_o.L2 << lli2
    648694           << setw(1) << obs->_o.SNR2;
    649695      _out << setw(14) << setprecision(3) << obs->_o.S1 ;
    650696      _out << setw(16) << setprecision(3) << obs->_o.S2 ;
    651697      _out << endl;
    652    
    653       delete obs;
    654     }
     698    }
     699
     700    delete obs;
    655701  }
    656702
Note: See TracChangeset for help on using the changeset viewer.