source: ntrip/branches/BNC_2.12/src/upload/bncrtnetuploadcaster.cpp@ 8509

Last change on this file since 8509 was 8509, checked in by stuerze, 5 years ago

minor changes

File size: 98.9 KB
RevLine 
[3222]1/* -------------------------------------------------------------------------
2 * BKG NTRIP Server
3 * -------------------------------------------------------------------------
4 *
[3224]5 * Class: bncRtnetUploadCaster
[3222]6 *
7 * Purpose: Connection to NTRIP Caster
8 *
9 * Author: L. Mervart
10 *
11 * Created: 29-Mar-2011
12 *
[5662]13 * Changes:
[3222]14 *
15 * -----------------------------------------------------------------------*/
16
17#include <math.h>
[5662]18#include "bncrtnetuploadcaster.h"
[3222]19#include "bncsettings.h"
[3224]20#include "bncephuser.h"
[3222]21#include "bncclockrinex.h"
22#include "bncsp3.h"
[6812]23#include "gnss.h"
[3222]24
25using namespace std;
26
27// Constructor
28////////////////////////////////////////////////////////////////////////////
[3224]29bncRtnetUploadCaster::bncRtnetUploadCaster(const QString& mountpoint,
[6877]30 const QString& outHost, int outPort, const QString& password,
31 const QString& crdTrafo, bool CoM, const QString& sp3FileName,
32 const QString& rnxFileName, int PID, int SID, int IOD, int iRow) :
33 bncUploadCaster(mountpoint, outHost, outPort, password, iRow, 0) {
[3224]34
[8362]35 if (!mountpoint.isEmpty()) {
36 _casterID += mountpoint;
37 }
[5130]38 if (!outHost.isEmpty()) {
[8362]39 _casterID += " " + outHost;
40 if (outPort) {
41 _casterID += ":" + QString("%1").arg(outPort, 10);
42 }
[5130]43 }
44 if (!crdTrafo.isEmpty()) {
45 _casterID += " " + crdTrafo;
46 }
47 if (!sp3FileName.isEmpty()) {
48 _casterID += " " + sp3FileName;
49 }
50 if (!rnxFileName.isEmpty()) {
51 _casterID += " " + rnxFileName;
52 }
53
[6877]54 _crdTrafo = crdTrafo;
55 _CoM = CoM;
56 _PID = PID;
57 _SID = SID;
58 _IOD = IOD;
[3222]59
[3224]60 // Member that receives the ephemeris
61 // ----------------------------------
[6441]62 _ephUser = new bncEphUser(true);
[3222]63
[3272]64 bncSettings settings;
[6877]65 QString intr = settings.value("uploadIntr").toString();
[7297]66 QStringList hlp = settings.value("cmbStreams").toStringList();
[6559]67 _samplRtcmEphCorr = settings.value("uploadSamplRtcmEphCorr").toDouble();
68 if (hlp.size() > 1) { // combination stream upload
[6877]69 _samplRtcmClkCorr = settings.value("cmbSampl").toInt();
[6557]70 }
[6877]71 else { // single stream upload or sp3 file generation
72 _samplRtcmClkCorr = 5; // default
73 }
74 int samplClkRnx = settings.value("uploadSamplClkRnx").toInt();
75 int samplSp3 = settings.value("uploadSamplSp3").toInt() * 60;
[4174]76
77 if (_samplRtcmEphCorr == 0.0) {
[3753]78 _usedEph = 0;
79 }
80 else {
[6442]81 _usedEph = new QMap<QString, const t_eph*>;
[3753]82 }
[3272]83
[3222]84 // RINEX writer
85 // ------------
86 if (!rnxFileName.isEmpty()) {
[4174]87 _rnx = new bncClockRinex(rnxFileName, intr, samplClkRnx);
[3222]88 }
89 else {
90 _rnx = 0;
91 }
92
93 // SP3 writer
94 // ----------
95 if (!sp3FileName.isEmpty()) {
[4174]96 _sp3 = new bncSP3(sp3FileName, intr, samplSp3);
[3222]97 }
98 else {
99 _sp3 = 0;
100 }
101
102 // Set Transformation Parameters
103 // -----------------------------
[8411]104 // Transformation Parameters from ITRF2014 to ETRF2000
[6877]105 if (_crdTrafo == "ETRF2000") {
[8411]106 _dx = 0.0537;
107 _dy = 0.0512;
108 _dz = -0.0551;
[8101]109 _dxr = 0.0001;
110 _dyr = 0.0001;
[8411]111 _dzr = -0.0019;
112 _ox = -0.000891;
113 _oy = -0.005390;
114 _oz = 0.008712;
115 _oxr = -0.000081;
116 _oyr = -0.000490;
117 _ozr = +0.000792;
118 _sc = 1.02;
119 _scr = 0.11;
[8101]120 _t0 = 2000.0;
[3222]121 }
[8101]122 // Transformation Parameters from ITRF2014 to GDA2020 (Ryan Ruddick, GA)
123 else if (_crdTrafo == "GDA2020") {
124 _dx = 0.0;
125 _dy = 0.0;
126 _dz = 0.0;
127 _dxr = 0.0;
128 _dyr = 0.0;
129 _dzr = 0.0;
130 _ox = 0.0;
131 _oy = 0.0;
132 _oz = 0.0;
133 _oxr = 0.00150379;
134 _oyr = 0.00118346;
135 _ozr = 0.00120716;
136 _sc = 0.0;
137 _scr = 0.0;
138 _t0 = 2020.0;
[3222]139 }
[8101]140 // Transformation Parameters from IGb14 to SIRGAS2000 (Sonia Costa, BRA)
141 else if (_crdTrafo == "SIRGAS2000") {
142 _dx = 0.0026;
143 _dy = 0.0018;
144 _dz = -0.0061;
145 _dxr = 0.0000;
146 _dyr = 0.0000;
147 _dzr = 0.0000;
148 _ox = 0.000170;
149 _oy = -0.000030;
150 _oz = 0.000070;
151 _oxr = 0.000000;
152 _oyr = 0.000000;
153 _ozr = 0.000000;
154 _sc = -1.000;
155 _scr = 0.000;
156 _t0 = 2000.4;
[3222]157 }
[8411]158 // Transformation Parameters from ITRF2014 to DREF91
[5347]159 else if (_crdTrafo == "DREF91") {
[8411]160 _dx = 0.0537;
161 _dy = 0.0512;
162 _dz = -0.0551;
[8101]163 _dxr = 0.0001;
164 _dyr = 0.0001;
[8411]165 _dzr = -0.0019;
166 _ox = -0.000233;
167 _oy = -0.005598;
168 _oz = 0.009467;
169 _oxr = -0.000081;
170 _oyr = -0.000490;
171 _ozr = 0.000792;
172 _sc = 1.02;
173 _scr = 0.11;
[8101]174 _t0 = 2000.0;
[5340]175 }
[3222]176 else if (_crdTrafo == "Custom") {
[6877]177 _dx = settings.value("trafo_dx").toDouble();
178 _dy = settings.value("trafo_dy").toDouble();
179 _dz = settings.value("trafo_dz").toDouble();
[3222]180 _dxr = settings.value("trafo_dxr").toDouble();
181 _dyr = settings.value("trafo_dyr").toDouble();
182 _dzr = settings.value("trafo_dzr").toDouble();
[6877]183 _ox = settings.value("trafo_ox").toDouble();
184 _oy = settings.value("trafo_oy").toDouble();
185 _oz = settings.value("trafo_oz").toDouble();
[3222]186 _oxr = settings.value("trafo_oxr").toDouble();
187 _oyr = settings.value("trafo_oyr").toDouble();
188 _ozr = settings.value("trafo_ozr").toDouble();
[6877]189 _sc = settings.value("trafo_sc").toDouble();
[3222]190 _scr = settings.value("trafo_scr").toDouble();
[6877]191 _t0 = settings.value("trafo_t0").toDouble();
[3222]192 }
193}
194
195// Destructor
196////////////////////////////////////////////////////////////////////////////
[3224]197bncRtnetUploadCaster::~bncRtnetUploadCaster() {
[3222]198 if (isRunning()) {
199 wait();
200 }
201 delete _rnx;
202 delete _sp3;
203 delete _ephUser;
[3753]204 delete _usedEph;
[3222]205}
206
[5662]207//
[3222]208////////////////////////////////////////////////////////////////////////////
[3224]209void bncRtnetUploadCaster::decodeRtnetStream(char* buffer, int bufLen) {
[5662]210
[3222]211 QMutexLocker locker(&_mutex);
212
[3230]213 // Append to internal buffer
214 // -------------------------
[3222]215 _rtnetStreamBuffer.append(QByteArray(buffer, bufLen));
[3230]216
217 // Select buffer part that contains last epoch
218 // -------------------------------------------
219 QStringList lines;
220 int iEpoBeg = _rtnetStreamBuffer.lastIndexOf('*'); // begin of last epoch
221 if (iEpoBeg == -1) {
[3226]222 _rtnetStreamBuffer.clear();
223 return;
[3222]224 }
[6896]225 int iEpoBegEarlier = _rtnetStreamBuffer.indexOf('*');
226 if (iEpoBegEarlier != -1 && iEpoBegEarlier < iEpoBeg) { // are there two epoch lines in buffer?
[8089]227 _rtnetStreamBuffer = _rtnetStreamBuffer.mid(iEpoBegEarlier);
[6896]228 }
229 else {
230 _rtnetStreamBuffer = _rtnetStreamBuffer.mid(iEpoBeg);
231 }
[3230]232
233 int iEpoEnd = _rtnetStreamBuffer.lastIndexOf("EOE"); // end of last epoch
234 if (iEpoEnd == -1) {
235 return;
236 }
[3226]237 else {
[6877]238 lines = _rtnetStreamBuffer.left(iEpoEnd).split('\n',
239 QString::SkipEmptyParts);
240 _rtnetStreamBuffer = _rtnetStreamBuffer.mid(iEpoEnd + 3);
[3226]241 }
[3222]242
[3226]243 if (lines.size() < 2) {
[3222]244 return;
245 }
246
[3226]247 // Read first line (with epoch time)
248 // ---------------------------------
249 QTextStream in(lines[0].toAscii());
250 QString hlp;
[6877]251 int year, month, day, hour, min;
252 double sec;
[3226]253 in >> hlp >> year >> month >> day >> hour >> min >> sec;
[6877]254 bncTime epoTime;
255 epoTime.set(year, month, day, hour, min, sec);
[3226]256
[6877]257 emit(newMessage(
258 "bncRtnetUploadCaster: decode " + QByteArray(epoTime.datestr().c_str())
259 + " " + QByteArray(epoTime.timestr().c_str()) + " "
260 + _casterID.toAscii(), false));
[4808]261
[3222]262 struct ClockOrbit co;
263 memset(&co, 0, sizeof(co));
[5672]264 co.EpochTime[CLOCKORBIT_SATGPS] = static_cast<int>(epoTime.gpssec());
265 double gt = epoTime.gpssec() + 3 * 3600 - gnumleap(year, month, day);
266 co.EpochTime[CLOCKORBIT_SATGLONASS] = static_cast<int>(fmod(gt, 86400.0));
[6846]267 co.EpochTime[CLOCKORBIT_SATGALILEO] = static_cast<int>(epoTime.gpssec());
[6877]268 co.EpochTime[CLOCKORBIT_SATQZSS] = static_cast<int>(epoTime.gpssec());
[6846]269 co.EpochTime[CLOCKORBIT_SATSBAS] = static_cast<int>(epoTime.gpssec());
270 co.EpochTime[CLOCKORBIT_SATBDS] = static_cast<int>(epoTime.bdssec());
[5666]271 co.Supplied[COBOFS_CLOCK] = 1;
272 co.Supplied[COBOFS_ORBIT] = 1;
[6877]273 co.SatRefDatum = DATUM_ITRF;
274 co.SSRIOD = _IOD;
[6850]275 co.SSRProviderID = _PID; // 256 .. BKG, 257 ... EUREF
276 co.SSRSolutionID = _SID;
[5662]277
[5666]278 struct CodeBias bias;
[3222]279 memset(&bias, 0, sizeof(bias));
[6877]280 bias.EpochTime[CLOCKORBIT_SATGPS] = co.EpochTime[CLOCKORBIT_SATGPS];
[5666]281 bias.EpochTime[CLOCKORBIT_SATGLONASS] = co.EpochTime[CLOCKORBIT_SATGLONASS];
[6846]282 bias.EpochTime[CLOCKORBIT_SATGALILEO] = co.EpochTime[CLOCKORBIT_SATGALILEO];
[6877]283 bias.EpochTime[CLOCKORBIT_SATQZSS] = co.EpochTime[CLOCKORBIT_SATQZSS];
284 bias.EpochTime[CLOCKORBIT_SATSBAS] = co.EpochTime[CLOCKORBIT_SATSBAS];
285 bias.EpochTime[CLOCKORBIT_SATBDS] = co.EpochTime[CLOCKORBIT_SATBDS];
286 bias.SSRIOD = _IOD;
[6850]287 bias.SSRProviderID = _PID;
288 bias.SSRSolutionID = _SID;
[5662]289
[6850]290 struct PhaseBias phasebias;
291 memset(&phasebias, 0, sizeof(phasebias));
[8018]292 unsigned int dispersiveBiasConsistenyIndicator = 0;
293 unsigned int mwConsistencyIndicator = 0;
[6877]294 phasebias.EpochTime[CLOCKORBIT_SATGPS] = co.EpochTime[CLOCKORBIT_SATGPS];
[6850]295 phasebias.EpochTime[CLOCKORBIT_SATGLONASS] = co.EpochTime[CLOCKORBIT_SATGLONASS];
296 phasebias.EpochTime[CLOCKORBIT_SATGALILEO] = co.EpochTime[CLOCKORBIT_SATGALILEO];
[6877]297 phasebias.EpochTime[CLOCKORBIT_SATQZSS] = co.EpochTime[CLOCKORBIT_SATQZSS];
298 phasebias.EpochTime[CLOCKORBIT_SATSBAS] = co.EpochTime[CLOCKORBIT_SATSBAS];
299 phasebias.EpochTime[CLOCKORBIT_SATBDS] = co.EpochTime[CLOCKORBIT_SATBDS];
300 phasebias.SSRIOD = _IOD;
[6850]301 phasebias.SSRProviderID = _PID;
302 phasebias.SSRSolutionID = _SID;
303
[6860]304 struct VTEC vtec;
305 memset(&vtec, 0, sizeof(vtec));
306 vtec.EpochTime = static_cast<int>(epoTime.gpssec());
[6877]307 vtec.SSRIOD = _IOD;
[6860]308 vtec.SSRProviderID = _PID;
309 vtec.SSRSolutionID = _SID;
310
[4753]311 // Default Update Interval
312 // -----------------------
[4754]313 int clkUpdInd = 2; // 5 sec
314 int ephUpdInd = clkUpdInd; // default
[6557]315
[6559]316 if (_samplRtcmClkCorr > 5.0 && _samplRtcmEphCorr <= 5.0) { // combined orb and clock
317 ephUpdInd = determineUpdateInd(_samplRtcmClkCorr);
[4754]318 }
[6559]319 if (_samplRtcmClkCorr > 5.0) {
[6557]320 clkUpdInd = determineUpdateInd(_samplRtcmClkCorr);
[4754]321 }
[6559]322 if (_samplRtcmEphCorr > 5.0) {
323 ephUpdInd = determineUpdateInd(_samplRtcmEphCorr);
324 }
[4753]325
[6877]326 co.UpdateInterval = clkUpdInd;
[4754]327 bias.UpdateInterval = clkUpdInd;
[6850]328 phasebias.UpdateInterval = clkUpdInd;
[4753]329
[3226]330 for (int ii = 1; ii < lines.size(); ii++) {
[6877]331 QString key; // prn or key VTEC, IND (phase bias indicators)
[8484]332 double rtnUra; // [m]
333 ColumnVector rtnAPC; // [m, m, m]
334 ColumnVector rtnVel; // [m/s, m/s, m/s]]
335 ColumnVector rtnCoM; // [m, m, m]
336 ColumnVector rtnClk; // [m, m/s, m/s²]
337 ColumnVector rtnClkSig; // [m, m/s, m/s²]
[6877]338 t_prn prn;
[5662]339
[3222]340 QTextStream in(lines[ii].toAscii());
341
[6876]342 in >> key;
[3222]343
[6860]344 // non-satellite specific parameters
[6877]345 if (key.contains("IND", Qt::CaseSensitive)) {
[8018]346 in >> dispersiveBiasConsistenyIndicator >> mwConsistencyIndicator;
[6860]347 continue;
348 }
[6893]349 // non-satellite specific parameters
[6876]350 if (key.contains("VTEC", Qt::CaseSensitive)) {
[6897]351 double ui;
352 in >> ui >> vtec.NumLayers;
353 vtec.UpdateInterval = (unsigned int) determineUpdateInd(ui);
[6860]354 for (unsigned ll = 0; ll < vtec.NumLayers; ll++) {
355 int dummy;
356 in >> dummy >> vtec.Layers[ll].Degree >> vtec.Layers[ll].Order
[6877]357 >> vtec.Layers[ll].Height;
[6879]358 for (unsigned iDeg = 0; iDeg <= vtec.Layers[ll].Degree; iDeg++) {
359 for (unsigned iOrd = 0; iOrd <= vtec.Layers[ll].Order; iOrd++) {
[6860]360 in >> vtec.Layers[ll].Cosinus[iDeg][iOrd];
361 }
362 }
[6879]363 for (unsigned iDeg = 0; iDeg <= vtec.Layers[ll].Degree; iDeg++) {
364 for (unsigned iOrd = 0; iOrd <= vtec.Layers[ll].Order; iOrd++) {
[6860]365 in >> vtec.Layers[ll].Sinus[iDeg][iOrd];
366 }
367 }
368 }
369 continue;
370 }
[6877]371 // satellite specific parameters
372 char sys = key.mid(0, 1).at(0).toAscii();
373 int number = key.mid(1, 2).toInt();
374 int flags = 0;
375 if (sys == 'E') { // I/NAV
376 flags = 1;
377 }
[6876]378 prn.set(sys, number, flags);
379 QString prnInternalStr = QString::fromStdString(prn.toInternalString());
[6877]380 QString prnStr = QString::fromStdString(prn.toString());
381
[6876]382 const t_eph* ephLast = _ephUser->ephLast(prnInternalStr);
383 const t_eph* ephPrev = _ephUser->ephPrev(prnInternalStr);
[6877]384 const t_eph* eph = ephLast;
[6442]385 if (eph) {
[3754]386
[4098]387 // Use previous ephemeris if the last one is too recent
388 // ----------------------------------------------------
389 const int MINAGE = 60; // seconds
[6877]390 if (ephPrev && eph->receptDateTime().isValid()
391 && eph->receptDateTime().secsTo(currentDateAndTimeGPS()) < MINAGE) {
[6442]392 eph = ephPrev;
[4098]393 }
[3754]394
[3753]395 // Make sure the clock messages refer to same IOD as orbit messages
396 // ----------------------------------------------------------------
397 if (_usedEph) {
[4174]398 if (fmod(epoTime.gpssec(), _samplRtcmEphCorr) == 0.0) {
[6876]399 (*_usedEph)[prnInternalStr] = eph;
[3753]400 }
401 else {
402 eph = 0;
[6876]403 if (_usedEph->contains(prnInternalStr)) {
404 const t_eph* usedEph = _usedEph->value(prnInternalStr);
[6877]405 if (usedEph == ephLast) {
[6442]406 eph = ephLast;
[3753]407 }
[6442]408 else if (usedEph == ephPrev) {
409 eph = ephPrev;
[3753]410 }
411 }
412 }
413 }
414 }
415
416 if (eph) {
[5503]417 QMap<QString, double> codeBiases;
[6851]418 QList<phaseBiasSignal> phaseBiasList;
419 phaseBiasesSat pbSat;
[5503]420
[4991]421 while (true) {
422 QString key;
[6877]423 int numVal = 0;
[6850]424 in >> key;
[4991]425 if (in.status() != QTextStream::Ok) {
426 break;
427 }
[6877]428 if (key == "APC") {
[6850]429 in >> numVal;
[4991]430 rtnAPC.ReSize(3);
[6850]431 for (int ii = 0; ii < numVal; ii++) {
432 in >> rtnAPC[ii];
433 }
[4991]434 }
[8484]435 else if (key == "Ura") {
[6850]436 in >> numVal;
[6877]437 if (numVal == 1)
[8484]438 in >> rtnUra;
[4991]439 }
[8484]440 else if (key == "Clk") {
[8509]441 rtnClk.ReSize(3);
442 for (int ii = 0; ii < 3; ii++) {
443 rtnClk[ii] = 0.0;
444 }
[8484]445 in >> numVal;
446 for (int ii = 0; ii < numVal; ii++) {
447 in >> rtnClk[ii];
448 }
449 }
450 else if (key == "ClkSig") {
[8509]451 rtnClkSig.ReSize(3);
452 for (int ii = 0; ii < 3; ii++) {
453 rtnClkSig[ii] = 0.0;
454 }
[8484]455 in >> numVal;
456 for (int ii = 0; ii < numVal; ii++) {
457 in >> rtnClkSig[ii];
458 }
459 }
[4991]460 else if (key == "Vel") {
[8509]461 rtnVel.ReSize(3);
[6850]462 in >> numVal;
463 for (int ii = 0; ii < numVal; ii++) {
464 in >> rtnVel[ii];
465 }
[4991]466 }
467 else if (key == "CoM") {
[8509]468 rtnCoM.ReSize(3);
[6850]469 in >> numVal;
470 for (int ii = 0; ii < numVal; ii++) {
471 in >> rtnCoM[ii];
472 }
[4991]473 }
[5503]474 else if (key == "CodeBias") {
[6850]475 in >> numVal;
[5503]476 for (int ii = 0; ii < numVal; ii++) {
477 QString type;
[6877]478 double value;
[5503]479 in >> type >> value;
480 codeBiases[type] = value;
481 }
482 }
[6857]483 else if (key == "YawAngle") {
[8018]484 in >> numVal >> pbSat.yawAngle;
485 if (pbSat.yawAngle < 0.0) {
486 pbSat.yawAngle += (2*M_PI);
[6975]487 }
[8018]488 else if (pbSat.yawAngle > 2*M_PI) {
489 pbSat.yawAngle -= (2*M_PI);
[6975]490 }
[6851]491 }
[6857]492 else if (key == "YawRate") {
[8018]493 in >> numVal >> pbSat.yawRate;
[6851]494 }
[6850]495 else if (key == "PhaseBias") {
496 in >> numVal;
497 for (int ii = 0; ii < numVal; ii++) {
[6851]498 phaseBiasSignal pb;
[8018]499 in >> pb.type >> pb.bias >> pb.integerIndicator
500 >> pb.wlIndicator >> pb.discontinuityCounter;
[6851]501 phaseBiasList.append(pb);
[6850]502 }
503 }
[4991]504 else {
[8016]505 in >> numVal;
[4991]506 for (int ii = 0; ii < numVal; ii++) {
507 double dummy;
508 in >> dummy;
509 }
510 }
[5662]511 }
[6850]512
[3222]513 struct ClockOrbit::SatData* sd = 0;
[6877]514 if (prn.system() == 'G') {
[5666]515 sd = co.Sat + co.NumberOfSat[CLOCKORBIT_SATGPS];
516 ++co.NumberOfSat[CLOCKORBIT_SATGPS];
[3222]517 }
[6876]518 else if (prn.system() == 'R') {
[6877]519 sd = co.Sat + CLOCKORBIT_NUMGPS + co.NumberOfSat[CLOCKORBIT_SATGLONASS];
[5666]520 ++co.NumberOfSat[CLOCKORBIT_SATGLONASS];
[3222]521 }
[6876]522 else if (prn.system() == 'E') {
[6844]523 sd = co.Sat + CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS
524 + co.NumberOfSat[CLOCKORBIT_SATGALILEO];
525 ++co.NumberOfSat[CLOCKORBIT_SATGALILEO];
526 }
[6876]527 else if (prn.system() == 'J') {
[6877]528 sd = co.Sat + CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS
529 + CLOCKORBIT_NUMGALILEO + co.NumberOfSat[CLOCKORBIT_SATQZSS];
[6844]530 ++co.NumberOfSat[CLOCKORBIT_SATQZSS];
531 }
[6876]532 else if (prn.system() == 'S') {
[6877]533 sd = co.Sat + CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS
534 + CLOCKORBIT_NUMGALILEO + CLOCKORBIT_NUMQZSS
[6844]535 + co.NumberOfSat[CLOCKORBIT_SATSBAS];
536 ++co.NumberOfSat[CLOCKORBIT_SATSBAS];
537 }
[6876]538 else if (prn.system() == 'C') {
[6877]539 sd = co.Sat + CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS
540 + CLOCKORBIT_NUMGALILEO + CLOCKORBIT_NUMQZSS + CLOCKORBIT_NUMSBAS
[6844]541 + co.NumberOfSat[CLOCKORBIT_SATBDS];
542 ++co.NumberOfSat[CLOCKORBIT_SATBDS];
543 }
[3222]544 if (sd) {
545 QString outLine;
[8484]546 processSatellite(eph, epoTime.gpsw(), epoTime.gpssec(), prnStr, rtnAPC, rtnUra,
547 rtnClk, rtnVel, rtnCoM, rtnClkSig, sd, outLine);
[3222]548 }
[5662]549
[6850]550 // Code Biases
551 // -----------
[5666]552 struct CodeBias::BiasSat* biasSat = 0;
[6877]553 if (!codeBiases.isEmpty()) {
554 if (prn.system() == 'G') {
555 biasSat = bias.Sat + bias.NumberOfSat[CLOCKORBIT_SATGPS];
556 ++bias.NumberOfSat[CLOCKORBIT_SATGPS];
557 }
558 else if (prn.system() == 'R') {
559 biasSat = bias.Sat + CLOCKORBIT_NUMGPS
560 + bias.NumberOfSat[CLOCKORBIT_SATGLONASS];
561 ++bias.NumberOfSat[CLOCKORBIT_SATGLONASS];
562 }
563 else if (prn.system() == 'E') {
564 biasSat = bias.Sat + CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS
565 + bias.NumberOfSat[CLOCKORBIT_SATGALILEO];
566 ++bias.NumberOfSat[CLOCKORBIT_SATGALILEO];
567 }
568 else if (prn.system() == 'J') {
569 biasSat = bias.Sat + CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS
570 + CLOCKORBIT_NUMGALILEO + bias.NumberOfSat[CLOCKORBIT_SATQZSS];
571 ++bias.NumberOfSat[CLOCKORBIT_SATQZSS];
572 }
573 else if (prn.system() == 'S') {
574 biasSat = bias.Sat + CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS
575 + CLOCKORBIT_NUMGALILEO + CLOCKORBIT_NUMQZSS
576 + bias.NumberOfSat[CLOCKORBIT_SATSBAS];
577 ++bias.NumberOfSat[CLOCKORBIT_SATSBAS];
578 }
579 else if (prn.system() == 'C') {
580 biasSat = bias.Sat + CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS
581 + CLOCKORBIT_NUMGALILEO + CLOCKORBIT_NUMQZSS + CLOCKORBIT_NUMSBAS
582 + bias.NumberOfSat[CLOCKORBIT_SATBDS];
583 ++bias.NumberOfSat[CLOCKORBIT_SATBDS];
584 }
[3222]585 }
[5662]586
[3222]587 if (biasSat) {
[6876]588 biasSat->ID = prn.number();
[5503]589 biasSat->NumberOfCodeBiases = 0;
[6877]590 if (prn.system() == 'G') {
[5503]591 QMapIterator<QString, double> it(codeBiases);
592 while (it.hasNext()) {
593 it.next();
[6877]594 if (it.key() == "1C") {
595 int ii = biasSat->NumberOfCodeBiases;
596 if (ii >= CLOCKORBIT_NUMBIAS)
597 break;
[5503]598 biasSat->NumberOfCodeBiases += 1;
599 biasSat->Biases[ii].Type = CODETYPEGPS_L1_CA;
600 biasSat->Biases[ii].Bias = it.value();
601 }
[8005]602 else if (it.key() == "1S") {
603 int ii = biasSat->NumberOfCodeBiases;
604 if (ii >= CLOCKORBIT_NUMBIAS)
605 break;
606 biasSat->NumberOfCodeBiases += 1;
607 biasSat->Biases[ii].Type = CODETYPEGPS_L1C_D;
608 biasSat->Biases[ii].Bias = it.value();
609 }
610 else if (it.key() == "1L") {
611 int ii = biasSat->NumberOfCodeBiases;
612 if (ii >= CLOCKORBIT_NUMBIAS)
613 break;
614 biasSat->NumberOfCodeBiases += 1;
615 biasSat->Biases[ii].Type = CODETYPEGPS_L1C_P;
616 biasSat->Biases[ii].Bias = it.value();
617 }
618 else if (it.key() == "1X") {
619 int ii = biasSat->NumberOfCodeBiases;
620 if (ii >= CLOCKORBIT_NUMBIAS)
621 break;
622 biasSat->NumberOfCodeBiases += 1;
623 biasSat->Biases[ii].Type = CODETYPEGPS_L1C_DP;
624 biasSat->Biases[ii].Bias = it.value();
625 }
[5504]626 else if (it.key() == "1P") {
[6877]627 int ii = biasSat->NumberOfCodeBiases;
628 if (ii >= CLOCKORBIT_NUMBIAS)
629 break;
[5503]630 biasSat->NumberOfCodeBiases += 1;
631 biasSat->Biases[ii].Type = CODETYPEGPS_L1_P;
632 biasSat->Biases[ii].Bias = it.value();
633 }
[5504]634 else if (it.key() == "1W") {
[6877]635 int ii = biasSat->NumberOfCodeBiases;
636 if (ii >= CLOCKORBIT_NUMBIAS)
637 break;
[5503]638 biasSat->NumberOfCodeBiases += 1;
639 biasSat->Biases[ii].Type = CODETYPEGPS_L1_Z;
640 biasSat->Biases[ii].Bias = it.value();
641 }
[5504]642 else if (it.key() == "2C") {
[6877]643 int ii = biasSat->NumberOfCodeBiases;
644 if (ii >= CLOCKORBIT_NUMBIAS)
645 break;
[5503]646 biasSat->NumberOfCodeBiases += 1;
647 biasSat->Biases[ii].Type = CODETYPEGPS_L2_CA;
648 biasSat->Biases[ii].Bias = it.value();
649 }
[5504]650 else if (it.key() == "2D") {
[6877]651 int ii = biasSat->NumberOfCodeBiases;
652 if (ii >= CLOCKORBIT_NUMBIAS)
653 break;
[5503]654 biasSat->NumberOfCodeBiases += 1;
655 biasSat->Biases[ii].Type = CODETYPEGPS_SEMI_CODELESS;
656 biasSat->Biases[ii].Bias = it.value();
657 }
[5504]658 else if (it.key() == "2S") {
[6877]659 int ii = biasSat->NumberOfCodeBiases;
660 if (ii >= CLOCKORBIT_NUMBIAS)
661 break;
[5503]662 biasSat->NumberOfCodeBiases += 1;
663 biasSat->Biases[ii].Type = CODETYPEGPS_L2_CM;
664 biasSat->Biases[ii].Bias = it.value();
665 }
[5504]666 else if (it.key() == "2L") {
[6877]667 int ii = biasSat->NumberOfCodeBiases;
668 if (ii >= CLOCKORBIT_NUMBIAS)
669 break;
[5503]670 biasSat->NumberOfCodeBiases += 1;
671 biasSat->Biases[ii].Type = CODETYPEGPS_L2_CL;
672 biasSat->Biases[ii].Bias = it.value();
673 }
[5504]674 else if (it.key() == "2X") {
[6877]675 int ii = biasSat->NumberOfCodeBiases;
676 if (ii >= CLOCKORBIT_NUMBIAS)
677 break;
[5503]678 biasSat->NumberOfCodeBiases += 1;
679 biasSat->Biases[ii].Type = CODETYPEGPS_L2_CML;
680 biasSat->Biases[ii].Bias = it.value();
681 }
[5504]682 else if (it.key() == "2P") {
[6877]683 int ii = biasSat->NumberOfCodeBiases;
684 if (ii >= CLOCKORBIT_NUMBIAS)
685 break;
[5503]686 biasSat->NumberOfCodeBiases += 1;
687 biasSat->Biases[ii].Type = CODETYPEGPS_L2_P;
688 biasSat->Biases[ii].Bias = it.value();
689 }
[5510]690 else if (it.key() == "2W") {
[6877]691 int ii = biasSat->NumberOfCodeBiases;
692 if (ii >= CLOCKORBIT_NUMBIAS)
693 break;
[5503]694 biasSat->NumberOfCodeBiases += 1;
695 biasSat->Biases[ii].Type = CODETYPEGPS_L2_Z;
696 biasSat->Biases[ii].Bias = it.value();
697 }
[5504]698 else if (it.key() == "5I") {
[6877]699 int ii = biasSat->NumberOfCodeBiases;
700 if (ii >= CLOCKORBIT_NUMBIAS)
701 break;
[5503]702 biasSat->NumberOfCodeBiases += 1;
703 biasSat->Biases[ii].Type = CODETYPEGPS_L5_I;
704 biasSat->Biases[ii].Bias = it.value();
705 }
[5504]706 else if (it.key() == "5Q") {
[6877]707 int ii = biasSat->NumberOfCodeBiases;
708 if (ii >= CLOCKORBIT_NUMBIAS)
709 break;
[5503]710 biasSat->NumberOfCodeBiases += 1;
711 biasSat->Biases[ii].Type = CODETYPEGPS_L5_Q;
712 biasSat->Biases[ii].Bias = it.value();
713 }
[6844]714 else if (it.key() == "5X") {
[6877]715 int ii = biasSat->NumberOfCodeBiases;
716 if (ii >= CLOCKORBIT_NUMBIAS)
717 break;
[6844]718 biasSat->NumberOfCodeBiases += 1;
719 biasSat->Biases[ii].Type = CODETYPEGPS_L5_IQ;
720 biasSat->Biases[ii].Bias = it.value();
721 }
[5503]722 }
[3222]723 }
[6876]724 else if (prn.system() == 'R') {
[5503]725 QMapIterator<QString, double> it(codeBiases);
726 while (it.hasNext()) {
727 it.next();
[6877]728 if (it.key() == "1C") {
729 int ii = biasSat->NumberOfCodeBiases;
730 if (ii >= CLOCKORBIT_NUMBIAS)
731 break;
[5503]732 biasSat->NumberOfCodeBiases += 1;
733 biasSat->Biases[ii].Type = CODETYPEGLONASS_L1_CA;
734 biasSat->Biases[ii].Bias = it.value();
735 }
[5504]736 else if (it.key() == "1P") {
[6877]737 int ii = biasSat->NumberOfCodeBiases;
738 if (ii >= CLOCKORBIT_NUMBIAS)
739 break;
[5503]740 biasSat->NumberOfCodeBiases += 1;
741 biasSat->Biases[ii].Type = CODETYPEGLONASS_L1_P;
742 biasSat->Biases[ii].Bias = it.value();
743 }
[5504]744 else if (it.key() == "2C") {
[6877]745 int ii = biasSat->NumberOfCodeBiases;
746 if (ii >= CLOCKORBIT_NUMBIAS)
747 break;
[5503]748 biasSat->NumberOfCodeBiases += 1;
749 biasSat->Biases[ii].Type = CODETYPEGLONASS_L2_CA;
750 biasSat->Biases[ii].Bias = it.value();
751 }
[5504]752 else if (it.key() == "2P") {
[6877]753 int ii = biasSat->NumberOfCodeBiases;
754 if (ii >= CLOCKORBIT_NUMBIAS)
755 break;
[5503]756 biasSat->NumberOfCodeBiases += 1;
757 biasSat->Biases[ii].Type = CODETYPEGLONASS_L2_P;
758 biasSat->Biases[ii].Bias = it.value();
759 }
760 }
[3222]761 }
[6876]762 else if (prn.system() == 'E') {
[6844]763 QMapIterator<QString, double> it(codeBiases);
764 while (it.hasNext()) {
765 it.next();
[6877]766 if (it.key() == "1A") {
767 int ii = biasSat->NumberOfCodeBiases;
768 if (ii >= CLOCKORBIT_NUMBIAS)
769 break;
[6844]770 biasSat->NumberOfCodeBiases += 1;
771 biasSat->Biases[ii].Type = CODETYPEGALILEO_E1_A;
772 biasSat->Biases[ii].Bias = it.value();
773 }
774 else if (it.key() == "1B") {
[6877]775 int ii = biasSat->NumberOfCodeBiases;
776 if (ii >= CLOCKORBIT_NUMBIAS)
777 break;
[6844]778 biasSat->NumberOfCodeBiases += 1;
779 biasSat->Biases[ii].Type = CODETYPEGALILEO_E1_B;
780 biasSat->Biases[ii].Bias = it.value();
781 }
782 else if (it.key() == "1C") {
[6877]783 int ii = biasSat->NumberOfCodeBiases;
784 if (ii >= CLOCKORBIT_NUMBIAS)
785 break;
[6844]786 biasSat->NumberOfCodeBiases += 1;
787 biasSat->Biases[ii].Type = CODETYPEGALILEO_E1_C;
788 biasSat->Biases[ii].Bias = it.value();
789 }
[8005]790 else if (it.key() == "1X") {
791 int ii = biasSat->NumberOfCodeBiases;
792 if (ii >= CLOCKORBIT_NUMBIAS)
793 break;
794 biasSat->NumberOfCodeBiases += 1;
795 biasSat->Biases[ii].Type = CODETYPEGALILEO_E1_BC;
796 biasSat->Biases[ii].Bias = it.value();
797 }
798 else if (it.key() == "1Z") {
799 int ii = biasSat->NumberOfCodeBiases;
800 if (ii >= CLOCKORBIT_NUMBIAS)
801 break;
802 biasSat->NumberOfCodeBiases += 1;
803 biasSat->Biases[ii].Type = CODETYPEGALILEO_E1_ABC;
804 biasSat->Biases[ii].Bias = it.value();
805 }
[6844]806 else if (it.key() == "5I") {
[6877]807 int ii = biasSat->NumberOfCodeBiases;
808 if (ii >= CLOCKORBIT_NUMBIAS)
809 break;
[6844]810 biasSat->NumberOfCodeBiases += 1;
811 biasSat->Biases[ii].Type = CODETYPEGALILEO_E5A_I;
812 biasSat->Biases[ii].Bias = it.value();
813 }
814 else if (it.key() == "5Q") {
[6877]815 int ii = biasSat->NumberOfCodeBiases;
816 if (ii >= CLOCKORBIT_NUMBIAS)
817 break;
[6844]818 biasSat->NumberOfCodeBiases += 1;
819 biasSat->Biases[ii].Type = CODETYPEGALILEO_E5A_Q;
820 biasSat->Biases[ii].Bias = it.value();
821 }
[8005]822 else if (it.key() == "5X") {
823 int ii = biasSat->NumberOfCodeBiases;
824 if (ii >= CLOCKORBIT_NUMBIAS)
825 break;
826 biasSat->NumberOfCodeBiases += 1;
827 biasSat->Biases[ii].Type = CODETYPEGALILEO_E5A_IQ;
828 biasSat->Biases[ii].Bias = it.value();
829 }
[6844]830 else if (it.key() == "7I") {
[6877]831 int ii = biasSat->NumberOfCodeBiases;
832 if (ii >= CLOCKORBIT_NUMBIAS)
833 break;
[6844]834 biasSat->NumberOfCodeBiases += 1;
835 biasSat->Biases[ii].Type = CODETYPEGALILEO_E5B_I;
836 biasSat->Biases[ii].Bias = it.value();
837 }
838 else if (it.key() == "7Q") {
[6877]839 int ii = biasSat->NumberOfCodeBiases;
840 if (ii >= CLOCKORBIT_NUMBIAS)
841 break;
[6844]842 biasSat->NumberOfCodeBiases += 1;
843 biasSat->Biases[ii].Type = CODETYPEGALILEO_E5B_Q;
844 biasSat->Biases[ii].Bias = it.value();
845 }
[8005]846 else if (it.key() == "7X") {
847 int ii = biasSat->NumberOfCodeBiases;
848 if (ii >= CLOCKORBIT_NUMBIAS)
849 break;
850 biasSat->NumberOfCodeBiases += 1;
851 biasSat->Biases[ii].Type = CODETYPEGALILEO_E5B_IQ;
852 biasSat->Biases[ii].Bias = it.value();
853 }
[6844]854 else if (it.key() == "8I") {
[6877]855 int ii = biasSat->NumberOfCodeBiases;
856 if (ii >= CLOCKORBIT_NUMBIAS)
857 break;
[6844]858 biasSat->NumberOfCodeBiases += 1;
859 biasSat->Biases[ii].Type = CODETYPEGALILEO_E5_I;
860 biasSat->Biases[ii].Bias = it.value();
861 }
862 else if (it.key() == "8Q") {
[6877]863 int ii = biasSat->NumberOfCodeBiases;
864 if (ii >= CLOCKORBIT_NUMBIAS)
865 break;
[6844]866 biasSat->NumberOfCodeBiases += 1;
867 biasSat->Biases[ii].Type = CODETYPEGALILEO_E5_Q;
868 biasSat->Biases[ii].Bias = it.value();
869 }
[8005]870 else if (it.key() == "8X") {
871 int ii = biasSat->NumberOfCodeBiases;
872 if (ii >= CLOCKORBIT_NUMBIAS)
873 break;
874 biasSat->NumberOfCodeBiases += 1;
875 biasSat->Biases[ii].Type = CODETYPEGALILEO_E5_IQ;
876 biasSat->Biases[ii].Bias = it.value();
877 }
[6844]878 else if (it.key() == "6A") {
[6877]879 int ii = biasSat->NumberOfCodeBiases;
880 if (ii >= CLOCKORBIT_NUMBIAS)
881 break;
[6844]882 biasSat->NumberOfCodeBiases += 1;
883 biasSat->Biases[ii].Type = CODETYPEGALILEO_E6_A;
884 biasSat->Biases[ii].Bias = it.value();
885 }
886 else if (it.key() == "6B") {
[6877]887 int ii = biasSat->NumberOfCodeBiases;
888 if (ii >= CLOCKORBIT_NUMBIAS)
889 break;
[6844]890 biasSat->NumberOfCodeBiases += 1;
891 biasSat->Biases[ii].Type = CODETYPEGALILEO_E6_B;
892 biasSat->Biases[ii].Bias = it.value();
893 }
894 else if (it.key() == "6C") {
[6877]895 int ii = biasSat->NumberOfCodeBiases;
896 if (ii >= CLOCKORBIT_NUMBIAS)
897 break;
[6844]898 biasSat->NumberOfCodeBiases += 1;
899 biasSat->Biases[ii].Type = CODETYPEGALILEO_E6_C;
900 biasSat->Biases[ii].Bias = it.value();
901 }
[8005]902 else if (it.key() == "6X") {
903 int ii = biasSat->NumberOfCodeBiases;
904 if (ii >= CLOCKORBIT_NUMBIAS)
905 break;
906 biasSat->NumberOfCodeBiases += 1;
907 biasSat->Biases[ii].Type = CODETYPEGALILEO_E6_BC;
908 biasSat->Biases[ii].Bias = it.value();
909 }
910 else if (it.key() == "6Z") {
911 int ii = biasSat->NumberOfCodeBiases;
912 if (ii >= CLOCKORBIT_NUMBIAS)
913 break;
914 biasSat->NumberOfCodeBiases += 1;
915 biasSat->Biases[ii].Type = CODETYPEGALILEO_E6_ABC;
916 biasSat->Biases[ii].Bias = it.value();
917 }
[6844]918 }
919 }
[6876]920 else if (prn.system() == 'J') {
[6844]921 QMapIterator<QString, double> it(codeBiases);
922 while (it.hasNext()) {
923 it.next();
[6877]924 if (it.key() == "1C") {
925 int ii = biasSat->NumberOfCodeBiases;
926 if (ii >= CLOCKORBIT_NUMBIAS)
927 break;
[6844]928 biasSat->NumberOfCodeBiases += 1;
929 biasSat->Biases[ii].Type = CODETYPEQZSS_L1_CA;
930 biasSat->Biases[ii].Bias = it.value();
931 }
932 else if (it.key() == "1S") {
[6877]933 int ii = biasSat->NumberOfCodeBiases;
934 if (ii >= CLOCKORBIT_NUMBIAS)
935 break;
[6844]936 biasSat->NumberOfCodeBiases += 1;
937 biasSat->Biases[ii].Type = CODETYPEQZSS_L1C_D;
938 biasSat->Biases[ii].Bias = it.value();
939 }
940 else if (it.key() == "1L") {
[6877]941 int ii = biasSat->NumberOfCodeBiases;
942 if (ii >= CLOCKORBIT_NUMBIAS)
943 break;
[6844]944 biasSat->NumberOfCodeBiases += 1;
945 biasSat->Biases[ii].Type = CODETYPEQZSS_L1C_P;
946 biasSat->Biases[ii].Bias = it.value();
947 }
948 else if (it.key() == "1X") {
[6877]949 int ii = biasSat->NumberOfCodeBiases;
950 if (ii >= CLOCKORBIT_NUMBIAS)
951 break;
[6844]952 biasSat->NumberOfCodeBiases += 1;
953 biasSat->Biases[ii].Type = CODETYPEQZSS_L1C_DP;
954 biasSat->Biases[ii].Bias = it.value();
955 }
956 else if (it.key() == "2S") {
[6877]957 int ii = biasSat->NumberOfCodeBiases;
958 if (ii >= CLOCKORBIT_NUMBIAS)
959 break;
[6844]960 biasSat->NumberOfCodeBiases += 1;
[8005]961 biasSat->Biases[ii].Type = CODETYPEQZSS_L2C_M;
[6844]962 biasSat->Biases[ii].Bias = it.value();
963 }
964 else if (it.key() == "2L") {
[6877]965 int ii = biasSat->NumberOfCodeBiases;
966 if (ii >= CLOCKORBIT_NUMBIAS)
967 break;
[6844]968 biasSat->NumberOfCodeBiases += 1;
[8005]969 biasSat->Biases[ii].Type = CODETYPEQZSS_L2C_L;
[6844]970 biasSat->Biases[ii].Bias = it.value();
971 }
972 else if (it.key() == "2X") {
[6877]973 int ii = biasSat->NumberOfCodeBiases;
974 if (ii >= CLOCKORBIT_NUMBIAS)
975 break;
[6844]976 biasSat->NumberOfCodeBiases += 1;
[8005]977 biasSat->Biases[ii].Type = CODETYPEQZSS_L2C_ML;
[6844]978 biasSat->Biases[ii].Bias = it.value();
979 }
980 else if (it.key() == "5I") {
[6877]981 int ii = biasSat->NumberOfCodeBiases;
982 if (ii >= CLOCKORBIT_NUMBIAS)
983 break;
[6844]984 biasSat->NumberOfCodeBiases += 1;
985 biasSat->Biases[ii].Type = CODETYPEQZSS_L5_I;
986 biasSat->Biases[ii].Bias = it.value();
987 }
988 else if (it.key() == "5Q") {
[6877]989 int ii = biasSat->NumberOfCodeBiases;
990 if (ii >= CLOCKORBIT_NUMBIAS)
991 break;
[6844]992 biasSat->NumberOfCodeBiases += 1;
993 biasSat->Biases[ii].Type = CODETYPEQZSS_L5_Q;
994 biasSat->Biases[ii].Bias = it.value();
995 }
996 else if (it.key() == "5X") {
[6877]997 int ii = biasSat->NumberOfCodeBiases;
998 if (ii >= CLOCKORBIT_NUMBIAS)
999 break;
[6844]1000 biasSat->NumberOfCodeBiases += 1;
1001 biasSat->Biases[ii].Type = CODETYPEQZSS_L5_IQ;
1002 biasSat->Biases[ii].Bias = it.value();
1003 }
1004 else if (it.key() == "6S") {
[6877]1005 int ii = biasSat->NumberOfCodeBiases;
1006 if (ii >= CLOCKORBIT_NUMBIAS)
1007 break;
[6844]1008 biasSat->NumberOfCodeBiases += 1;
1009 biasSat->Biases[ii].Type = CODETYPEQZSS_LEX_S;
1010 biasSat->Biases[ii].Bias = it.value();
1011 }
1012 else if (it.key() == "6L") {
[6877]1013 int ii = biasSat->NumberOfCodeBiases;
1014 if (ii >= CLOCKORBIT_NUMBIAS)
1015 break;
[6844]1016 biasSat->NumberOfCodeBiases += 1;
1017 biasSat->Biases[ii].Type = CODETYPEQZSS_LEX_L;
1018 biasSat->Biases[ii].Bias = it.value();
1019 }
1020 else if (it.key() == "6X") {
[6877]1021 int ii = biasSat->NumberOfCodeBiases;
1022 if (ii >= CLOCKORBIT_NUMBIAS)
1023 break;
[6844]1024 biasSat->NumberOfCodeBiases += 1;
1025 biasSat->Biases[ii].Type = CODETYPEQZSS_LEX_SL;
1026 biasSat->Biases[ii].Bias = it.value();
1027 }
1028 }
1029 }
[6876]1030 else if (prn.system() == 'S') {
[6844]1031 QMapIterator<QString, double> it(codeBiases);
1032 while (it.hasNext()) {
1033 it.next();
[6877]1034 if (it.key() == "1C") {
1035 int ii = biasSat->NumberOfCodeBiases;
1036 if (ii >= CLOCKORBIT_NUMBIAS)
1037 break;
[6844]1038 biasSat->NumberOfCodeBiases += 1;
1039 biasSat->Biases[ii].Type = CODETYPE_SBAS_L1_CA;
1040 biasSat->Biases[ii].Bias = it.value();
1041 }
1042 else if (it.key() == "5I") {
[6877]1043 int ii = biasSat->NumberOfCodeBiases;
1044 if (ii >= CLOCKORBIT_NUMBIAS)
1045 break;
[6844]1046 biasSat->NumberOfCodeBiases += 1;
1047 biasSat->Biases[ii].Type = CODETYPE_SBAS_L5_I;
1048 biasSat->Biases[ii].Bias = it.value();
1049 }
1050 else if (it.key() == "5Q") {
[6877]1051 int ii = biasSat->NumberOfCodeBiases;
1052 if (ii >= CLOCKORBIT_NUMBIAS)
1053 break;
[6844]1054 biasSat->NumberOfCodeBiases += 1;
1055 biasSat->Biases[ii].Type = CODETYPE_SBAS_L5_Q;
1056 biasSat->Biases[ii].Bias = it.value();
1057 }
1058 else if (it.key() == "5X") {
[6877]1059 int ii = biasSat->NumberOfCodeBiases;
1060 if (ii >= CLOCKORBIT_NUMBIAS)
1061 break;
[6844]1062 biasSat->NumberOfCodeBiases += 1;
1063 biasSat->Biases[ii].Type = CODETYPE_SBAS_L5_IQ;
1064 biasSat->Biases[ii].Bias = it.value();
1065 }
1066 }
1067 }
[6876]1068 else if (prn.system() == 'C') {
[6844]1069 QMapIterator<QString, double> it(codeBiases);
1070 while (it.hasNext()) {
1071 it.next();
[6877]1072 if (it.key() == "2I") {
1073 int ii = biasSat->NumberOfCodeBiases;
1074 if (ii >= CLOCKORBIT_NUMBIAS)
1075 break;
[6844]1076 biasSat->NumberOfCodeBiases += 1;
1077 biasSat->Biases[ii].Type = CODETYPE_BDS_B1_I;
1078 biasSat->Biases[ii].Bias = it.value();
1079 }
1080 else if (it.key() == "2Q") {
[6877]1081 int ii = biasSat->NumberOfCodeBiases;
1082 if (ii >= CLOCKORBIT_NUMBIAS)
1083 break;
[6844]1084 biasSat->NumberOfCodeBiases += 1;
1085 biasSat->Biases[ii].Type = CODETYPE_BDS_B1_Q;
1086 biasSat->Biases[ii].Bias = it.value();
1087 }
1088 else if (it.key() == "2X") {
[6877]1089 int ii = biasSat->NumberOfCodeBiases;
1090 if (ii >= CLOCKORBIT_NUMBIAS)
1091 break;
[6844]1092 biasSat->NumberOfCodeBiases += 1;
1093 biasSat->Biases[ii].Type = CODETYPE_BDS_B1_IQ;
1094 biasSat->Biases[ii].Bias = it.value();
1095 }
1096 else if (it.key() == "6I") {
[6877]1097 int ii = biasSat->NumberOfCodeBiases;
1098 if (ii >= CLOCKORBIT_NUMBIAS)
1099 break;
[6844]1100 biasSat->NumberOfCodeBiases += 1;
1101 biasSat->Biases[ii].Type = CODETYPE_BDS_B3_I;
1102 biasSat->Biases[ii].Bias = it.value();
1103 }
1104 else if (it.key() == "6Q") {
[6877]1105 int ii = biasSat->NumberOfCodeBiases;
1106 if (ii >= CLOCKORBIT_NUMBIAS)
1107 break;
[6844]1108 biasSat->NumberOfCodeBiases += 1;
1109 biasSat->Biases[ii].Type = CODETYPE_BDS_B3_Q;
1110 biasSat->Biases[ii].Bias = it.value();
1111 }
1112 else if (it.key() == "6X") {
[6877]1113 int ii = biasSat->NumberOfCodeBiases;
1114 if (ii >= CLOCKORBIT_NUMBIAS)
1115 break;
[6844]1116 biasSat->NumberOfCodeBiases += 1;
1117 biasSat->Biases[ii].Type = CODETYPE_BDS_B3_IQ;
1118 biasSat->Biases[ii].Bias = it.value();
1119 }
1120 else if (it.key() == "7I") {
[6877]1121 int ii = biasSat->NumberOfCodeBiases;
1122 if (ii >= CLOCKORBIT_NUMBIAS)
1123 break;
[6844]1124 biasSat->NumberOfCodeBiases += 1;
1125 biasSat->Biases[ii].Type = CODETYPE_BDS_B2_I;
1126 biasSat->Biases[ii].Bias = it.value();
1127 }
1128 else if (it.key() == "7Q") {
[6877]1129 int ii = biasSat->NumberOfCodeBiases;
1130 if (ii >= CLOCKORBIT_NUMBIAS)
1131 break;
[6844]1132 biasSat->NumberOfCodeBiases += 1;
1133 biasSat->Biases[ii].Type = CODETYPE_BDS_B2_Q;
1134 biasSat->Biases[ii].Bias = it.value();
1135 }
1136 else if (it.key() == "7X") {
[6877]1137 int ii = biasSat->NumberOfCodeBiases;
1138 if (ii >= CLOCKORBIT_NUMBIAS)
1139 break;
[6844]1140 biasSat->NumberOfCodeBiases += 1;
1141 biasSat->Biases[ii].Type = CODETYPE_BDS_B2_IQ;
1142 biasSat->Biases[ii].Bias = it.value();
1143 }
1144 }
1145 }
[3222]1146 }
[6850]1147 // Phase Biases
1148 // ------------
1149 struct PhaseBias::PhaseBiasSat* phasebiasSat = 0;
[6877]1150 if (!phaseBiasList.isEmpty()) {
1151 if (prn.system() == 'G') {
1152 phasebiasSat = phasebias.Sat
1153 + phasebias.NumberOfSat[CLOCKORBIT_SATGPS];
1154 ++phasebias.NumberOfSat[CLOCKORBIT_SATGPS];
1155 }
1156 else if (prn.system() == 'R') {
1157 phasebiasSat = phasebias.Sat + CLOCKORBIT_NUMGPS
1158 + phasebias.NumberOfSat[CLOCKORBIT_SATGLONASS];
1159 ++phasebias.NumberOfSat[CLOCKORBIT_SATGLONASS];
1160 }
1161 else if (prn.system() == 'E') {
1162 phasebiasSat = phasebias.Sat + CLOCKORBIT_NUMGPS
1163 + CLOCKORBIT_NUMGLONASS
1164 + phasebias.NumberOfSat[CLOCKORBIT_SATGALILEO];
1165 ++phasebias.NumberOfSat[CLOCKORBIT_SATGALILEO];
1166 }
1167 else if (prn.system() == 'J') {
1168 phasebiasSat = phasebias.Sat + CLOCKORBIT_NUMGPS
1169 + CLOCKORBIT_NUMGLONASS + CLOCKORBIT_NUMGALILEO
1170 + phasebias.NumberOfSat[CLOCKORBIT_SATQZSS];
1171 ++phasebias.NumberOfSat[CLOCKORBIT_SATQZSS];
1172 }
1173 else if (prn.system() == 'S') {
1174 phasebiasSat = phasebias.Sat + CLOCKORBIT_NUMGPS
1175 + CLOCKORBIT_NUMGLONASS + CLOCKORBIT_NUMGALILEO
1176 + CLOCKORBIT_NUMQZSS + phasebias.NumberOfSat[CLOCKORBIT_SATSBAS];
1177 ++phasebias.NumberOfSat[CLOCKORBIT_SATSBAS];
1178 }
1179 else if (prn.system() == 'C') {
1180 phasebiasSat = phasebias.Sat + CLOCKORBIT_NUMGPS
1181 + CLOCKORBIT_NUMGLONASS + CLOCKORBIT_NUMGALILEO
1182 + CLOCKORBIT_NUMQZSS + CLOCKORBIT_NUMSBAS
1183 + phasebias.NumberOfSat[CLOCKORBIT_SATBDS];
1184 ++phasebias.NumberOfSat[CLOCKORBIT_SATBDS];
1185 }
[6850]1186 }
1187
1188 if (phasebiasSat) {
[8018]1189 phasebias.DispersiveBiasConsistencyIndicator = dispersiveBiasConsistenyIndicator;
1190 phasebias.MWConsistencyIndicator = mwConsistencyIndicator;
[6876]1191 phasebiasSat->ID = prn.number();
[6850]1192 phasebiasSat->NumberOfPhaseBiases = 0;
[8018]1193 phasebiasSat->YawAngle = pbSat.yawAngle;
1194 phasebiasSat->YawRate = pbSat.yawRate;
[6877]1195 if (prn.system() == 'G') {
[6851]1196 QListIterator<phaseBiasSignal> it(phaseBiasList);
[6850]1197 while (it.hasNext()) {
[6851]1198 const phaseBiasSignal &pbSig = it.next();
[6877]1199 if (pbSig.type == "1C") {
1200 int ii = phasebiasSat->NumberOfPhaseBiases;
1201 if (ii >= CLOCKORBIT_NUMBIAS)
1202 break;
[6850]1203 phasebiasSat->NumberOfPhaseBiases += 1;
1204 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L1_CA;
[6851]1205 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1206 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1207 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1208 pbSig.wlIndicator;
[6877]1209 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1210 pbSig.discontinuityCounter;
[6850]1211 }
[8007]1212 else if (pbSig.type == "1S") {
[8005]1213 int ii = phasebiasSat->NumberOfPhaseBiases;
1214 if (ii >= CLOCKORBIT_NUMBIAS)
1215 break;
1216 phasebiasSat->NumberOfPhaseBiases += 1;
1217 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L1C_D;
1218 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1219 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[8005]1220 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1221 pbSig.wlIndicator;
[8005]1222 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1223 pbSig.discontinuityCounter;
[8005]1224 }
1225 else if (pbSig.type == "1L") {
1226 int ii = phasebiasSat->NumberOfPhaseBiases;
1227 if (ii >= CLOCKORBIT_NUMBIAS)
1228 break;
1229 phasebiasSat->NumberOfPhaseBiases += 1;
1230 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L1C_P;
1231 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1232 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[8005]1233 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1234 pbSig.wlIndicator;
[8005]1235 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1236 pbSig.discontinuityCounter;
[8005]1237 }
1238 else if (pbSig.type == "1X") {
1239 int ii = phasebiasSat->NumberOfPhaseBiases;
1240 if (ii >= CLOCKORBIT_NUMBIAS)
1241 break;
1242 phasebiasSat->NumberOfPhaseBiases += 1;
1243 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L1C_P;
1244 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1245 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[8005]1246 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1247 pbSig.wlIndicator;
[8005]1248 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1249 pbSig.discontinuityCounter;
[8005]1250 }
[6851]1251 else if (pbSig.type == "1P") {
[6877]1252 int ii = phasebiasSat->NumberOfPhaseBiases;
1253 if (ii >= CLOCKORBIT_NUMBIAS)
1254 break;
[6850]1255 phasebiasSat->NumberOfPhaseBiases += 1;
1256 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L1_P;
[6851]1257 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1258 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1259 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1260 pbSig.wlIndicator;
[6877]1261 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1262 pbSig.discontinuityCounter;
[6850]1263 }
[6851]1264 else if (pbSig.type == "1W") {
[6877]1265 int ii = phasebiasSat->NumberOfPhaseBiases;
1266 if (ii >= CLOCKORBIT_NUMBIAS)
1267 break;
[6850]1268 phasebiasSat->NumberOfPhaseBiases += 1;
1269 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L1_Z;
[6851]1270 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1271 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1272 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1273 pbSig.wlIndicator;
[6877]1274 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1275 pbSig.discontinuityCounter;
[6850]1276 }
[6851]1277 else if (pbSig.type == "2C") {
[6877]1278 int ii = phasebiasSat->NumberOfPhaseBiases;
1279 if (ii >= CLOCKORBIT_NUMBIAS)
1280 break;
[6850]1281 phasebiasSat->NumberOfPhaseBiases += 1;
1282 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L2_CA;
[6851]1283 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1284 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1285 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1286 pbSig.wlIndicator;
[6877]1287 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1288 pbSig.discontinuityCounter;
[6850]1289 }
[6851]1290 else if (pbSig.type == "2D") {
[6877]1291 int ii = phasebiasSat->NumberOfPhaseBiases;
1292 if (ii >= CLOCKORBIT_NUMBIAS)
1293 break;
[6850]1294 phasebiasSat->NumberOfPhaseBiases += 1;
1295 phasebiasSat->Biases[ii].Type = CODETYPEGPS_SEMI_CODELESS;
[6851]1296 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1297 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1298 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1299 pbSig.wlIndicator;
[6877]1300 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1301 pbSig.discontinuityCounter;
[6850]1302 }
[6851]1303 else if (pbSig.type == "2S") {
[6877]1304 int ii = phasebiasSat->NumberOfPhaseBiases;
1305 if (ii >= CLOCKORBIT_NUMBIAS)
1306 break;
[6850]1307 phasebiasSat->NumberOfPhaseBiases += 1;
1308 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L2_CM;
[6851]1309 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1310 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1311 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1312 pbSig.wlIndicator;
[6877]1313 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1314 pbSig.discontinuityCounter;
[6850]1315 }
[6851]1316 else if (pbSig.type == "2L") {
[6877]1317 int ii = phasebiasSat->NumberOfPhaseBiases;
1318 if (ii >= CLOCKORBIT_NUMBIAS)
1319 break;
[6850]1320 phasebiasSat->NumberOfPhaseBiases += 1;
1321 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L2_CL;
[6851]1322 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1323 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1324 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1325 pbSig.wlIndicator;
[6877]1326 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1327 pbSig.discontinuityCounter;
[6850]1328 }
[6851]1329 else if (pbSig.type == "2X") {
[6877]1330 int ii = phasebiasSat->NumberOfPhaseBiases;
1331 if (ii >= CLOCKORBIT_NUMBIAS)
1332 break;
[6850]1333 phasebiasSat->NumberOfPhaseBiases += 1;
1334 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L2_CML;
[6851]1335 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1336 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1337 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1338 pbSig.wlIndicator;
[6877]1339 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1340 pbSig.discontinuityCounter;
[6850]1341 }
[6851]1342 else if (pbSig.type == "2P") {
[6877]1343 int ii = phasebiasSat->NumberOfPhaseBiases;
1344 if (ii >= CLOCKORBIT_NUMBIAS)
1345 break;
[6850]1346 phasebiasSat->NumberOfPhaseBiases += 1;
1347 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L2_P;
[6851]1348 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1349 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1350 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1351 pbSig.wlIndicator;
[6877]1352 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1353 pbSig.discontinuityCounter;
[6850]1354 }
[6851]1355 else if (pbSig.type == "2W") {
[6877]1356 int ii = phasebiasSat->NumberOfPhaseBiases;
1357 if (ii >= CLOCKORBIT_NUMBIAS)
1358 break;
[6850]1359 phasebiasSat->NumberOfPhaseBiases += 1;
1360 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L2_Z;
[6851]1361 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1362 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1363 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1364 pbSig.wlIndicator;
[6877]1365 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1366 pbSig.discontinuityCounter;
[6850]1367 }
[6851]1368 else if (pbSig.type == "5I") {
[6877]1369 int ii = phasebiasSat->NumberOfPhaseBiases;
1370 if (ii >= CLOCKORBIT_NUMBIAS)
1371 break;
[6850]1372 phasebiasSat->NumberOfPhaseBiases += 1;
1373 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L5_I;
[6851]1374 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1375 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1376 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1377 pbSig.wlIndicator;
[6877]1378 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1379 pbSig.discontinuityCounter;
[6850]1380 }
[6851]1381 else if (pbSig.type == "5Q") {
[6877]1382 int ii = phasebiasSat->NumberOfPhaseBiases;
1383 if (ii >= CLOCKORBIT_NUMBIAS)
1384 break;
[6850]1385 phasebiasSat->NumberOfPhaseBiases += 1;
1386 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L5_Q;
[6851]1387 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1388 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1389 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1390 pbSig.wlIndicator;
[6877]1391 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1392 pbSig.discontinuityCounter;
[6850]1393 }
[6851]1394 else if (pbSig.type == "5X") {
[6877]1395 int ii = phasebiasSat->NumberOfPhaseBiases;
1396 if (ii >= CLOCKORBIT_NUMBIAS)
1397 break;
[6850]1398 phasebiasSat->NumberOfPhaseBiases += 1;
1399 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L5_IQ;
[6851]1400 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1401 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1402 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1403 pbSig.wlIndicator;
[6877]1404 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1405 pbSig.discontinuityCounter;
[6850]1406 }
1407 }
1408 }
[6877]1409 if (prn.system() == 'R') {
[6851]1410 QListIterator<phaseBiasSignal> it(phaseBiasList);
[6850]1411 while (it.hasNext()) {
[6851]1412 const phaseBiasSignal &pbSig = it.next();
[6877]1413 if (pbSig.type == "1C") {
1414 int ii = phasebiasSat->NumberOfPhaseBiases;
1415 if (ii >= CLOCKORBIT_NUMBIAS)
1416 break;
[6850]1417 phasebiasSat->NumberOfPhaseBiases += 1;
1418 phasebiasSat->Biases[ii].Type = CODETYPEGLONASS_L1_CA;
[6851]1419 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1420 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1421 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1422 pbSig.wlIndicator;
[6877]1423 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1424 pbSig.discontinuityCounter;
[6850]1425 }
[6851]1426 else if (pbSig.type == "1P") {
[6877]1427 int ii = phasebiasSat->NumberOfPhaseBiases;
1428 if (ii >= CLOCKORBIT_NUMBIAS)
1429 break;
[6850]1430 phasebiasSat->NumberOfPhaseBiases += 1;
1431 phasebiasSat->Biases[ii].Type = CODETYPEGLONASS_L1_P;
[6851]1432 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1433 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1434 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1435 pbSig.wlIndicator;
[6877]1436 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1437 pbSig.discontinuityCounter;
[6850]1438 }
[6851]1439 else if (pbSig.type == "2C") {
[6877]1440 int ii = phasebiasSat->NumberOfPhaseBiases;
1441 if (ii >= CLOCKORBIT_NUMBIAS)
1442 break;
[6850]1443 phasebiasSat->NumberOfPhaseBiases += 1;
1444 phasebiasSat->Biases[ii].Type = CODETYPEGLONASS_L2_CA;
[6851]1445 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1446 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1447 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1448 pbSig.wlIndicator;
[6877]1449 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1450 pbSig.discontinuityCounter;
[6850]1451 }
[6851]1452 else if (pbSig.type == "2P") {
[6877]1453 int ii = phasebiasSat->NumberOfPhaseBiases;
1454 if (ii >= CLOCKORBIT_NUMBIAS)
1455 break;
[6850]1456 phasebiasSat->NumberOfPhaseBiases += 1;
1457 phasebiasSat->Biases[ii].Type = CODETYPEGLONASS_L2_P;
[6851]1458 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1459 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1460 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1461 pbSig.wlIndicator;
[6877]1462 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1463 pbSig.discontinuityCounter;
[6850]1464 }
1465 }
1466 }
[6877]1467 if (prn.system() == 'E') {
[6851]1468 QListIterator<phaseBiasSignal> it(phaseBiasList);
[6850]1469 while (it.hasNext()) {
[6851]1470 const phaseBiasSignal &pbSig = it.next();
[6877]1471 if (pbSig.type == "1A") {
1472 int ii = phasebiasSat->NumberOfPhaseBiases;
1473 if (ii >= CLOCKORBIT_NUMBIAS)
1474 break;
[6850]1475 phasebiasSat->NumberOfPhaseBiases += 1;
1476 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E1_A;
[6851]1477 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1478 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1479 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1480 pbSig.wlIndicator;
[6877]1481 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1482 pbSig.discontinuityCounter;
[6850]1483 }
[6851]1484 else if (pbSig.type == "1B") {
[6877]1485 int ii = phasebiasSat->NumberOfPhaseBiases;
1486 if (ii >= CLOCKORBIT_NUMBIAS)
1487 break;
[6850]1488 phasebiasSat->NumberOfPhaseBiases += 1;
1489 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E1_B;
[6851]1490 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1491 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1492 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1493 pbSig.wlIndicator;
[6877]1494 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1495 pbSig.discontinuityCounter;
[6850]1496 }
[6851]1497 else if (pbSig.type == "1C") {
[6877]1498 int ii = phasebiasSat->NumberOfPhaseBiases;
1499 if (ii >= CLOCKORBIT_NUMBIAS)
1500 break;
[6850]1501 phasebiasSat->NumberOfPhaseBiases += 1;
1502 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E1_C;
[6851]1503 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1504 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1505 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1506 pbSig.wlIndicator;
[6877]1507 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1508 pbSig.discontinuityCounter;
[6850]1509 }
[8018]1510 else if (pbSig.type == "1X") {
[8005]1511 int ii = phasebiasSat->NumberOfPhaseBiases;
1512 if (ii >= CLOCKORBIT_NUMBIAS)
1513 break;
1514 phasebiasSat->NumberOfPhaseBiases += 1;
1515 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E1_BC;
1516 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1517 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[8005]1518 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1519 pbSig.wlIndicator;
[8005]1520 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1521 pbSig.discontinuityCounter;
[8005]1522 }
1523 else if (pbSig.type == "1Z") {
1524 int ii = phasebiasSat->NumberOfPhaseBiases;
1525 if (ii >= CLOCKORBIT_NUMBIAS)
1526 break;
1527 phasebiasSat->NumberOfPhaseBiases += 1;
1528 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E1_ABC;
1529 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1530 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[8005]1531 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1532 pbSig.wlIndicator;
[8005]1533 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1534 pbSig.discontinuityCounter;
[8005]1535 }
[6851]1536 else if (pbSig.type == "5I") {
[6877]1537 int ii = phasebiasSat->NumberOfPhaseBiases;
1538 if (ii >= CLOCKORBIT_NUMBIAS)
1539 break;
[6850]1540 phasebiasSat->NumberOfPhaseBiases += 1;
1541 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E5A_I;
[6851]1542 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1543 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1544 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1545 pbSig.wlIndicator;
[6877]1546 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1547 pbSig.discontinuityCounter;
[6850]1548 }
[6851]1549 else if (pbSig.type == "5Q") {
[6877]1550 int ii = phasebiasSat->NumberOfPhaseBiases;
1551 if (ii >= CLOCKORBIT_NUMBIAS)
1552 break;
[6850]1553 phasebiasSat->NumberOfPhaseBiases += 1;
1554 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E5A_Q;
[6851]1555 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1556 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1557 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1558 pbSig.wlIndicator;
[6877]1559 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1560 pbSig.discontinuityCounter;
[6850]1561 }
[8005]1562 else if (pbSig.type == "5X") {
1563 int ii = phasebiasSat->NumberOfPhaseBiases;
1564 if (ii >= CLOCKORBIT_NUMBIAS)
1565 break;
1566 phasebiasSat->NumberOfPhaseBiases += 1;
1567 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E5A_IQ;
1568 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1569 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[8005]1570 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1571 pbSig.wlIndicator;
[8005]1572 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1573 pbSig.discontinuityCounter;
[8005]1574 }
[6851]1575 else if (pbSig.type == "7I") {
[6877]1576 int ii = phasebiasSat->NumberOfPhaseBiases;
1577 if (ii >= CLOCKORBIT_NUMBIAS)
1578 break;
[6850]1579 phasebiasSat->NumberOfPhaseBiases += 1;
1580 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E5B_I;
[6851]1581 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1582 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1583 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1584 pbSig.wlIndicator;
[6877]1585 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1586 pbSig.discontinuityCounter;
[6850]1587 }
[6851]1588 else if (pbSig.type == "7Q") {
[6877]1589 int ii = phasebiasSat->NumberOfPhaseBiases;
1590 if (ii >= CLOCKORBIT_NUMBIAS)
1591 break;
[6850]1592 phasebiasSat->NumberOfPhaseBiases += 1;
1593 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E5B_Q;
[6851]1594 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1595 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1596 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1597 pbSig.wlIndicator;
[6877]1598 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1599 pbSig.discontinuityCounter;
[6850]1600 }
[8005]1601 else if (pbSig.type == "7X") {
1602 int ii = phasebiasSat->NumberOfPhaseBiases;
1603 if (ii >= CLOCKORBIT_NUMBIAS)
1604 break;
1605 phasebiasSat->NumberOfPhaseBiases += 1;
1606 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E5B_IQ;
1607 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1608 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[8005]1609 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1610 pbSig.wlIndicator;
[8005]1611 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1612 pbSig.discontinuityCounter;
[8005]1613 }
[6851]1614 else if (pbSig.type == "8I") {
[6877]1615 int ii = phasebiasSat->NumberOfPhaseBiases;
1616 if (ii >= CLOCKORBIT_NUMBIAS)
1617 break;
[6850]1618 phasebiasSat->NumberOfPhaseBiases += 1;
1619 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E5_I;
[6851]1620 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1621 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1622 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1623 pbSig.wlIndicator;
[6877]1624 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1625 pbSig.discontinuityCounter;
[6850]1626 }
[6851]1627 else if (pbSig.type == "8Q") {
[6877]1628 int ii = phasebiasSat->NumberOfPhaseBiases;
1629 if (ii >= CLOCKORBIT_NUMBIAS)
1630 break;
[6850]1631 phasebiasSat->NumberOfPhaseBiases += 1;
1632 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E5_Q;
[6851]1633 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1634 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1635 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1636 pbSig.wlIndicator;
[6877]1637 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1638 pbSig.discontinuityCounter;
[6850]1639 }
[8005]1640 else if (pbSig.type == "8X") {
1641 int ii = phasebiasSat->NumberOfPhaseBiases;
1642 if (ii >= CLOCKORBIT_NUMBIAS)
1643 break;
1644 phasebiasSat->NumberOfPhaseBiases += 1;
1645 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E5_IQ;
1646 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1647 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[8005]1648 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1649 pbSig.wlIndicator;
[8005]1650 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1651 pbSig.discontinuityCounter;
[8007]1652 }
[6851]1653 else if (pbSig.type == "6A") {
[6877]1654 int ii = phasebiasSat->NumberOfPhaseBiases;
1655 if (ii >= CLOCKORBIT_NUMBIAS)
1656 break;
[6850]1657 phasebiasSat->NumberOfPhaseBiases += 1;
1658 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E6_A;
[6851]1659 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1660 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1661 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1662 pbSig.wlIndicator;
[6877]1663 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1664 pbSig.discontinuityCounter;
[6850]1665 }
[6851]1666 else if (pbSig.type == "6B") {
[6877]1667 int ii = phasebiasSat->NumberOfPhaseBiases;
1668 if (ii >= CLOCKORBIT_NUMBIAS)
1669 break;
[6850]1670 phasebiasSat->NumberOfPhaseBiases += 1;
1671 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E6_B;
[6851]1672 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1673 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1674 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1675 pbSig.wlIndicator;
[6877]1676 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1677 pbSig.discontinuityCounter;
[6850]1678 }
[6851]1679 else if (pbSig.type == "6C") {
[6877]1680 int ii = phasebiasSat->NumberOfPhaseBiases;
1681 if (ii >= CLOCKORBIT_NUMBIAS)
1682 break;
[6850]1683 phasebiasSat->NumberOfPhaseBiases += 1;
1684 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E6_C;
[6851]1685 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1686 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1687 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1688 pbSig.wlIndicator;
[6877]1689 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1690 pbSig.discontinuityCounter;
[6850]1691 }
[8005]1692 else if (pbSig.type == "6X") {
1693 int ii = phasebiasSat->NumberOfPhaseBiases;
1694 if (ii >= CLOCKORBIT_NUMBIAS)
1695 break;
1696 phasebiasSat->NumberOfPhaseBiases += 1;
1697 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E6_BC;
1698 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1699 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[8005]1700 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1701 pbSig.wlIndicator;
[8005]1702 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1703 pbSig.discontinuityCounter;
[8005]1704 }
1705 else if (pbSig.type == "6Z") {
1706 int ii = phasebiasSat->NumberOfPhaseBiases;
1707 if (ii >= CLOCKORBIT_NUMBIAS)
1708 break;
1709 phasebiasSat->NumberOfPhaseBiases += 1;
1710 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E6_ABC;
1711 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1712 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[8005]1713 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1714 pbSig.wlIndicator;
[8005]1715 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1716 pbSig.discontinuityCounter;
[8007]1717 }
[6850]1718 }
1719 }
[6877]1720 if (prn.system() == 'J') {
[6851]1721 QListIterator<phaseBiasSignal> it(phaseBiasList);
[6850]1722 while (it.hasNext()) {
[6851]1723 const phaseBiasSignal &pbSig = it.next();
[6877]1724 if (pbSig.type == "1C") {
1725 int ii = phasebiasSat->NumberOfPhaseBiases;
1726 if (ii >= CLOCKORBIT_NUMBIAS)
1727 break;
[6850]1728 phasebiasSat->NumberOfPhaseBiases += 1;
1729 phasebiasSat->Biases[ii].Type = CODETYPEQZSS_L1_CA;
[6851]1730 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1731 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1732 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1733 pbSig.wlIndicator;
[6877]1734 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1735 pbSig.discontinuityCounter;
[6850]1736 }
[6851]1737 else if (pbSig.type == "1S") {
[6877]1738 int ii = phasebiasSat->NumberOfPhaseBiases;
1739 if (ii >= CLOCKORBIT_NUMBIAS)
1740 break;
[6850]1741 phasebiasSat->NumberOfPhaseBiases += 1;
1742 phasebiasSat->Biases[ii].Type = CODETYPEQZSS_L1C_D;
[6851]1743 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1744 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1745 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1746 pbSig.wlIndicator;
[6877]1747 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1748 pbSig.discontinuityCounter;
[6850]1749 }
[6851]1750 else if (pbSig.type == "1L") {
[6877]1751 int ii = phasebiasSat->NumberOfPhaseBiases;
1752 if (ii >= CLOCKORBIT_NUMBIAS)
1753 break;
[6850]1754 phasebiasSat->NumberOfPhaseBiases += 1;
1755 phasebiasSat->Biases[ii].Type = CODETYPEQZSS_L1C_P;
[6851]1756 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1757 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1758 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1759 pbSig.wlIndicator;
[6877]1760 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1761 pbSig.discontinuityCounter;
[6850]1762 }
[6851]1763 else if (pbSig.type == "1X") {
[6877]1764 int ii = phasebiasSat->NumberOfPhaseBiases;
1765 if (ii >= CLOCKORBIT_NUMBIAS)
1766 break;
[6850]1767 phasebiasSat->NumberOfPhaseBiases += 1;
1768 phasebiasSat->Biases[ii].Type = CODETYPEQZSS_L1C_DP;
[6851]1769 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1770 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1771 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1772 pbSig.wlIndicator;
[6877]1773 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1774 pbSig.discontinuityCounter;
[6850]1775 }
[6851]1776 else if (pbSig.type == "2S") {
[6877]1777 int ii = phasebiasSat->NumberOfPhaseBiases;
1778 if (ii >= CLOCKORBIT_NUMBIAS)
1779 break;
[6850]1780 phasebiasSat->NumberOfPhaseBiases += 1;
[8005]1781 phasebiasSat->Biases[ii].Type = CODETYPEQZSS_L2C_M;
[6851]1782 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1783 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1784 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1785 pbSig.wlIndicator;
[6877]1786 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1787 pbSig.discontinuityCounter;
[6850]1788 }
[6851]1789 else if (pbSig.type == "2L") {
[6877]1790 int ii = phasebiasSat->NumberOfPhaseBiases;
1791 if (ii >= CLOCKORBIT_NUMBIAS)
1792 break;
[6850]1793 phasebiasSat->NumberOfPhaseBiases += 1;
[8005]1794 phasebiasSat->Biases[ii].Type = CODETYPEQZSS_L2C_L;
[6851]1795 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1796 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1797 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1798 pbSig.wlIndicator;
[6877]1799 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1800 pbSig.discontinuityCounter;
[6850]1801 }
[6851]1802 else if (pbSig.type == "2X") {
[6877]1803 int ii = phasebiasSat->NumberOfPhaseBiases;
1804 if (ii >= CLOCKORBIT_NUMBIAS)
1805 break;
[6850]1806 phasebiasSat->NumberOfPhaseBiases += 1;
[8005]1807 phasebiasSat->Biases[ii].Type = CODETYPEQZSS_L2C_ML;
[6851]1808 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1809 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1810 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1811 pbSig.wlIndicator;
[6877]1812 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1813 pbSig.discontinuityCounter;
[6850]1814 }
[6851]1815 else if (pbSig.type == "5I") {
[6877]1816 int ii = phasebiasSat->NumberOfPhaseBiases;
1817 if (ii >= CLOCKORBIT_NUMBIAS)
1818 break;
[6850]1819 phasebiasSat->NumberOfPhaseBiases += 1;
1820 phasebiasSat->Biases[ii].Type = CODETYPEQZSS_L5_I;
[6851]1821 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1822 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1823 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1824 pbSig.wlIndicator;
[6877]1825 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1826 pbSig.discontinuityCounter;
[6850]1827 }
[6851]1828 else if (pbSig.type == "5Q") {
[6877]1829 int ii = phasebiasSat->NumberOfPhaseBiases;
1830 if (ii >= CLOCKORBIT_NUMBIAS)
1831 break;
[6850]1832 phasebiasSat->NumberOfPhaseBiases += 1;
1833 phasebiasSat->Biases[ii].Type = CODETYPEQZSS_L5_Q;
[6851]1834 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1835 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1836 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1837 pbSig.wlIndicator;
[6877]1838 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1839 pbSig.discontinuityCounter;
[6850]1840 }
[6851]1841 else if (pbSig.type == "5X") {
[6877]1842 int ii = phasebiasSat->NumberOfPhaseBiases;
1843 if (ii >= CLOCKORBIT_NUMBIAS)
1844 break;
[6850]1845 phasebiasSat->NumberOfPhaseBiases += 1;
1846 phasebiasSat->Biases[ii].Type = CODETYPEQZSS_L5_IQ;
[6851]1847 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1848 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1849 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1850 pbSig.wlIndicator;
[6877]1851 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1852 pbSig.discontinuityCounter;
[6850]1853 }
[6851]1854 else if (pbSig.type == "6S") {
[6877]1855 int ii = phasebiasSat->NumberOfPhaseBiases;
1856 if (ii >= CLOCKORBIT_NUMBIAS)
1857 break;
[6850]1858 phasebiasSat->NumberOfPhaseBiases += 1;
1859 phasebiasSat->Biases[ii].Type = CODETYPEQZSS_LEX_S;
[6851]1860 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1861 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1862 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1863 pbSig.wlIndicator;
[6877]1864 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1865 pbSig.discontinuityCounter;
[6850]1866 }
[6851]1867 else if (pbSig.type == "6L") {
[6877]1868 int ii = phasebiasSat->NumberOfPhaseBiases;
1869 if (ii >= CLOCKORBIT_NUMBIAS)
1870 break;
[6850]1871 phasebiasSat->NumberOfPhaseBiases += 1;
1872 phasebiasSat->Biases[ii].Type = CODETYPEQZSS_LEX_L;
[6851]1873 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1874 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1875 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1876 pbSig.wlIndicator;
[6877]1877 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1878 pbSig.discontinuityCounter;
[6850]1879 }
[6851]1880 else if (pbSig.type == "6X") {
[6877]1881 int ii = phasebiasSat->NumberOfPhaseBiases;
1882 if (ii >= CLOCKORBIT_NUMBIAS)
1883 break;
[6850]1884 phasebiasSat->NumberOfPhaseBiases += 1;
1885 phasebiasSat->Biases[ii].Type = CODETYPEQZSS_LEX_SL;
[6851]1886 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1887 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1888 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1889 pbSig.wlIndicator;
[6877]1890 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1891 pbSig.discontinuityCounter;
[6850]1892 }
1893 }
1894 }
[6877]1895 if (prn.system() == 'S') {
[6851]1896 QListIterator<phaseBiasSignal> it(phaseBiasList);
[6850]1897 while (it.hasNext()) {
[6851]1898 const phaseBiasSignal &pbSig = it.next();
[6877]1899 if (pbSig.type == "1C") {
1900 int ii = phasebiasSat->NumberOfPhaseBiases;
1901 if (ii >= CLOCKORBIT_NUMBIAS)
1902 break;
[6850]1903 phasebiasSat->NumberOfPhaseBiases += 1;
1904 phasebiasSat->Biases[ii].Type = CODETYPE_SBAS_L1_CA;
[6851]1905 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1906 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1907 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1908 pbSig.wlIndicator;
[6877]1909 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1910 pbSig.discontinuityCounter;
[6850]1911 }
[6851]1912 else if (pbSig.type == "5I") {
[6877]1913 int ii = phasebiasSat->NumberOfPhaseBiases;
1914 if (ii >= CLOCKORBIT_NUMBIAS)
1915 break;
[6850]1916 phasebiasSat->NumberOfPhaseBiases += 1;
1917 phasebiasSat->Biases[ii].Type = CODETYPE_SBAS_L5_I;
[6851]1918 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1919 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1920 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1921 pbSig.wlIndicator;
[6877]1922 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1923 pbSig.discontinuityCounter;
[6850]1924 }
[6851]1925 else if (pbSig.type == "5Q") {
[6877]1926 int ii = phasebiasSat->NumberOfPhaseBiases;
1927 if (ii >= CLOCKORBIT_NUMBIAS)
1928 break;
[6850]1929 phasebiasSat->NumberOfPhaseBiases += 1;
1930 phasebiasSat->Biases[ii].Type = CODETYPE_SBAS_L5_Q;
[6851]1931 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1932 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1933 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1934 pbSig.wlIndicator;
[6877]1935 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1936 pbSig.discontinuityCounter;
[6850]1937 }
[6851]1938 else if (pbSig.type == "5X") {
[6877]1939 int ii = phasebiasSat->NumberOfPhaseBiases;
1940 if (ii >= CLOCKORBIT_NUMBIAS)
1941 break;
[6850]1942 phasebiasSat->NumberOfPhaseBiases += 1;
1943 phasebiasSat->Biases[ii].Type = CODETYPE_SBAS_L5_IQ;
[6851]1944 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1945 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1946 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1947 pbSig.wlIndicator;
[6877]1948 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1949 pbSig.discontinuityCounter;
[6850]1950 }
1951 }
1952 }
[6877]1953 if (prn.system() == 'C') {
[6851]1954 QListIterator<phaseBiasSignal> it(phaseBiasList);
[6850]1955 while (it.hasNext()) {
[6851]1956 const phaseBiasSignal &pbSig = it.next();
[6877]1957 if (pbSig.type == "2I") {
1958 int ii = phasebiasSat->NumberOfPhaseBiases;
1959 if (ii >= CLOCKORBIT_NUMBIAS)
1960 break;
[6850]1961 phasebiasSat->NumberOfPhaseBiases += 1;
1962 phasebiasSat->Biases[ii].Type = CODETYPE_BDS_B1_I;
[6851]1963 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1964 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1965 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1966 pbSig.wlIndicator;
[6877]1967 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1968 pbSig.discontinuityCounter;
[6850]1969 }
[6851]1970 else if (pbSig.type == "2Q") {
[6877]1971 int ii = phasebiasSat->NumberOfPhaseBiases;
1972 if (ii >= CLOCKORBIT_NUMBIAS)
1973 break;
[6850]1974 phasebiasSat->NumberOfPhaseBiases += 1;
1975 phasebiasSat->Biases[ii].Type = CODETYPE_BDS_B1_Q;
[6851]1976 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1977 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1978 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1979 pbSig.wlIndicator;
[6877]1980 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1981 pbSig.discontinuityCounter;
[6850]1982 }
[6851]1983 else if (pbSig.type == "2X") {
[6877]1984 int ii = phasebiasSat->NumberOfPhaseBiases;
1985 if (ii >= CLOCKORBIT_NUMBIAS)
1986 break;
[6850]1987 phasebiasSat->NumberOfPhaseBiases += 1;
1988 phasebiasSat->Biases[ii].Type = CODETYPE_BDS_B1_IQ;
[6851]1989 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]1990 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]1991 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]1992 pbSig.wlIndicator;
[6877]1993 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]1994 pbSig.discontinuityCounter;
[6850]1995 }
[6851]1996 else if (pbSig.type == "6I") {
[6877]1997 int ii = phasebiasSat->NumberOfPhaseBiases;
1998 if (ii >= CLOCKORBIT_NUMBIAS)
1999 break;
[6850]2000 phasebiasSat->NumberOfPhaseBiases += 1;
[7781]2001 phasebiasSat->Biases[ii].Type = CODETYPE_BDS_B3_I;
[6851]2002 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]2003 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]2004 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]2005 pbSig.wlIndicator;
[6877]2006 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]2007 pbSig.discontinuityCounter;
[6850]2008 }
[6851]2009 else if (pbSig.type == "6Q") {
[6877]2010 int ii = phasebiasSat->NumberOfPhaseBiases;
2011 if (ii >= CLOCKORBIT_NUMBIAS)
2012 break;
[6850]2013 phasebiasSat->NumberOfPhaseBiases += 1;
[7781]2014 phasebiasSat->Biases[ii].Type = CODETYPE_BDS_B3_Q;
[6851]2015 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]2016 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]2017 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]2018 pbSig.wlIndicator;
[6877]2019 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]2020 pbSig.discontinuityCounter;
[6850]2021 }
[6851]2022 else if (pbSig.type == "6X") {
[6877]2023 int ii = phasebiasSat->NumberOfPhaseBiases;
2024 if (ii >= CLOCKORBIT_NUMBIAS)
2025 break;
[6850]2026 phasebiasSat->NumberOfPhaseBiases += 1;
[7774]2027 phasebiasSat->Biases[ii].Type = CODETYPE_BDS_B3_IQ;
[6851]2028 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]2029 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]2030 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]2031 pbSig.wlIndicator;
[6877]2032 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]2033 pbSig.discontinuityCounter;
[6850]2034 }
[6851]2035 else if (pbSig.type == "7I") {
[6877]2036 int ii = phasebiasSat->NumberOfPhaseBiases;
2037 if (ii >= CLOCKORBIT_NUMBIAS)
2038 break;
[6850]2039 phasebiasSat->NumberOfPhaseBiases += 1;
[7781]2040 phasebiasSat->Biases[ii].Type = CODETYPE_BDS_B2_I;
[6851]2041 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]2042 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]2043 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]2044 pbSig.wlIndicator;
[6877]2045 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]2046 pbSig.discontinuityCounter;
[6850]2047 }
[6851]2048 else if (pbSig.type == "7Q") {
[6877]2049 int ii = phasebiasSat->NumberOfPhaseBiases;
2050 if (ii >= CLOCKORBIT_NUMBIAS)
2051 break;
[6850]2052 phasebiasSat->NumberOfPhaseBiases += 1;
[7781]2053 phasebiasSat->Biases[ii].Type = CODETYPE_BDS_B2_Q;
[6851]2054 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]2055 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]2056 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]2057 pbSig.wlIndicator;
[6877]2058 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]2059 pbSig.discontinuityCounter;
[6850]2060 }
[6851]2061 else if (pbSig.type == "7X") {
[6877]2062 int ii = phasebiasSat->NumberOfPhaseBiases;
2063 if (ii >= CLOCKORBIT_NUMBIAS)
2064 break;
[6850]2065 phasebiasSat->NumberOfPhaseBiases += 1;
[7774]2066 phasebiasSat->Biases[ii].Type = CODETYPE_BDS_B2_IQ;
[6851]2067 phasebiasSat->Biases[ii].Bias = pbSig.bias;
[8018]2068 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
[6877]2069 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
[8018]2070 pbSig.wlIndicator;
[6877]2071 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
[8018]2072 pbSig.discontinuityCounter;
[6850]2073 }
2074 }
2075 }
2076 }
[3222]2077 }
2078 }
[3227]2079
[5662]2080 QByteArray hlpBufferCo;
[3493]2081
2082 // Orbit and Clock Corrections together
2083 // ------------------------------------
[4174]2084 if (_samplRtcmEphCorr == 0.0) {
[6877]2085 if (co.NumberOfSat[CLOCKORBIT_SATGPS] > 0
2086 || co.NumberOfSat[CLOCKORBIT_SATGLONASS] > 0
2087 || co.NumberOfSat[CLOCKORBIT_SATGALILEO] > 0
2088 || co.NumberOfSat[CLOCKORBIT_SATQZSS] > 0
2089 || co.NumberOfSat[CLOCKORBIT_SATSBAS] > 0
2090 || co.NumberOfSat[CLOCKORBIT_SATBDS] > 0) {
[3493]2091 char obuffer[CLOCKORBIT_BUFFERSIZE];
2092 int len = MakeClockOrbit(&co, COTYPE_AUTO, 0, obuffer, sizeof(obuffer));
2093 if (len > 0) {
2094 hlpBufferCo = QByteArray(obuffer, len);
2095 }
[3222]2096 }
2097 }
[3493]2098
2099 // Orbit and Clock Corrections separately
2100 // --------------------------------------
2101 else {
[5666]2102 if (co.NumberOfSat[CLOCKORBIT_SATGPS] > 0) {
[3493]2103 char obuffer[CLOCKORBIT_BUFFERSIZE];
[4174]2104 if (fmod(epoTime.gpssec(), _samplRtcmEphCorr) == 0.0) {
[4754]2105 co.UpdateInterval = ephUpdInd;
[6877]2106 int len1 = MakeClockOrbit(&co, COTYPE_GPSORBIT, 1, obuffer,
2107 sizeof(obuffer));
[4754]2108 co.UpdateInterval = clkUpdInd;
[3493]2109 if (len1 > 0) {
2110 hlpBufferCo += QByteArray(obuffer, len1);
2111 }
2112 }
[5666]2113 int mmsg = (co.NumberOfSat[CLOCKORBIT_SATGLONASS] > 0) ? 1 : 0;
[6877]2114 int len2 = MakeClockOrbit(&co, COTYPE_GPSCLOCK, mmsg, obuffer,
2115 sizeof(obuffer));
[3493]2116 if (len2 > 0) {
2117 hlpBufferCo += QByteArray(obuffer, len2);
2118 }
2119 }
[5666]2120 if (co.NumberOfSat[CLOCKORBIT_SATGLONASS] > 0) {
[3493]2121 char obuffer[CLOCKORBIT_BUFFERSIZE];
[4174]2122 if (fmod(epoTime.gpssec(), _samplRtcmEphCorr) == 0.0) {
[4754]2123 co.UpdateInterval = ephUpdInd;
[6877]2124 int len1 = MakeClockOrbit(&co, COTYPE_GLONASSORBIT, 1, obuffer,
2125 sizeof(obuffer));
[4754]2126 co.UpdateInterval = clkUpdInd;
[3493]2127 if (len1 > 0) {
2128 hlpBufferCo += QByteArray(obuffer, len1);
2129 }
2130 }
[6844]2131 int mmsg = (co.NumberOfSat[CLOCKORBIT_SATGALILEO] > 0) ? 1 : 0;
[6877]2132 int len2 = MakeClockOrbit(&co, COTYPE_GLONASSCLOCK, mmsg, obuffer,
2133 sizeof(obuffer));
[3493]2134 if (len2 > 0) {
2135 hlpBufferCo += QByteArray(obuffer, len2);
2136 }
2137 }
[6844]2138 if (co.NumberOfSat[CLOCKORBIT_SATGALILEO] > 0) {
2139 char obuffer[CLOCKORBIT_BUFFERSIZE];
2140 if (fmod(epoTime.gpssec(), _samplRtcmEphCorr) == 0.0) {
2141 co.UpdateInterval = ephUpdInd;
[6877]2142 int len1 = MakeClockOrbit(&co, COTYPE_GALILEOORBIT, 1, obuffer,
2143 sizeof(obuffer));
[6844]2144 co.UpdateInterval = clkUpdInd;
2145 if (len1 > 0) {
2146 hlpBufferCo += QByteArray(obuffer, len1);
2147 }
2148 }
2149 int mmsg = (co.NumberOfSat[CLOCKORBIT_SATQZSS] > 0) ? 1 : 0;
[6877]2150 int len2 = MakeClockOrbit(&co, COTYPE_GALILEOCLOCK, mmsg, obuffer,
2151 sizeof(obuffer));
[6844]2152 if (len2 > 0) {
2153 hlpBufferCo += QByteArray(obuffer, len2);
2154 }
2155 }
2156 if (co.NumberOfSat[CLOCKORBIT_SATQZSS] > 0) {
2157 char obuffer[CLOCKORBIT_BUFFERSIZE];
2158 if (fmod(epoTime.gpssec(), _samplRtcmEphCorr) == 0.0) {
2159 co.UpdateInterval = ephUpdInd;
[6877]2160 int len1 = MakeClockOrbit(&co, COTYPE_QZSSORBIT, 1, obuffer,
2161 sizeof(obuffer));
[6844]2162 co.UpdateInterval = clkUpdInd;
2163 if (len1 > 0) {
2164 hlpBufferCo += QByteArray(obuffer, len1);
2165 }
2166 }
2167 int mmsg = (co.NumberOfSat[CLOCKORBIT_SATSBAS] > 0) ? 1 : 0;
[6877]2168 int len2 = MakeClockOrbit(&co, COTYPE_QZSSCLOCK, mmsg, obuffer,
2169 sizeof(obuffer));
[6844]2170 if (len2 > 0) {
2171 hlpBufferCo += QByteArray(obuffer, len2);
2172 }
2173 }
2174 if (co.NumberOfSat[CLOCKORBIT_SATSBAS] > 0) {
2175 char obuffer[CLOCKORBIT_BUFFERSIZE];
2176 if (fmod(epoTime.gpssec(), _samplRtcmEphCorr) == 0.0) {
2177 co.UpdateInterval = ephUpdInd;
[6877]2178 int len1 = MakeClockOrbit(&co, COTYPE_SBASORBIT, 1, obuffer,
2179 sizeof(obuffer));
[6844]2180 co.UpdateInterval = clkUpdInd;
2181 if (len1 > 0) {
2182 hlpBufferCo += QByteArray(obuffer, len1);
2183 }
2184 }
2185 int mmsg = (co.NumberOfSat[CLOCKORBIT_SATBDS] > 0) ? 1 : 0;
[6877]2186 int len2 = MakeClockOrbit(&co, COTYPE_SBASCLOCK, mmsg, obuffer,
2187 sizeof(obuffer));
[6844]2188 if (len2 > 0) {
2189 hlpBufferCo += QByteArray(obuffer, len2);
2190 }
2191 }
2192 if (co.NumberOfSat[CLOCKORBIT_SATBDS] > 0) {
2193 char obuffer[CLOCKORBIT_BUFFERSIZE];
2194 if (fmod(epoTime.gpssec(), _samplRtcmEphCorr) == 0.0) {
2195 co.UpdateInterval = ephUpdInd;
[6877]2196 int len1 = MakeClockOrbit(&co, COTYPE_BDSORBIT, 1, obuffer,
2197 sizeof(obuffer));
[6844]2198 co.UpdateInterval = clkUpdInd;
2199 if (len1 > 0) {
2200 hlpBufferCo += QByteArray(obuffer, len1);
2201 }
2202 }
[6877]2203 int len2 = MakeClockOrbit(&co, COTYPE_BDSCLOCK, 0, obuffer,
2204 sizeof(obuffer));
[6844]2205 if (len2 > 0) {
2206 hlpBufferCo += QByteArray(obuffer, len2);
2207 }
2208 }
[3493]2209 }
[5662]2210
[6850]2211 // Code Biases
2212 // -----------
[5662]2213 QByteArray hlpBufferBias;
[6877]2214 if (bias.NumberOfSat[CLOCKORBIT_SATGPS] > 0
2215 || bias.NumberOfSat[CLOCKORBIT_SATGLONASS] > 0
2216 || bias.NumberOfSat[CLOCKORBIT_SATGALILEO] > 0
2217 || bias.NumberOfSat[CLOCKORBIT_SATQZSS] > 0
2218 || bias.NumberOfSat[CLOCKORBIT_SATSBAS] > 0
2219 || bias.NumberOfSat[CLOCKORBIT_SATBDS] > 0) {
[3222]2220 char obuffer[CLOCKORBIT_BUFFERSIZE];
[5666]2221 int len = MakeCodeBias(&bias, BTYPE_AUTO, 0, obuffer, sizeof(obuffer));
[3222]2222 if (len > 0) {
[3227]2223 hlpBufferBias = QByteArray(obuffer, len);
[3222]2224 }
2225 }
[3227]2226
[6850]2227 // Phase Biases
2228 // ------------
2229 QByteArray hlpBufferPhaseBias;
[6877]2230 if (phasebias.NumberOfSat[CLOCKORBIT_SATGPS] > 0
2231 || phasebias.NumberOfSat[CLOCKORBIT_SATGLONASS] > 0
2232 || phasebias.NumberOfSat[CLOCKORBIT_SATGALILEO] > 0
2233 || phasebias.NumberOfSat[CLOCKORBIT_SATQZSS] > 0
2234 || phasebias.NumberOfSat[CLOCKORBIT_SATSBAS] > 0
2235 || phasebias.NumberOfSat[CLOCKORBIT_SATBDS] > 0) {
[6850]2236 char obuffer[CLOCKORBIT_BUFFERSIZE];
[6877]2237 int len = MakePhaseBias(&phasebias, PBTYPE_AUTO, 0, obuffer,
2238 sizeof(obuffer));
[6850]2239 if (len > 0) {
2240 hlpBufferPhaseBias = QByteArray(obuffer, len);
2241 }
2242 }
2243
2244 // VTEC
2245 // ----
2246 QByteArray hlpBufferVtec;
[6860]2247 if (vtec.NumLayers > 0) {
2248 char obuffer[CLOCKORBIT_BUFFERSIZE];
2249 int len = MakeVTEC(&vtec, 0, obuffer, sizeof(obuffer));
2250 if (len > 0) {
2251 hlpBufferVtec = QByteArray(obuffer, len);
2252 }
2253 }
[6850]2254
[6877]2255 _outBuffer += hlpBufferCo + hlpBufferBias + hlpBufferPhaseBias
2256 + hlpBufferVtec;
[3222]2257}
2258
[5662]2259//
[3222]2260////////////////////////////////////////////////////////////////////////////
[6442]2261void bncRtnetUploadCaster::processSatellite(const t_eph* eph, int GPSweek,
[6877]2262 double GPSweeks, const QString& prn, const ColumnVector& rtnAPC,
[8484]2263 double rtnUra, const ColumnVector& rtnClk, const ColumnVector& rtnVel,
2264 const ColumnVector& rtnCoM, const ColumnVector& rtnClkSig,
[6877]2265 struct ClockOrbit::SatData* sd, QString& outLine) {
[3222]2266
[4930]2267 // Broadcast Position and Velocity
2268 // -------------------------------
[8484]2269 ColumnVector xB(7);
[4930]2270 ColumnVector vB(3);
[6109]2271 eph->getCrd(bncTime(GPSweek, GPSweeks), xB, vB, false);
[5662]2272
[4991]2273 // Precise Position
2274 // ----------------
2275 ColumnVector xP = _CoM ? rtnCoM : rtnAPC;
[3222]2276
[5662]2277 double dc = 0.0;
[8411]2278 if (_crdTrafo != "IGS14") {
[8146]2279 crdTrafo(GPSweek, xP, dc);
[8101]2280 }
[5662]2281
[4930]2282 // Difference in xyz
2283 // -----------------
[6877]2284 ColumnVector dx = xB.Rows(1, 3) - xP;
2285 ColumnVector dv = vB - rtnVel;
[5662]2286
[4930]2287 // Difference in RSW
2288 // -----------------
[3222]2289 ColumnVector rsw(3);
[6877]2290 XYZ_to_RSW(xB.Rows(1, 3), vB, dx, rsw);
[3222]2291
[4930]2292 ColumnVector dotRsw(3);
[6877]2293 XYZ_to_RSW(xB.Rows(1, 3), vB, dv, dotRsw);
[3222]2294
[4930]2295 // Clock Correction
2296 // ----------------
[8498]2297 double dClkA0 = rtnClk(1) - (xB(4) - dc) * t_CST::c;
2298 double dClkA1 = 0.0;
2299 double dClkA2 = 0.0;
2300 if (rtnClk(2)) {
2301 dClkA0 = rtnClk(1) - (xB(5) - dc) * t_CST::c;
2302 dClkA1 = rtnClk(2) - xB(6) * t_CST::c;
2303 }
2304 if (rtnClk(3)) {
2305 dClkA2 = rtnClk(3) - xB(7) * t_CST::c;
2306 }
[3222]2307
2308 if (sd) {
[6877]2309 sd->ID = prn.mid(1).toInt();
2310 sd->IOD = eph->IOD();
[8484]2311 sd->Clock.DeltaA0 = dClkA0;
2312 sd->Clock.DeltaA1 = dClkA1;
2313 sd->Clock.DeltaA2 = dClkA2;
2314 sd->UserRangeAccuracy = rtnUra;
2315 sd->Orbit.DeltaRadial = rsw(1);
[6877]2316 sd->Orbit.DeltaAlongTrack = rsw(2);
2317 sd->Orbit.DeltaCrossTrack = rsw(3);
[8484]2318 sd->Orbit.DotDeltaRadial = dotRsw(1);
[4930]2319 sd->Orbit.DotDeltaAlongTrack = dotRsw(2);
2320 sd->Orbit.DotDeltaCrossTrack = dotRsw(3);
[3222]2321 }
2322
[8484]2323 outLine.sprintf("%d %.1f %s %u %10.3f %8.3f %8.3f %8.3f %8.3f %8.3f\n", GPSweek,
2324 GPSweeks, eph->prn().toString().c_str(), eph->IOD(), dClkA0, dClkA1, dClkA2,
2325 rsw(1), rsw(2), rsw(3));
[3222]2326
[8498]2327 // RTNET full clock for RINEX and SP3 file
2328 // ---------------------------------------
[4991]2329 double relativity = -2.0 * DotProduct(xP, rtnVel) / t_CST::c;
[8498]2330 double clkRnx = (rtnClk[0] - relativity) / t_CST::c; // [s]
[8484]2331 double clkRnxRate = rtnClk[1] / t_CST::c; // [s/s = -]
2332 double clkRnxAcc = rtnClk[2] / t_CST::c; // [s/s² ) -/s]
[4991]2333
[3222]2334 if (_rnx) {
[8509]2335 double clkRnxSig, clkRnxRateSig, clkRnxAccSig;
2336 int s = rtnClkSig.size();
2337 switch (s) {
2338 case 1:
2339 clkRnxSig = rtnClkSig[0] / t_CST::c; // [s]
2340 clkRnxRateSig = 0.0; // [s/s = -]
2341 clkRnxAccSig = 0.0; // [s/s² ) -/s]
2342 break;
2343 case 2:
2344 clkRnxSig = rtnClkSig[0] / t_CST::c; // [s]
2345 clkRnxRateSig = rtnClkSig[1] / t_CST::c; // [s/s = -]
2346 clkRnxAccSig = 0.0; // [s/s² ) -/s]
2347 break;
2348 case 3:
2349 clkRnxSig = rtnClkSig[0] / t_CST::c; // [s]
2350 clkRnxRateSig = rtnClkSig[1] / t_CST::c; // [s/s = -]
2351 clkRnxAccSig = rtnClkSig[2] / t_CST::c; // [s/s² ) -/s]
2352 break;
2353 }
[8484]2354 _rnx->write(GPSweek, GPSweeks, prn, clkRnx, clkRnxRate, clkRnxAcc,
2355 clkRnxSig, clkRnxRateSig, clkRnxAccSig);
[3222]2356 }
2357 if (_sp3) {
[8484]2358 _sp3->write(GPSweek, GPSweeks, prn, rtnCoM, clkRnx, rtnVel, clkRnxRate);
[3222]2359 }
2360}
2361
2362// Transform Coordinates
2363////////////////////////////////////////////////////////////////////////////
[5662]2364void bncRtnetUploadCaster::crdTrafo(int GPSWeek, ColumnVector& xyz,
[6877]2365 double& dc) {
[3222]2366
2367 // Current epoch minus 2000.0 in years
2368 // ------------------------------------
[6877]2369 double dt = (GPSWeek - (1042.0 + 6.0 / 7.0)) / 365.2422 * 7.0 + 2000.0 - _t0;
[3222]2370
2371 ColumnVector dx(3);
2372
2373 dx(1) = _dx + dt * _dxr;
2374 dx(2) = _dy + dt * _dyr;
2375 dx(3) = _dz + dt * _dzr;
2376
2377 static const double arcSec = 180.0 * 3600.0 / M_PI;
2378
2379 double ox = (_ox + dt * _oxr) / arcSec;
2380 double oy = (_oy + dt * _oyr) / arcSec;
2381 double oz = (_oz + dt * _ozr) / arcSec;
2382
2383 double sc = 1.0 + _sc * 1e-9 + dt * _scr * 1e-9;
2384
[4912]2385 // Specify approximate center of area
2386 // ----------------------------------
2387 ColumnVector meanSta(3);
2388
[6877]2389 if (_crdTrafo == "ETRF2000") {
2390 meanSta(1) = 3661090.0;
2391 meanSta(2) = 845230.0;
2392 meanSta(3) = 5136850.0;
[4908]2393 }
[8101]2394 else if (_crdTrafo == "GDA2020") {
[4973]2395 meanSta(1) = -4052050.0;
[6877]2396 meanSta(2) = 4212840.0;
[4973]2397 meanSta(3) = -2545110.0;
[4912]2398 }
2399 else if (_crdTrafo == "SIRGAS2000") {
[6877]2400 meanSta(1) = 3740860.0;
[4973]2401 meanSta(2) = -4964290.0;
2402 meanSta(3) = -1425420.0;
[4912]2403 }
[5343]2404 else if (_crdTrafo == "DREF91") {
[6877]2405 meanSta(1) = 3959579.0;
2406 meanSta(2) = 721719.0;
2407 meanSta(3) = 4931539.0;
[5343]2408 }
[4912]2409 else if (_crdTrafo == "Custom") {
[6877]2410 meanSta(1) = 0.0; // TODO
2411 meanSta(2) = 0.0; // TODO
2412 meanSta(3) = 0.0; // TODO
[4912]2413 }
[8484]2414
[4912]2415 // Clock correction proportional to topocentric distance to satellites
2416 // -------------------------------------------------------------------
2417 double rho = (xyz - meanSta).norm_Frobenius();
[4913]2418 dc = rho * (sc - 1.0) / sc / t_CST::c;
[4908]2419
[6877]2420 Matrix rMat(3, 3);
2421 rMat(1, 1) = 1.0;
2422 rMat(1, 2) = -oz;
2423 rMat(1, 3) = oy;
2424 rMat(2, 1) = oz;
2425 rMat(2, 2) = 1.0;
2426 rMat(2, 3) = -ox;
2427 rMat(3, 1) = -oy;
2428 rMat(3, 2) = ox;
2429 rMat(3, 3) = 1.0;
[3222]2430
2431 xyz = sc * rMat * xyz + dx;
2432}
2433
[6557]2434int bncRtnetUploadCaster::determineUpdateInd(double samplingRate) {
2435
2436 if (samplingRate == 10.0) {
2437 return 3;
2438 }
2439 else if (samplingRate == 15.0) {
2440 return 4;
2441 }
2442 else if (samplingRate == 30.0) {
2443 return 5;
2444 }
2445 else if (samplingRate == 60.0) {
2446 return 6;
2447 }
2448 else if (samplingRate == 120.0) {
2449 return 7;
2450 }
2451 else if (samplingRate == 240.0) {
2452 return 8;
2453 }
2454 else if (samplingRate == 300.0) {
2455 return 9;
2456 }
2457 else if (samplingRate == 600.0) {
2458 return 10;
2459 }
2460 else if (samplingRate == 900.0) {
2461 return 11;
2462 }
2463 else if (samplingRate == 1800.0) {
2464 return 12;
2465 }
2466 else if (samplingRate == 3600.0) {
2467 return 13;
2468 }
2469 else if (samplingRate == 7200.0) {
2470 return 14;
2471 }
2472 else if (samplingRate == 10800.0) {
2473 return 15;
2474 }
[6877]2475 return 2; // default
[6557]2476}
Note: See TracBrowser for help on using the repository browser.