source: ntrip/trunk/BNC/src/upload/bncephuploadcaster.cpp @ 8904

Last change on this file since 8904 was 8904, checked in by stuerze, 7 months ago

minor changes

File size: 4.5 KB
Line 
1/* -------------------------------------------------------------------------
2 * BKG NTRIP Server
3 * -------------------------------------------------------------------------
4 *
5 * Class:      bncEphUploadCaster
6 *
7 * Purpose:    Connection to NTRIP Caster for Ephemeris
8 *
9 * Author:     L. Mervart
10 *
11 * Created:    03-Apr-2011
12 *
13 * Changes:
14 *
15 * -----------------------------------------------------------------------*/
16
17#include <iostream>
18#include <math.h>
19#include "bncephuploadcaster.h"
20#include "bncsettings.h"
21#include "RTCM3/ephEncoder.h"
22
23using namespace std;
24
25// Constructor
26////////////////////////////////////////////////////////////////////////////
27bncEphUploadCaster::bncEphUploadCaster() : bncEphUser(true) {
28  bncSettings settings;
29  int     sampl    = settings.value("uploadSamplRtcmEph").toInt();
30
31  // List of upload casters
32  // ----------------------
33  int iRow = -1;
34  QListIterator<QString> it(settings.value("uploadEphMountpointsOut").toStringList());
35  while (it.hasNext()) {
36    QStringList hlp = it.next().split(",");
37    if (hlp.size() > 5) {
38      ++iRow;
39      int  outPort = hlp[1].toInt();
40      bncUploadCaster* newCaster = new bncUploadCaster(hlp[2], hlp[0], outPort,
41                                                       hlp[3], hlp[4],
42                                                       hlp[5], iRow, sampl);
43
44      connect(newCaster, SIGNAL(newBytes(QByteArray,double)),
45              this, SIGNAL(newBytes(QByteArray,double)));
46
47      newCaster->start();
48      _casters.push_back(newCaster);
49    }
50  }
51}
52
53// Destructor
54////////////////////////////////////////////////////////////////////////////
55bncEphUploadCaster::~bncEphUploadCaster() {
56  for (int ic = 0; ic < _casters.size(); ic++) {
57    _casters[ic]->deleteSafely();
58  }
59}
60
61// List of Stored Ephemeris changed (virtual)
62////////////////////////////////////////////////////////////////////////////
63void bncEphUploadCaster::ephBufferChanged() {
64  bncSettings settings;
65  int iRow = -1;
66  QListIterator<QString> it(settings.value("uploadEphMountpointsOut").toStringList());
67  while (it.hasNext()) {
68    QStringList hlp = it.next().split(",");
69    if (hlp.size() > 3) {
70      ++iRow;
71      QString system = hlp[6];
72      QByteArray outBuffer;
73
74      QDateTime now = currentDateAndTimeGPS();
75      bncTime currentTime(now.toString(Qt::ISODate).toStdString());
76
77      QListIterator<QString> it(prnList());
78      while (it.hasNext()) {
79        const t_eph* eph = ephLast(it.next());
80
81        bncTime toc = eph->TOC();
82        double timeDiff = fabs(toc - currentTime);
83
84        const t_ephGPS*  ephGPS  = dynamic_cast<const t_ephGPS*>(eph);
85        const t_ephGlo*  ephGlo  = dynamic_cast<const t_ephGlo*>(eph);
86        const t_ephGal*  ephGal  = dynamic_cast<const t_ephGal*>(eph);
87        const t_ephSBAS* ephSBAS = dynamic_cast<const t_ephSBAS*>(eph);
88        const t_ephBDS*  ephBDS  = dynamic_cast<const t_ephBDS*>(eph);
89
90        unsigned char Array[80];
91        int size = 0;
92
93        if      (ephGPS && ephGPS->type() == t_eph::GPS  &&  (system == "ALL" || system == "GPS")) {
94          if (timeDiff <= 4*3600) {
95            size = t_ephEncoder::RTCM3(*ephGPS, Array);
96          }
97        }
98        else if (ephGPS && ephGPS->type() == t_eph::QZSS && (system == "ALL" || system == "QZSS")) {
99          if (timeDiff <= 4*3600) {
100            size = t_ephEncoder::RTCM3(*ephGPS, Array);
101          }
102        }
103        else if (ephGlo && (system == "ALL" || system == "GLONASS")) {
104          if (timeDiff <= 1*3600) {
105            size = t_ephEncoder::RTCM3(*ephGlo, Array);
106          }
107        }
108        else if (ephGal && (system == "ALL" || system == "Galileo")) {
109          if (timeDiff <= 2*3600) {
110            size = t_ephEncoder::RTCM3(*ephGal, Array);
111          }
112        }
113        else if (ephSBAS && (system == "ALL" || system == "SBAS")) {
114          if (timeDiff <= 1*3600) {
115            size = t_ephEncoder::RTCM3(*ephSBAS, Array);
116          }
117        }
118        else if (ephBDS && (system == "ALL" || system == "BDS")) {
119          if (timeDiff <= 6*3600) {
120            size = t_ephEncoder::RTCM3(*ephBDS, Array);
121          }
122        }
123        else if (ephGPS && ephGPS->type() == t_eph::IRNSS && (system == "ALL" || system == "IRNSS")) {
124          if (timeDiff <= 24*3600) {
125            size = t_ephEncoder::RTCM3(*ephGPS, Array);
126          }
127        }
128        if (size > 0) {
129          outBuffer += QByteArray((char*) Array, size);
130        }
131      }
132      if (outBuffer.size() > 0) {
133        _casters.at(iRow)->setOutBuffer(outBuffer);
134      }
135    }
136  }
137}
Note: See TracBrowser for help on using the repository browser.