source: ntrip/trunk/BNC/src/PPP/pppEphPool.cpp@ 10460

Last change on this file since 10460 was 10330, checked in by stuerze, 11 months ago

another test is added in PPP and combination mode to check if stored ephemerides were outdated and/or not updated in between

  • Property svn:keywords set to Author Date Id Rev URL;svn:eol-style=native
  • Property svn:mime-type set to text/plain
File size: 3.6 KB
Line 
1/* -------------------------------------------------------------------------
2 * BKG NTRIP Client
3 * -------------------------------------------------------------------------
4 *
5 * Class: t_pppEphPool
6 *
7 * Purpose: Buffer with satellite ephemerides
8 *
9 * Author: L. Mervart
10 *
11 * Created: 29-Jul-2014
12 *
13 * Changes:
14 *
15 * -----------------------------------------------------------------------*/
16
17#include <iostream>
18#include "pppEphPool.h"
19#include "pppInclude.h"
20#include "pppClient.h"
21
22using namespace BNC_PPP;
23using namespace std;
24
25//
26/////////////////////////////////////////////////////////////////////////////
27void t_pppEphPool::putEphemeris(t_eph* eph) {
28 if (eph && (eph->checkState() != t_eph::bad ||
29 eph->checkState() != t_eph::unhealthy ||
30 eph->checkState() != t_eph::outdated)) {
31 _satEphPool[eph->prn().toInt()].putEphemeris(_maxQueueSize, eph);
32 }
33 else {
34 delete eph;
35 }
36}
37
38//
39/////////////////////////////////////////////////////////////////////////////
40void t_pppEphPool::putOrbCorrection(t_orbCorr* corr) {
41 if (corr) {
42 _satEphPool[corr->_prn.toInt()].putOrbCorrection(corr);
43 }
44}
45
46//
47/////////////////////////////////////////////////////////////////////////////
48void t_pppEphPool::putClkCorrection(t_clkCorr* corr) {
49 if (corr) {
50 _satEphPool[corr->_prn.toInt()].putClkCorrection(corr);
51 }
52}
53
54//
55/////////////////////////////////////////////////////////////////////////////
56t_irc t_pppEphPool::getCrd(const t_prn& prn, const bncTime& tt,
57 ColumnVector& xc, ColumnVector& vv) const {
58 return _satEphPool[prn.toInt()].getCrd(tt, xc, vv);
59}
60
61//
62/////////////////////////////////////////////////////////////////////////////
63int t_pppEphPool::getChannel(const t_prn& prn) const {
64 return _satEphPool[prn.toInt()].getChannel();
65}
66
67//
68/////////////////////////////////////////////////////////////////////////////
69void t_pppEphPool::t_satEphPool::putEphemeris(unsigned maxQueueSize, t_eph* eph) {
70 if (_ephs.empty() || eph->isNewerThan(_ephs.front())) {
71 _ephs.push_front(eph);
72 if (maxQueueSize > 0 && _ephs.size() > maxQueueSize) {
73 delete _ephs.back();
74 _ephs.pop_back();
75 }
76 }
77 else {
78 delete eph;
79 }
80}
81
82//
83/////////////////////////////////////////////////////////////////////////////
84void t_pppEphPool::t_satEphPool::putOrbCorrection(t_orbCorr* corr) {
85 if (_ephs.empty()) {
86 return;
87 }
88
89 for (unsigned ii = 0; ii < _ephs.size(); ii++) {
90 t_eph* eph = _ephs[ii];
91 if (eph->IOD() == corr->_iod) {
92 eph->setOrbCorr(corr);
93 }
94 }
95 delete corr;
96}
97
98//
99/////////////////////////////////////////////////////////////////////////////
100void t_pppEphPool::t_satEphPool::putClkCorrection(t_clkCorr* corr) {
101 if (_ephs.empty()) {
102 return;
103 }
104
105 for (unsigned ii = 0; ii < _ephs.size(); ii++) {
106 t_eph* eph = _ephs[ii];
107 if (eph->IOD() == corr->_iod) {
108 eph->setClkCorr(corr);
109 }
110 }
111 delete corr;
112}
113
114//
115/////////////////////////////////////////////////////////////////////////////
116t_irc t_pppEphPool::t_satEphPool::getCrd(const bncTime& tt, ColumnVector& xc,
117 ColumnVector& vv) const {
118 if (_ephs.empty()) {
119 return failure;
120 }
121
122 for (unsigned ii = 0; ii < _ephs.size(); ii++) {
123 const t_eph* eph = _ephs[ii];
124 t_irc irc = eph->getCrd(tt, xc, vv, OPT->useOrbClkCorr());
125 if (irc == success) {
126 if (outDatedBcep(eph, tt)) {
127 continue;
128 }
129 return irc;
130 }
131 }
132 return failure;
133}
134
135//
136/////////////////////////////////////////////////////////////////////////////
137int t_pppEphPool::t_satEphPool::getChannel() const {
138 if (!_ephs.empty()) {
139 return _ephs[0]->slotNum();
140 }
141 return 0;
142}
Note: See TracBrowser for help on using the repository browser.