Changeset 2527 in ntrip


Ignore:
Timestamp:
Aug 3, 2010, 3:16:59 PM (14 years ago)
Author:
mervart
Message:
 
Location:
trunk/BNC
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/BNC/RTCM3/RTCM3Decoder.cpp

    r2492 r2527  
    6565// Constructor
    6666////////////////////////////////////////////////////////////////////////////
    67 RTCM3Decoder::RTCM3Decoder(const QString& staID, bool inputFromFile) :
     67RTCM3Decoder::RTCM3Decoder(const QString& staID, bncRawFile* rawFile) :
    6868                GPSDecoder() {
    6969
    70   _staID           = staID;
    71   _inputFromFile   = inputFromFile;
     70  _staID   = staID;
     71  _rawFile = rawFile;
    7272
    7373  bncSettings settings;
    7474  _checkMountPoint = settings.value("miscMount").toString();
    75 
    76   // Ensure, that the Decoder uses the "old" convention for the data structure for Rinex2. Perlt
    77   _Parser.rinex3 = 0;
    78 
    79   memset(&_Parser, 0, sizeof(_Parser));
    80 
    81   double secGPS;
    82   currentGPSWeeks(_Parser.GPSWeek, secGPS);
    83   _Parser.GPSTOW = int(secGPS);
    8475
    8576  connect(this, SIGNAL(newGPSEph(gpsephemeris*)),
     
    121112    if ( _coDecoder->Decode(buffer, bufLen, errmsg) == success ) {
    122113      decoded = true;
    123       if (!_inputFromFile && _mode == unknown) {
     114      if (!_rawFile && _mode == unknown) {
    124115        _mode = corrections;
    125116      }
     
    127118  }
    128119
     120  // Find the corresponding parser
     121  // -----------------------------
     122  QByteArray staID("default");
     123  if (_rawFile) {
     124    staID = _rawFile->staID();
     125  }
     126
     127  bool newParser = !_parsers.contains(staID);
     128
     129  RTCM3ParserData& parser = _parsers[staID];
     130
     131  // Initialize a new parser
     132  // -----------------------
     133  if (newParser) {
     134    parser.rinex3 = 0;
     135    memset(&parser, 0, sizeof(parser));
     136    double secGPS;
     137    currentGPSWeeks(parser.GPSWeek, secGPS);
     138    parser.GPSTOW = int(secGPS);
     139  }
     140
    129141  // Remaining part decodes the Observations
    130142  // ---------------------------------------
     
    132144
    133145    for (int ii = 0; ii < bufLen; ii++) {
    134       _Parser.Message[_Parser.MessageSize++] = buffer[ii];
    135 
    136       if (_Parser.MessageSize >= _Parser.NeedBytes) {
    137 
    138         while(int rr = RTCM3Parser(&_Parser)) {
     146      parser.Message[parser.MessageSize++] = buffer[ii];
     147
     148      if (parser.MessageSize >= parser.NeedBytes) {
     149
     150        while(int rr = RTCM3Parser(&parser)) {
    139151
    140152          // RTCMv3 message types
    141153          // --------------------
    142           _typeList.push_back(_Parser.blocktype);
     154          _typeList.push_back(parser.blocktype);
    143155
    144156          // RTCMv3 antenna descriptor
     
    146158          if(rr == 1007 || rr == 1008 || rr == 1033)
    147159          {
    148             _antType.push_back(_Parser.antenna); /* correct ? */
     160            _antType.push_back(parser.antenna); /* correct ? */
    149161          }
    150162
     
    155167            _antList.push_back(t_antInfo());
    156168            _antList.back().type     = t_antInfo::ARP;
    157             _antList.back().xx       = _Parser.antX * 1e-4;
    158             _antList.back().yy       = _Parser.antY * 1e-4;
    159             _antList.back().zz       = _Parser.antZ * 1e-4;
     169            _antList.back().xx       = parser.antX * 1e-4;
     170            _antList.back().yy       = parser.antY * 1e-4;
     171            _antList.back().zz       = parser.antZ * 1e-4;
    160172            _antList.back().message  = rr;
    161173
    162174            // Remember station position for 1003 message decoding
    163             _antXYZ[0] = _Parser.antX * 1e-4;
    164             _antXYZ[1] = _Parser.antY * 1e-4;
    165             _antXYZ[2] = _Parser.antZ * 1e-4;
     175            _antXYZ[0] = parser.antX * 1e-4;
     176            _antXYZ[1] = parser.antY * 1e-4;
     177            _antXYZ[2] = parser.antZ * 1e-4;
    166178          }
    167179
     
    172184            _antList.push_back(t_antInfo());
    173185            _antList.back().type     = t_antInfo::ARP;
    174             _antList.back().xx       = _Parser.antX * 1e-4;
    175             _antList.back().yy       = _Parser.antY * 1e-4;
    176             _antList.back().zz       = _Parser.antZ * 1e-4;
    177             _antList.back().height   = _Parser.antH * 1e-4;
     186            _antList.back().xx       = parser.antX * 1e-4;
     187            _antList.back().yy       = parser.antY * 1e-4;
     188            _antList.back().zz       = parser.antZ * 1e-4;
     189            _antList.back().height   = parser.antH * 1e-4;
    178190            _antList.back().height_f = true;
    179191            _antList.back().message  = rr;
    180192
    181193            // Remember station position for 1003 message decoding
    182             _antXYZ[0] = _Parser.antX * 1e-4;
    183             _antXYZ[1] = _Parser.antY * 1e-4;
    184             _antXYZ[2] = _Parser.antZ * 1e-4;
     194            _antXYZ[0] = parser.antX * 1e-4;
     195            _antXYZ[1] = parser.antY * 1e-4;
     196            _antXYZ[2] = parser.antZ * 1e-4;
    185197          }
    186198
     
    190202            decoded = true;
    191203   
    192             if (!_Parser.init) {
    193               HandleHeader(&_Parser);
    194               _Parser.init = 1;
     204            if (!parser.init) {
     205              HandleHeader(&parser);
     206              parser.init = 1;
    195207            }
    196208           
     
    205217            }
    206218           
    207             for (int ii = 0; ii < _Parser.Data.numsats; ii++) {
     219            for (int ii = 0; ii < parser.Data.numsats; ii++) {
    208220              p_obs obs = new t_obs();
    209221              _obsList.push_back(obs);
    210               if      (_Parser.Data.satellites[ii] <= PRN_GPS_END) {
     222              if      (parser.Data.satellites[ii] <= PRN_GPS_END) {
    211223                obs->_o.satSys = 'G';
    212                 obs->_o.satNum = _Parser.Data.satellites[ii];
     224                obs->_o.satNum = parser.Data.satellites[ii];
    213225              }
    214               else if (_Parser.Data.satellites[ii] <= PRN_GLONASS_END) {
     226              else if (parser.Data.satellites[ii] <= PRN_GLONASS_END) {
    215227                obs->_o.satSys = 'R';
    216                 obs->_o.satNum = _Parser.Data.satellites[ii] - PRN_GLONASS_START + 1;
    217                 obs->_o.slot   = _Parser.Data.channels[ii];
     228                obs->_o.satNum = parser.Data.satellites[ii] - PRN_GLONASS_START + 1;
     229                obs->_o.slot   = parser.Data.channels[ii];
    218230              }
    219231              else {
    220232                obs->_o.satSys = 'S';
    221                 obs->_o.satNum = _Parser.Data.satellites[ii] - PRN_WAAS_START + 20;
     233                obs->_o.satNum = parser.Data.satellites[ii] - PRN_WAAS_START + 20;
    222234              }
    223               obs->_o.GPSWeek  = _Parser.Data.week;
    224               obs->_o.GPSWeeks = _Parser.Data.timeofweek / 1000.0;
     235              obs->_o.GPSWeek  = parser.Data.week;
     236              obs->_o.GPSWeeks = parser.Data.timeofweek / 1000.0;
    225237
    226238              // Estimate "GPS Integer L1 Pseudorange Modulus Ambiguity"
     
    261273              // Loop over all data types
    262274              // ------------------------
    263               for (int jj = 0; jj < _Parser.numdatatypesGPS; jj++) {
     275              for (int jj = 0; jj < parser.numdatatypesGPS; jj++) {
    264276                int v = 0;
    265277                // sepearated declaration and initalization of df and pos. Perlt
    266278                int df;
    267279                int pos;
    268                 df = _Parser.dataflag[jj];
    269                 pos = _Parser.datapos[jj];
    270                 if ( (_Parser.Data.dataflags[ii] & df)
    271                      && !isnan(_Parser.Data.measdata[ii][pos])
    272                      && !isinf(_Parser.Data.measdata[ii][pos])) {
     280                df = parser.dataflag[jj];
     281                pos = parser.datapos[jj];
     282                if ( (parser.Data.dataflags[ii] & df)
     283                     && !isnan(parser.Data.measdata[ii][pos])
     284                     && !isinf(parser.Data.measdata[ii][pos])) {
    273285                  v = 1;
    274286                }
    275287                else {
    276                   df = _Parser.dataflagGPS[jj];
    277                   pos = _Parser.dataposGPS[jj];
    278                   if ( (_Parser.Data.dataflags[ii] & df)
    279                        && !isnan(_Parser.Data.measdata[ii][pos])
    280                        && !isinf(_Parser.Data.measdata[ii][pos])) {
     288                  df = parser.dataflagGPS[jj];
     289                  pos = parser.dataposGPS[jj];
     290                  if ( (parser.Data.dataflags[ii] & df)
     291                       && !isnan(parser.Data.measdata[ii][pos])
     292                       && !isinf(parser.Data.measdata[ii][pos])) {
    281293                    v = 1;
    282294                  }
     
    287299                else
    288300                {
    289                   int isat = (_Parser.Data.satellites[ii] < 120
    290                               ? _Parser.Data.satellites[ii]
    291                               : _Parser.Data.satellites[ii] - 80);
     301                  int isat = (parser.Data.satellites[ii] < 120
     302                              ? parser.Data.satellites[ii]
     303                              : parser.Data.satellites[ii] - 80);
    292304                 
    293305                  // variables df and pos are used consequently. Perlt
    294306                  if      (df & GNSSDF_C1DATA) {
    295                     obs->_o.C1 = _Parser.Data.measdata[ii][pos] + modulusAmb;
     307                    obs->_o.C1 = parser.Data.measdata[ii][pos] + modulusAmb;
    296308                  }
    297309                  else if (df & GNSSDF_C2DATA) {
    298                     obs->_o.C2 = _Parser.Data.measdata[ii][pos] + modulusAmb;
     310                    obs->_o.C2 = parser.Data.measdata[ii][pos] + modulusAmb;
    299311                  }
    300312                  else if (df & GNSSDF_P1DATA) {
    301                     obs->_o.P1 = _Parser.Data.measdata[ii][pos] + modulusAmb;
     313                    obs->_o.P1 = parser.Data.measdata[ii][pos] + modulusAmb;
    302314                  }
    303315                  else if (df & GNSSDF_P2DATA) {
    304                     obs->_o.P2 = _Parser.Data.measdata[ii][pos] + modulusAmb;
     316                    obs->_o.P2 = parser.Data.measdata[ii][pos] + modulusAmb;
    305317                  }
    306318                  else if (df & (GNSSDF_L1CDATA|GNSSDF_L1PDATA)) {
    307                     obs->_o.L1            = _Parser.Data.measdata[ii][pos] + modulusAmb;
    308                     obs->_o.SNR1          = _Parser.Data.snrL1[ii];
    309                     obs->_o.lock_timei_L1 = _Parser.lastlockGPSl1[isat];
     319                    obs->_o.L1            = parser.Data.measdata[ii][pos] + modulusAmb;
     320                    obs->_o.SNR1          = parser.Data.snrL1[ii];
     321                    obs->_o.lock_timei_L1 = parser.lastlockGPSl1[isat];
    310322                  }
    311323                  else if (df & (GNSSDF_L2CDATA|GNSSDF_L2PDATA)) {
    312                     obs->_o.L2            = _Parser.Data.measdata[ii][pos] + modulusAmb;
    313                     obs->_o.SNR2          = _Parser.Data.snrL2[ii];
    314                     obs->_o.lock_timei_L2 = _Parser.lastlockGPSl2[isat];
     324                    obs->_o.L2            = parser.Data.measdata[ii][pos] + modulusAmb;
     325                    obs->_o.SNR2          = parser.Data.snrL2[ii];
     326                    obs->_o.lock_timei_L2 = parser.lastlockGPSl2[isat];
    315327                  }
    316328                  else if (df & (GNSSDF_S1CDATA|GNSSDF_S1PDATA)) {
    317                     obs->_o.S1   = _Parser.Data.measdata[ii][pos];
     329                    obs->_o.S1   = parser.Data.measdata[ii][pos];
    318330                  }
    319331                  else if (df & (GNSSDF_S2CDATA|GNSSDF_S2PDATA)) {
    320                     obs->_o.S2   = _Parser.Data.measdata[ii][pos];
     332                    obs->_o.S2   = parser.Data.measdata[ii][pos];
    321333                  }
    322334                }
     
    329341          else if (rr == 1019) {
    330342            decoded = true;
    331             gpsephemeris* ep = new gpsephemeris(_Parser.ephemerisGPS);
     343            gpsephemeris* ep = new gpsephemeris(parser.ephemerisGPS);
    332344            emit newGPSEph(ep);
    333345          }
     
    337349          else if (rr == 1020) {
    338350            decoded = true;
    339             glonassephemeris* ep = new glonassephemeris(_Parser.ephemerisGLONASS);
     351            glonassephemeris* ep = new glonassephemeris(parser.ephemerisGLONASS);
    340352            emit newGlonassEph(ep);
    341353          }
     
    343355      }
    344356    }
    345     if (!_inputFromFile && _mode == unknown && decoded) {
     357    if (!_rawFile && _mode == unknown && decoded) {
    346358      _mode = observations;
    347359    }
  • trunk/BNC/RTCM3/RTCM3Decoder.h

    r2387 r2527  
    3333#include "RTCM3coDecoder.h"
    3434#include "ephemeris.h"
     35#include "bncrawfile.h"
    3536
    3637extern "C" {
     
    4142Q_OBJECT
    4243 public:
    43   RTCM3Decoder(const QString& staID, bool inputFromFile);
     44  RTCM3Decoder(const QString& staID, bncRawFile* rawFile);
    4445  virtual ~RTCM3Decoder();
    4546  virtual t_irc Decode(char* buffer, int bufLen, std::vector<std::string>& errmsg);
     
    6162  QString                _staID;
    6263  QString                _checkMountPoint;
    63   struct RTCM3ParserData _Parser;
     64  QMap<QByteArray, RTCM3ParserData> _parsers;
    6465  RTCM3coDecoder*        _coDecoder;
    6566  t_mode                 _mode;
     
    6768  std::map<std::string, t_ephGPS> _ephList;
    6869  double                 _antXYZ[3];
    69   bool                   _inputFromFile;
     70  bncRawFile*            _rawFile;
    7071};
    7172
  • trunk/BNC/bncgetthread.cpp

    r2526 r2527  
    300300           _format.indexOf("RTCM 3") != -1 ) {
    301301    emit(newMessage(_staID + ": Get data in RTCM 3.x format", true));
    302     _decoder = new RTCM3Decoder(_staID, bool(_rawFile != 0));
     302    _decoder = new RTCM3Decoder(_staID, _rawFile);
    303303    connect((RTCM3Decoder*) _decoder, SIGNAL(newMessage(QByteArray,bool)),
    304304            this, SIGNAL(newMessage(QByteArray,bool)));
     
    387387      }
    388388      else if (_rawFile) {
    389         QByteArray currStaID;
    390         QByteArray currFormat;
    391         data = _rawFile->readChunk(currStaID, currFormat);
     389        data = _rawFile->readChunk();
    392390
    393391        if (data.isEmpty()) {
  • trunk/BNC/bncrawfile.cpp

    r2526 r2527  
    105105// Raw Input
    106106////////////////////////////////////////////////////////////////////////////
    107 QByteArray bncRawFile::readChunk(QByteArray& currStaID, QByteArray& currFormat){
     107QByteArray bncRawFile::readChunk(){
    108108
    109109  QByteArray data;
     
    113113    QStringList lst  = line.split(' ');
    114114   
    115     currStaID  = lst.value(0).toAscii();
    116     currFormat = lst.value(1).toAscii();
     115    _staID  = lst.value(0).toAscii();
     116    _format = lst.value(1).toAscii();
    117117    int nBytes = lst.value(2).toInt();
    118118
  • trunk/BNC/bncrawfile.h

    r2526 r2527  
    3030
    3131#include "bnccaster.h"
    32 #include "RTCM3/RTCM3Decoder.h"
    3332
    3433class bncRawFile {
     
    4342  QByteArray format() const {return _format;}
    4443  QByteArray staID() const {return _staID;}
    45   QByteArray readChunk(QByteArray& currStaID, QByteArray& currFormat);
     44  QByteArray readChunk();
    4645  void writeRawData(const QByteArray& data, const QByteArray& staID,
    4746                    const QByteArray& format);
Note: See TracChangeset for help on using the changeset viewer.