Changeset 8168 in ntrip for trunk/BNC


Ignore:
Timestamp:
Oct 26, 2017, 2:44:32 PM (6 years ago)
Author:
stuerze
Message:

IRNSS support is added in RINEX QC

Location:
trunk/BNC
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/BNC/ChangeLog.txt

    r8107 r8168  
    22 BNC VERSION 2.13.0 (xx.xx.xxxx) current
    33--------------------------------------------------------------------------------
     4    Added   (26.10.2017): IRNSS support is added in RINEX QC
    45    Added   (12.08.2016): resp. config keywords in context help
    56    Added   (08.08.2016): some informations about the data source is added as
  • trunk/BNC/src/bncconst.cpp

    r7242 r8168  
    5454  case t_frequency::C7:    return 1207140000.0;
    5555  case t_frequency::C6:    return 1268520000.0;
     56  case t_frequency::I5:    return 1176450000.0;
     57  case t_frequency::I9:    return 2492028000.0;
    5658  case t_frequency::dummy:
    5759  case t_frequency::max:   return 0.0;
  • trunk/BNC/src/bncconst.h

    r7243 r8168  
    3232class t_frequency {
    3333 public:
    34   enum type {dummy = 0, G1, G2, G5, R1, R2, 
    35                         E1, // E1  / 1575.42         
    36                         E5, // E5a / 1176.45         
    37                         E7, // E5b / 1207.140         
    38                         E8, // E5(E5a+E5b) / 1191.795 
     34  enum type {dummy = 0, G1, G2, G5, R1, R2,
     35                        E1, // E1  / 1575.42
     36                        E5, // E5a / 1176.45
     37                        E7, // E5b / 1207.140
     38                        E8, // E5(E5a+E5b) / 1191.795
    3939                        E6, // E6  / 1278.75
    4040                        J1, // 1575.42
     
    4747                        C7, // 1207.14
    4848                        C6, // 1268.52
     49                        I5, // 1176.45
     50                        I9, // 2492.028
    4951             max};
    5052
     
    6971    else if (tt == C7) return "C7";
    7072    else if (tt == C6) return "C6";
     73    else if (tt == I5) return "I5";
     74    else if (tt == I9) return "I9";
    7175    return std::string();
    7276  }
     
    9195    else if (s == "C7") return C7;
    9296    else if (s == "C6") return C6;
     97    else if (s == "I5") return I5;
     98    else if (s == "I9") return I9;
    9399    return type();
    94100  }
  • trunk/BNC/src/bncephuser.cpp

    r8077 r8168  
    235235    return;
    236236  }
     237  else if (eph->type() == t_eph::IRNSS   && timeDiff > 4*3600) { // update interval: 2h, data sets are valid for 4 hours
     238    eph->setCheckState(t_eph::outdated);
     239    return;
     240  }
    237241
    238242
     
    278282      return;
    279283    }
     284    else if  (eph->type() == t_eph::IRNSS  && dt > 4*3600) {
     285      ephL->setCheckState(t_eph::outdated);
     286      return;
     287    }
    280288
    281289    if (diff < MAXDIFF && diffC < MAXDIFF) {
  • trunk/BNC/src/ephemeris.cpp

    r7922 r8168  
    184184
    185185      if (prnStr.size() == 1 &&
    186           (prnStr[0] == 'G' || prnStr[0] == 'J')) {
     186          (prnStr[0] == 'G' ||
     187           prnStr[0] == 'J' ||
     188           prnStr[0] == 'I')) {
    187189        in >> n;
    188190        prnStr.append(n);
     
    195197      else if (prnStr.at(0) == 'J') {
    196198        _prn.set('J', prnStr.mid(1).toInt());
     199      }
     200      else if (prnStr.at(0) == 'I') {
     201        _prn.set('I', prnStr.mid(1).toInt());
    197202      }
    198203      else {
     
    257262    }
    258263
    259     else if ( iLine == 5 ) {
     264    else if ( iLine == 5 && type() != t_eph::IRNSS) {
    260265      if ( readDbl(line, pos[0], fieldLen, _IDOT   ) ||
    261266           readDbl(line, pos[1], fieldLen, _L2Codes) ||
     
    266271      }
    267272    }
    268 
    269     else if ( iLine == 6 ) {
     273    else if ( iLine == 5 && type() == t_eph::IRNSS) {
     274      if ( readDbl(line, pos[0], fieldLen, _IDOT   ) ||
     275           readDbl(line, pos[2], fieldLen, _TOEweek) ) {
     276        _checkState = bad;
     277        return;
     278      }
     279    }
     280
     281    else if ( iLine == 6 && type() != t_eph::IRNSS) {
    270282      if ( readDbl(line, pos[0], fieldLen, _ura   ) ||
    271283           readDbl(line, pos[1], fieldLen, _health) ||
    272284           readDbl(line, pos[2], fieldLen, _TGD   ) ||
    273285           readDbl(line, pos[3], fieldLen, _IODC  ) ) {
     286        _checkState = bad;
     287        return;
     288      }
     289    }
     290    else if ( iLine == 6 && type() == t_eph::IRNSS) {
     291      if ( readDbl(line, pos[0], fieldLen, _ura   ) ||
     292           readDbl(line, pos[1], fieldLen, _health) ||
     293           readDbl(line, pos[2], fieldLen, _TGD   ) ) {
    274294        _checkState = bad;
    275295        return;
     
    413433    .arg(_OMEGADOT, 19, 'e', 12);
    414434
    415   out << QString(fmt)
    416     .arg(_IDOT,    19, 'e', 12)
    417     .arg(_L2Codes, 19, 'e', 12)
    418     .arg(_TOEweek, 19, 'e', 12)
    419     .arg(_L2PFlag, 19, 'e', 12);
    420 
    421   out << QString(fmt)
    422     .arg(_ura,    19, 'e', 12)
    423     .arg(_health, 19, 'e', 12)
    424     .arg(_TGD,    19, 'e', 12)
    425     .arg(_IODC,   19, 'e', 12);
     435  if (type() == t_eph::IRNSS) {
     436    out << QString(fmt)
     437      .arg(_IDOT,    19, 'e', 12)
     438      .arg("",       19, QChar(' '))
     439      .arg(_TOEweek, 19, 'e', 12)
     440      .arg("",       19, QChar(' '));
     441  }
     442  else {
     443    out << QString(fmt)
     444      .arg(_IDOT,    19, 'e', 12)
     445      .arg(_L2Codes, 19, 'e', 12)
     446      .arg(_TOEweek, 19, 'e', 12)
     447      .arg(_L2PFlag, 19, 'e', 12);
     448  }
     449
     450  if (type() == t_eph::IRNSS) {
     451    out << QString(fmt)
     452      .arg(_ura,    19, 'e', 12)
     453      .arg(_health, 19, 'e', 12)
     454      .arg(_TGD,    19, 'e', 12)
     455      .arg("",       19, QChar(' '));
     456  }
     457  else {
     458    out << QString(fmt)
     459      .arg(_ura,    19, 'e', 12)
     460      .arg(_health, 19, 'e', 12)
     461      .arg(_TGD,    19, 'e', 12)
     462      .arg(_IODC,   19, 'e', 12);
     463  }
    426464
    427465  double tot = _TOT;
     
    429467    tot = 0.0;
    430468  }
    431   out << QString(fmt)
    432     .arg(tot,          19, 'e', 12)
    433     .arg(_fitInterval, 19, 'e', 12)
    434     .arg("",           19, QChar(' '))
    435     .arg("",           19, QChar(' '));
     469  if (type() == t_eph::IRNSS) {
     470    out << QString(fmt)
     471      .arg(tot,          19, 'e', 12)
     472      .arg("",           19, QChar(' '))
     473      .arg("",           19, QChar(' '))
     474      .arg("",           19, QChar(' '));
     475  }
     476  else {
     477    out << QString(fmt)
     478      .arg(tot,          19, 'e', 12)
     479      .arg(_fitInterval, 19, 'e', 12)
     480      .arg("",           19, QChar(' '))
     481      .arg("",           19, QChar(' '));
     482  }
    436483
    437484  return rnxStr;
  • trunk/BNC/src/ephemeris.h

    r8139 r8168  
    1717class t_eph {
    1818 public:
    19   enum e_type {unknown, GPS, QZSS, GLONASS, Galileo, SBAS, BDS};
     19  enum e_type {unknown, GPS, QZSS, GLONASS, Galileo, SBAS, BDS, IRNSS};
    2020  enum e_checkState {unchecked, ok, bad, outdated};
    2121
     
    8989  virtual ~t_ephGPS() {}
    9090
    91   virtual e_type type() const {return (_prn.system() == 'J' ? t_eph::QZSS : t_eph::GPS); }
     91  virtual e_type type() const {
     92    switch (_prn.system()) {
     93      case 'J':
     94        return t_eph::QZSS;
     95      case 'I':
     96        return t_eph::IRNSS;
     97    };
     98    return t_eph::GPS;
     99  }
    92100  virtual QString toString(double version) const;
    93101  virtual unsigned int  IOD() const { return static_cast<unsigned int>(_IODE); }
     
    101109  double  _clock_driftrate; // [s/s^2]
    102110
    103   double  _IODE;
     111  double  _IODE;            // IODEC in case of IRNSS
    104112  double  _Crs;             // [m]
    105113  double  _Delta_n;         // [rad/s]
     
    122130
    123131  double  _IDOT;            // [rad/s]
    124   double  _L2Codes;         // Codes on L2 channel
     132  double  _L2Codes;         // Codes on L2 channel  (not valid for IRNSS)
    125133  double  _TOEweek;
    126   double  _L2PFlag;         // L2 P data flag
     134  double  _L2PFlag;         // L2 P data flag (not valid for IRNSS)
    127135
    128136  mutable double  _ura;     // SV accuracy
    129137  double  _health;          // SV health
    130138  double  _TGD;             // [s]
    131   double  _IODC;
     139  double  _IODC;            // (not valid for IRNSS)
    132140
    133141  double  _TOT;             // Transmisstion time
    134   double  _fitInterval;     // Fit interval
     142  double  _fitInterval;     // Fit interval (not valid for IRNSS)
    135143};
    136144
     
    414422  double  _TOEweek;          //  BDT week will be set only in case of RINEX file input
    415423};
    416 
    417424#endif
  • trunk/BNC/src/rinex/reqcedit.cpp

    r8127 r8168  
    651651        ephs.append(new t_ephBDS(*dynamic_cast<t_ephBDS*>(eph)));
    652652      }
     653      else if (eph->type() == t_eph::IRNSS) {
     654        ephs.append(new t_ephGPS(*dynamic_cast<t_ephGPS*>(eph)));
     655      }
    653656    }
    654657  }
  • trunk/BNC/src/rinex/rnxnavfile.cpp

    r7999 r8168  
    203203      }
    204204      eph = new t_ephBDS(version(), lines);
     205    }
     206    else if (prn[0] == 'I') {
     207      for (int ii = 1; ii < 8; ii++) {
     208        lines << stream->readLine();
     209      }
     210      eph = new t_ephGPS(version(), lines);
    205211    }
    206212    if (eph &&
  • trunk/BNC/src/rinex/rnxobsfile.cpp

    r8148 r8168  
    5252////////////////////////////////////////////////////////////////////////////
    5353t_rnxObsHeader::t_rnxObsHeader() {
    54   _usedSystems = "GREJCS";
     54  _usedSystems = "GREJCSI";
    5555  _antNEU.ReSize(3); _antNEU = 0.0;
    5656  _antXYZ.ReSize(3); _antXYZ = 0.0;
     
    447447                       << "C6I" << "L6I" << "S6I"
    448448                       << "C7I" << "L7I" << "S7I";
     449
     450        _obsTypes['I'] << "C5A" << "L5A" << "S5A"
     451                       << "C9A" << "L9A" << "S9A";
    449452      }
    450453      else {
  • trunk/BNC/src/t_prn.cpp

    r8148 r8168  
    2626  }
    2727  else if (_system == 'C') {
    28           return MAXPRN_GPS + MAXPRN_GLONASS + MAXPRN_GALILEO + MAXPRN_QZSS + MAXPRN_SBAS + _number;
     28        return MAXPRN_GPS + MAXPRN_GLONASS + MAXPRN_GALILEO + MAXPRN_QZSS + MAXPRN_SBAS + _number;
     29  }
     30  else if (_system == 'I') {
     31    return MAXPRN_GPS + MAXPRN_GLONASS + MAXPRN_GALILEO + MAXPRN_QZSS + MAXPRN_SBAS + MAXPRN_BDS + _number;
    2932  }
    3033  return 0;
     
    5356  char        system = '\x0';
    5457  const char* number = 0;
    55   if      ( str[0] == 'G' || str[0] == 'R' || str[0] == 'E' ||
    56             str[0] == 'J' || str[0] == 'S' || str[0] == 'C' ||
    57             str[0] == 'I'
    58                 ) {
     58  if ( str[0] == 'G' || str[0] == 'R' || str[0] == 'E' ||
     59       str[0] == 'J' || str[0] == 'S' || str[0] == 'C' ||
     60       str[0] == 'I') {
    5961    system = str[0];
    6062    number = str.c_str() + 1;
  • trunk/BNC/src/t_prn.h

    r7004 r8168  
    1212  static const unsigned MAXPRN_SBAS = 38;
    1313  static const unsigned MAXPRN_BDS = 37;
     14  static const unsigned MAXPRN_IRNSS = 7;
    1415  static const unsigned MAXPRN = MAXPRN_GPS + MAXPRN_GLONASS + MAXPRN_GALILEO
    15       + MAXPRN_QZSS + MAXPRN_SBAS + MAXPRN_BDS;
     16      + MAXPRN_QZSS + MAXPRN_SBAS + MAXPRN_BDS + MAXPRN_IRNSS;
    1617
    1718  t_prn() :
Note: See TracChangeset for help on using the changeset viewer.