Changeset 1313 in ntrip for trunk/BNC/GPSS


Ignore:
Timestamp:
Dec 20, 2008, 1:59:44 PM (15 years ago)
Author:
mervart
Message:

* empty log message *

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/BNC/GPSS/gpssDecoder.cpp

    r1312 r1313  
    3939////////////////////////////////////////////////////////////////////////////
    4040gpssDecoder::gpssDecoder() : GPSDecoder() {
    41   _mode = MODE_SEARCH;
     41  _mode       = MODE_SEARCH;
     42  _recordSize = 0;
    4243}
    4344
     
    5354  errmsg.clear();
    5455
     56  if (_mode == MODE_SEARCH) {
     57    _buffer.clear();
     58  }
    5559  _buffer.append(data, dataLen);
    5660
    5761  EPOCHHEADER   epochHdr;
    58   t_obsInternal gpsObs;
    5962  gpsephemeris  gpsEph;
    60   int           recordSize;
    6163
    6264  unsigned offset     = 0;
     
    8486      case MODE_EPOCH:
    8587      case MODE_EPH:
    86         if (offset+sizeof(recordSize) > _buffer.size()) {
     88        if (offset+sizeof(_recordSize) > _buffer.size()) {
    8789          errmsg.push_back("Record size too large (A)");
    8890          _mode = MODE_SEARCH;
    8991        } else {
    90           memcpy(&recordSize, &_buffer[offset], sizeof(recordSize));
     92          memcpy(&_recordSize, &_buffer[offset], sizeof(_recordSize));
    9193          if (_mode == MODE_EPOCH) {
    9294            _mode = MODE_EPOCH_BODY;
     
    9597            _mode = MODE_EPH_BODY;
    9698          }
    97           offset += sizeof(recordSize) - 1;
     99          offset += sizeof(_recordSize) - 1;
    98100        }
    99101        continue;
    100102
    101103      case MODE_EPOCH_BODY:
    102         if (offset + recordSize > _buffer.size()) {
     104        if (offset + _recordSize > _buffer.size()) {
    103105          errmsg.push_back("Record size too large (B)");
    104106          _mode = MODE_SEARCH;
     
    107109          offset += sizeof(epochHdr);
    108110          for (int is = 1; is <= epochHdr.n_svs; is++) {
    109             memcpy(&gpsObs, &_buffer[offset], sizeof(gpsObs));
    110             offset += sizeof(gpsObs);
     111            t_obs* obs = new t_obs();
     112            memcpy(&(obs->_o), &_buffer[offset], sizeof(obs->_o));
     113            _obsList.push_back(obs);
     114            offset += sizeof(obs->_o);
    111115          }
    112116          _mode = MODE_EPOCH_CRC;
     
    116120
    117121      case MODE_EPH_BODY:
    118         if (offset + recordSize > _buffer.size()) {
     122        if (offset + _recordSize > _buffer.size()) {
    119123          errmsg.push_back("Record size too large (C)");
    120124          _mode = MODE_SEARCH;
    121125        } else {
    122126          memcpy(&gpsEph, &_buffer[offset], sizeof(gpsEph));
     127          emit newGPSEph(&gpsEph);
    123128          offset += sizeof(gpsEph) - 1;
    124129          _mode = MODE_EPH_CRC;
     
    144149  }
    145150
    146   return success;
     151  if (errmsg.size() == 0) {
     152    return success;
     153  }
     154  else {
     155    return failure;
     156  }
    147157}
Note: See TracChangeset for help on using the changeset viewer.