Changeset 82 in ntrip


Ignore:
Timestamp:
Aug 30, 2006, 5:35:40 PM (18 years ago)
Author:
mervart
Message:

* empty log message *

Location:
trunk/BNC
Files:
2 added
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/BNC/bnc.pro

    r73 r82  
    11
    22HEADERS =             bncgetthread.h    bncwindow.h   bnctabledlg.h   \
    3           bnccaster.h bncrinex.h                                      \
     3          bnccaster.h bncrinex.h bncapp.h bncutils.h                  \
    44          RTCM/format.h RTCM/GPSDecoder.h RTCM/m_data.h RTCM/RTCM.h   \
    55          RTCM3/rtcm3.h RTCM3/rtcm3torinex.h                          \
     
    99
    1010SOURCES = bncmain.cpp bncgetthread.cpp  bncwindow.cpp bnctabledlg.cpp \
    11           bnccaster.cpp bncrinex.cpp                                  \
     11          bnccaster.cpp bncrinex.cpp bncapp.cpp bncutils.cpp          \
    1212          RTCM/m_date.cpp RTCM/RTCM.cpp                               \
    1313          RTCM3/rtcm3.cpp RTCM3/rtcm3torinex.cpp                      \
  • trunk/BNC/bnccaster.cpp

    r73 r82  
    120120void bncCaster::slotGetThreadError(const QByteArray& mountPoint) {
    121121  _mountPoints.removeAll(mountPoint);
    122   qWarning("Mountpoint size %d", _mountPoints.size());
     122  emit( newMessage(
     123           QString("Mountpoint size %1").arg(_mountPoints.size()).toAscii()) );
    123124  if (_mountPoints.size() == 0) {
    124     qWarning("bncCaster:: last get thread terminated\n");
     125    emit(newMessage("bncCaster:: last get thread terminated"));
    125126    emit getThreadErrors();
    126127  }
  • trunk/BNC/bnccaster.h

    r73 r82  
    2020   ~bncCaster();
    2121   void addGetThread(bncGetThread* getThread);
     22   int  nMountPoints() const {return _mountPoints.size();}
    2223
    2324 signals:
    2425   void getThreadErrors();   
     26   void newMessage(const QByteArray& msg);
    2527
    2628 public slots:
  • trunk/BNC/bncgetthread.cpp

    r65 r82  
    6161                                  const QByteArray& mountPoint,
    6262                                  const QByteArray& user,
    63                                   const QByteArray& password) {
     63                                  const QByteArray& password,
     64                                  QString& msg) {
     65
     66  msg.clear();
    6467
    6568  QTcpSocket* socket = new QTcpSocket();
     
    8285
    8386  if (!socket->waitForConnected(timeOut)) {
    84     qWarning("Connect timeout");
     87    msg += "Connect timeout\n";
    8588    delete socket;
    8689    return 0;
     
    9598                      "\r\n\r\n";
    9699
    97   qWarning(reqStr);
     100  msg += reqStr;
    98101
    99102  socket->write(reqStr, reqStr.length());
    100103
    101104  if (!socket->waitForBytesWritten(timeOut)) {
    102     qWarning("Write timeout");
     105    msg += "Write timeout\n";
    103106    delete socket;
    104107    return 0;
     
    114117  // Send the Request
    115118  // ----------------
     119  QString msg;
    116120  _socket = bncGetThread::request(_host, _port, _proxyHost, _proxyPort,
    117                                   _mountPoint, _user, _password);
     121                                  _mountPoint, _user, _password, msg);
     122  emit(newMessage(msg.toAscii()));
     123
    118124  if (!_socket) {
    119125    return exit(1);
     
    126132    QString line = _socket->readLine();
    127133    if (line.indexOf("ICY 200 OK") != 0) {
    128       qWarning(("Wrong Caster Response:\n" + line).toAscii());
     134      emit(newMessage(("Wrong Caster Response:\n" + line).toAscii()));
    129135      return exit(1);
    130136    }
    131137  }
    132138  else {
    133     qWarning("Response Timeout");
     139    emit(newMessage("Response Timeout"));
    134140    return exit(1);
    135141  }
     
    140146
    141147  if      (_format.indexOf("RTCM_2") != -1) {
    142     qWarning("Get Data: " + _mountPoint + " in RTCM 2.x format");
     148    emit(newMessage("Get Data: " + _mountPoint + " in RTCM 2.x format"));
    143149    decoder = new RTCM('A',true);
    144150  }
    145151  else if (_format.indexOf("RTCM_3") != -1) {
    146     qWarning("Get Data: " + _mountPoint + " in RTCM 3.0 format");
     152    emit(newMessage("Get Data: " + _mountPoint + " in RTCM 3.0 format"));
    147153    decoder = new rtcm3();
    148154  }
    149155  else if (_format.indexOf("RTIGS") != -1) {
    150     qWarning("Get Data: " + _mountPoint + " in RTIGS format");
     156    emit(newMessage("Get Data: " + _mountPoint + " in RTIGS format"));
    151157    decoder = new rtigs();
    152158  }
    153159  else {
    154     qWarning(_mountPoint + " Unknown data format " + _format);
     160    emit(newMessage(_mountPoint + " Unknown data format " + _format));
    155161    return exit(1);
    156162  }
     
    173179    }
    174180    else {
    175       qWarning("Data Timeout");
     181      emit(newMessage("Data Timeout"));
    176182      return exit(1);
    177183    }
     
    188194  QThread::exit(exitCode);
    189195}
     196
  • trunk/BNC/bncgetthread.h

    r59 r82  
    2323                                      const QByteArray& mountPoint,
    2424                                      const QByteArray& user,
    25                                       const QByteArray& password);
     25                                      const QByteArray& password,
     26                                      QString& msg);
    2627   QByteArray mountPoint() {return _mountPoint;}
    2728
     
    2930   void newObs(const QByteArray& mountPoint, Observation* obs);
    3031   void error(const QByteArray& mountPoint);
     32   void newMessage(const QByteArray& msg);
    3133
    3234 protected:
    3335   virtual void run();
    3436 private:
     37   void message(const QString&);
    3538   void exit(int exitCode = 0);
    3639   QTcpSocket* _socket;
  • trunk/BNC/bncmain.cpp

    r59 r82  
    1616 * -----------------------------------------------------------------------*/
    1717
    18 #ifdef WIN32
    19 #include <windows.h>
    20 #endif
    21 
    2218#include <QApplication>
    2319#include <QFile>
    2420#include <iostream>
    2521
     22#include "bncapp.h"
    2623#include "bncwindow.h"
    2724
    2825using namespace std;
    2926
    30 #ifdef WIN32
    31 QFile       logFile("BNC.LOG");
    32 QTextStream logStream;
    33 #endif
    34 
    35 void myMessageOutput(QtMsgType, const char *msg) {
    36 #ifdef WIN32
    37   logStream << msg << endl;
    38   logStream.flush();
    39 #else
    40   cerr << msg << endl;
    41 #endif
    42 }
    43 
     27// Main Program
     28/////////////////////////////////////////////////////////////////////////////
    4429int main(int argc, char *argv[]) {
    4530
     
    4934  }
    5035
    51   QApplication app(argc, argv, GUIenabled);
    52 
    53 #ifdef WIN32
    54   logFile.open(QIODevice::WriteOnly);
    55   logStream.setDevice(&logFile);
    56 #endif
    57   qInstallMsgHandler(myMessageOutput);
     36  bncApp app(argc, argv, GUIenabled);
    5837
    5938  QCoreApplication::setOrganizationName("AIUB");
     
    6140  QCoreApplication::setApplicationName("Bernese NTRIP Client");
    6241
    63   bncWindow* bncWin = 0;
    64 
    6542  if (GUIenabled) {
    66     bncWin = new bncWindow();
     43    bncWindow* bncWin = new bncWindow();
    6744    bncWin->show();
    6845  }
     
    7855
    7956    app.connect(caster, SIGNAL(getThreadErrors()), &app, SLOT(quit()));
     57    app.connect(caster, SIGNAL(newMessage(const QByteArray&)),
     58                &app, SLOT(slotMessage(const QByteArray&)));
    8059
    8160    caster->start();
     
    8463    while (it.hasNext()) {
    8564      QStringList hlp = it.next().split(" ");
     65      if (hlp.size() <= 1) continue;
    8666      QUrl url(hlp[0]);
    8767      QByteArray mountPoint = url.path().mid(1).toAscii();
     
    9272                                                 mountPoint, user, password,
    9373                                                 format);
     74      app.connect(getThread, SIGNAL(newMessage(const QByteArray&)),
     75                  &app, SLOT(slotMessage(const QByteArray&)));
     76
    9477      caster->addGetThread(getThread);
    9578
    9679      getThread->start();
    9780    }
     81    if (caster->nMountPoints() == 0) {
     82      return 0;
     83    }
    9884  }
    9985  return app.exec();
  • trunk/BNC/bncrinex.cpp

    r79 r82  
    1616 * -----------------------------------------------------------------------*/
    1717
     18#include <QSettings>
     19#include <QDir>
     20#include <QDate>
     21#include <QFile>
     22#include <QTextStream>
    1823#include <iomanip>
    1924
    2025#include "bncrinex.h"
    21 
     26#include "bncutils.h"
    2227#include "RTCM3/rtcm3torinex.h"
    2328
     
    2934  _statID        = StatID;
    3035  _headerWritten = false;
     36  readSkeleton();
    3137}
    3238
     
    3743}
    3844
     45// Read Skeleton Header File
     46////////////////////////////////////////////////////////////////////////////
     47void bncRinex::readSkeleton() {
     48
     49  // Resolve Skeleton File Name
     50  // --------------------------
     51  QSettings settings;
     52  QString sklName = settings.value("rnxPath").toString();
     53  expandEnvVar(sklName);
     54  if ( sklName[sklName.length()-1] != QDir::separator() ) {
     55    sklName += QDir::separator();
     56  }
     57  sklName += _statID.left(4) + "." + settings.value("rnxSkel").toString();
     58
     59  // Read the File
     60  // -------------
     61  QFile skl(sklName);
     62  if ( skl.exists() && skl.open(QIODevice::ReadOnly) ) {
     63    QTextStream in(&skl);
     64    while ( !in.atEnd() ) {
     65      _headerLines.append( in.readLine() );
     66      if (_headerLines.last().indexOf("END OF HEADER") != -1) {
     67        break;
     68      }
     69    }
     70  }
     71}
     72
     73// File Name according to RINEX Standards
     74////////////////////////////////////////////////////////////////////////////
     75void bncRinex::resolveFileName(struct converttimeinfo& cti) {
     76
     77  QSettings settings;
     78  QString path = settings.value("rnxPath").toString();
     79  expandEnvVar(path);
     80
     81  if ( path[path.length()-1] != QDir::separator() ) {
     82    path += QDir::separator();
     83  }
     84
     85  QDate date(cti.year, cti.month, cti.day);
     86
     87  QChar ch = '0';
     88
     89  path += _statID.left(4) +
     90          QString("%1%2.%3O").arg(date.dayOfYear(), 3, 10, QChar('0'))
     91                             .arg(ch)
     92                             .arg(date.year() % 100, 2, 10, QChar('0'));
     93
     94  _fName = path.toAscii();
     95}
     96
    3997// Write RINEX Header
    4098////////////////////////////////////////////////////////////////////////////
     
    43101  // Open the Output File
    44102  // --------------------
    45   QByteArray fname = _statID + ".RXO";
    46   _out.open(fname.data());
    47 
    48   // Write mandatory Records
    49   // -----------------------
     103  resolveFileName(cti);
     104  _out.open(_fName.data());
    50105  _out.setf(ios::fixed);
    51106  _out.setf(ios::left);
    52 
    53   double approxPos[3];  approxPos[0]  = approxPos[1]  = approxPos[2]  = 0.0;
    54   double antennaNEU[3]; antennaNEU[0] = antennaNEU[1] = antennaNEU[2] = 0.0;
    55 
    56   _out << "     2.10           OBSERVATION DATA    G (GPS)             RINEX VERSION / TYPE" << endl;
    57   _out << "BNC                 LM                  27-Aug-2006         PGM / RUN BY / DATE"  << endl;
    58   _out << setw(60) << _statID.data()                               << "MARKER NAME"          << endl;
    59   _out << setw(60) << "BKG"                                        << "OBSERVER / AGENCY"    << endl;
    60   _out << setw(20) << "unknown"   
    61        << setw(20) << "unknown"
    62        << setw(20) << "unknown"                                    << "REC # / TYPE / VERS"  << endl;
    63   _out << setw(20) << "unknown"
    64        << setw(20) << "unknown"
    65        << setw(20) << " "                                          << "ANT # / TYPE"         << endl;
    66   _out.unsetf(ios::left);
    67   _out << setw(14) << setprecision(4) << approxPos[0]
    68        << setw(14) << setprecision(4) << approxPos[1]
    69        << setw(14) << setprecision(4) << approxPos[2]
    70        << "                  "                                     << "APPROX POSITION XYZ"  << endl;
    71   _out << setw(14) << setprecision(4) << antennaNEU[0]
    72        << setw(14) << setprecision(4) << antennaNEU[1]
    73        << setw(14) << setprecision(4) << antennaNEU[2]
    74        << "                  "                                     << "ANTENNA: DELTA H/E/N" << endl;
    75   _out << "     1     1                                                WAVELENGTH FACT L1/2" << endl;
    76   _out << "     4    P1    P2    L1    L2                              # / TYPES OF OBSERV"  << endl;
    77   _out << setw(6) << cti.year
    78        << setw(6) << cti.month
    79        << setw(6) << cti.day
    80        << setw(6) << cti.hour
    81        << setw(6) << cti.minute
    82        << setw(13) << setprecision(7) << second
    83        << "                 "                                      << "TIME OF FIRST OBS"    << endl;
    84   _out << "                                                            END OF HEADER"        << endl;
     107   
     108
     109  // Copy Skeleton Header
     110  // --------------------
     111  if (_headerLines.size() > 0) {
     112    QStringListIterator it(_headerLines);
     113    while (it.hasNext()) {
     114      QString line = it.next();
     115      if      (line.indexOf("# / TYPES OF OBSERV") != -1) {
     116        _out << "     4    P1    P2    L1    L2"
     117                "                              # / TYPES OF OBSERV"  << endl;
     118      }
     119      else if (line.indexOf("TIME OF FIRST OBS") != -1) {
     120        _out << setw(6) << cti.year
     121             << setw(6) << cti.month
     122             << setw(6) << cti.day
     123             << setw(6) << cti.hour
     124             << setw(6) << cti.minute
     125             << setw(13) << setprecision(7) << second
     126             << "                 TIME OF FIRST OBS"    << endl;
     127      }
     128      else {
     129        _out << line.toAscii().data() << endl;
     130      }
     131    }
     132  }
     133
     134  // Write Dummy Header
     135  // ------------------
     136  else {
     137    double approxPos[3];  approxPos[0]  = approxPos[1]  = approxPos[2]  = 0.0;
     138    double antennaNEU[3]; antennaNEU[0] = antennaNEU[1] = antennaNEU[2] = 0.0;
     139   
     140    _out << "     2.10           OBSERVATION DATA    G (GPS)             RINEX VERSION / TYPE" << endl;
     141    _out << "BNC                 LM                  27-Aug-2006         PGM / RUN BY / DATE"  << endl;
     142    _out << setw(60) << _statID.data()                               << "MARKER NAME"          << endl;
     143    _out << setw(60) << "BKG"                                        << "OBSERVER / AGENCY"    << endl;
     144    _out << setw(20) << "unknown"   
     145         << setw(20) << "unknown"
     146         << setw(20) << "unknown"                                    << "REC # / TYPE / VERS"  << endl;
     147    _out << setw(20) << "unknown"
     148         << setw(20) << "unknown"
     149         << setw(20) << " "                                          << "ANT # / TYPE"         << endl;
     150    _out.unsetf(ios::left);
     151    _out << setw(14) << setprecision(4) << approxPos[0]
     152         << setw(14) << setprecision(4) << approxPos[1]
     153         << setw(14) << setprecision(4) << approxPos[2]
     154         << "                  "                                     << "APPROX POSITION XYZ"  << endl;
     155    _out << setw(14) << setprecision(4) << antennaNEU[0]
     156         << setw(14) << setprecision(4) << antennaNEU[1]
     157         << setw(14) << setprecision(4) << antennaNEU[2]
     158         << "                  "                                     << "ANTENNA: DELTA H/E/N" << endl;
     159    _out << "     1     1                                                WAVELENGTH FACT L1/2" << endl;
     160    _out << "     4    P1    P2    L1    L2                              # / TYPES OF OBSERV"  << endl;
     161    _out << setw(6) << cti.year
     162         << setw(6) << cti.month
     163         << setw(6) << cti.day
     164         << setw(6) << cti.hour
     165         << setw(6) << cti.minute
     166         << setw(13) << setprecision(7) << second
     167         << "                 "                                      << "TIME OF FIRST OBS"    << endl;
     168    _out << "                                                            END OF HEADER"        << endl;
     169  }
    85170
    86171  _headerWritten = true;
  • trunk/BNC/bncrinex.h

    r78 r82  
    1818
    1919 private:
     20   void resolveFileName(struct converttimeinfo& cti);
     21   void readSkeleton();
    2022   void writeHeader(struct converttimeinfo& cti, double second);
    2123
    2224   QByteArray          _statID;
     25   QByteArray          _fName;
    2326   QList<Observation*> _obs;
    2427   ofstream            _out;
     28   QStringList         _headerLines;
    2529   bool                _headerWritten;
    2630};
  • trunk/BNC/bnctabledlg.cpp

    r59 r82  
    8989  // Send the Request
    9090  // ----------------
     91  QString msg;
    9192  QTcpSocket* socket = bncGetThread::request(host, port, _proxyHost,
    9293                                             _proxyPort, mountPoint,
    93                                              user, password);
     94                                             user, password, msg);
    9495  if (!socket) {
     96    QMessageBox::warning(0, "BNC", msg);
    9597    return;
    9698  }
  • trunk/BNC/bnctabledlg.h

    r35 r82  
    1414  signals:
    1515    void newMountPoints(QStringList* mountPoints);
    16 
     16 
    1717  private slots:
    1818    virtual void accept();
Note: See TracChangeset for help on using the changeset viewer.