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

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

minor changes to prevent G00 entries during SSR generation for orbits and clocks

File size: 99.4 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 }
[8582]225 int iEpoBegEarlier = _rtnetStreamBuffer.indexOf('*');
[8579]226 if (iEpoBegEarlier != -1 && iEpoBegEarlier < iEpoBeg) { // are there more epoch lines in buffer?
[8089]227 _rtnetStreamBuffer = _rtnetStreamBuffer.mid(iEpoBegEarlier);
[6896]228 }
229 else {
230 _rtnetStreamBuffer = _rtnetStreamBuffer.mid(iEpoBeg);
231 }
[3230]232
[8579]233 int iEpoEnd = _rtnetStreamBuffer.indexOf("EOE"); // end of first epoch
[3230]234 if (iEpoEnd == -1) {
235 return;
236 }
[3226]237 else {
[8582]238 lines = _rtnetStreamBuffer.left(iEpoEnd).split('\n',
239 QString::SkipEmptyParts);
[6877]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)
[8570]332 double rtnUra = 0.0; // [m]
333 ColumnVector rtnAPC; rtnAPC.ReSize(3); rtnAPC = 0.0; // [m, m, m]
334 ColumnVector rtnVel; rtnVel.ReSize(3); rtnVel = 0.0; // [m/s, m/s, m/s]]
335 ColumnVector rtnCoM; rtnCoM.ReSize(3); rtnCoM = 0.0; // [m, m, m]
336 ColumnVector rtnClk; rtnClk.ReSize(3); rtnClk = 0.0; // [m, m/s, m/s²]
337 ColumnVector rtnClkSig; rtnClkSig.ReSize(3); rtnClkSig = 0.0; // [m, m/s, m/s²]
[6877]338 t_prn prn;
[8543]339
[3222]340 QTextStream in(lines[ii].toAscii());
[6876]341 in >> key;
[3222]342
[6860]343 // non-satellite specific parameters
[6877]344 if (key.contains("IND", Qt::CaseSensitive)) {
[8018]345 in >> dispersiveBiasConsistenyIndicator >> mwConsistencyIndicator;
[6860]346 continue;
347 }
[8570]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 }
[8570]371
[6877]372 // satellite specific parameters
373 char sys = key.mid(0, 1).at(0).toAscii();
374 int number = key.mid(1, 2).toInt();
375 int flags = 0;
376 if (sys == 'E') { // I/NAV
377 flags = 1;
378 }
[6876]379 prn.set(sys, number, flags);
380 QString prnInternalStr = QString::fromStdString(prn.toInternalString());
[6877]381 QString prnStr = QString::fromStdString(prn.toString());
382
[6876]383 const t_eph* ephLast = _ephUser->ephLast(prnInternalStr);
384 const t_eph* ephPrev = _ephUser->ephPrev(prnInternalStr);
[6877]385 const t_eph* eph = ephLast;
[8570]386
[6442]387 if (eph) {
[3754]388
[4098]389 // Use previous ephemeris if the last one is too recent
390 // ----------------------------------------------------
391 const int MINAGE = 60; // seconds
[6877]392 if (ephPrev && eph->receptDateTime().isValid()
393 && eph->receptDateTime().secsTo(currentDateAndTimeGPS()) < MINAGE) {
[6442]394 eph = ephPrev;
[4098]395 }
[3754]396
[3753]397 // Make sure the clock messages refer to same IOD as orbit messages
398 // ----------------------------------------------------------------
399 if (_usedEph) {
[4174]400 if (fmod(epoTime.gpssec(), _samplRtcmEphCorr) == 0.0) {
[6876]401 (*_usedEph)[prnInternalStr] = eph;
[3753]402 }
403 else {
404 eph = 0;
[6876]405 if (_usedEph->contains(prnInternalStr)) {
406 const t_eph* usedEph = _usedEph->value(prnInternalStr);
[6877]407 if (usedEph == ephLast) {
[6442]408 eph = ephLast;
[3753]409 }
[6442]410 else if (usedEph == ephPrev) {
411 eph = ephPrev;
[3753]412 }
413 }
414 }
415 }
416 }
417
[8582]418 if (eph &&
419 eph->checkState() != t_eph::bad &&
420 eph->checkState() != t_eph::unhealthy ) {
[5503]421 QMap<QString, double> codeBiases;
[6851]422 QList<phaseBiasSignal> phaseBiasList;
423 phaseBiasesSat pbSat;
[5503]424
[4991]425 while (true) {
426 QString key;
[6877]427 int numVal = 0;
[6850]428 in >> key;
[4991]429 if (in.status() != QTextStream::Ok) {
430 break;
431 }
[6877]432 if (key == "APC") {
[6850]433 in >> numVal;
[8570]434 rtnAPC.ReSize(3); rtnAPC = 0.0;
[6850]435 for (int ii = 0; ii < numVal; ii++) {
436 in >> rtnAPC[ii];
437 }
[4991]438 }
[8484]439 else if (key == "Ura") {
[6850]440 in >> numVal;
[6877]441 if (numVal == 1)
[8484]442 in >> rtnUra;
[4991]443 }
[8484]444 else if (key == "Clk") {
445 in >> numVal;
[8570]446 rtnClk.ReSize(3); rtnClk = 0.0;
[8484]447 for (int ii = 0; ii < numVal; ii++) {
448 in >> rtnClk[ii];
449 }
450 }
451 else if (key == "ClkSig") {
452 in >> numVal;
[8570]453 rtnClkSig.ReSize(3); rtnClkSig = 0.0;
[8484]454 for (int ii = 0; ii < numVal; ii++) {
455 in >> rtnClkSig[ii];
456 }
457 }
[4991]458 else if (key == "Vel") {
[6850]459 in >> numVal;
[8570]460 rtnVel.ReSize(3); rtnVel = 0.0;
[6850]461 for (int ii = 0; ii < numVal; ii++) {
462 in >> rtnVel[ii];
463 }
[4991]464 }
465 else if (key == "CoM") {
[6850]466 in >> numVal;
[8570]467 rtnCoM.ReSize(3); rtnCoM = 0.0;
[6850]468 for (int ii = 0; ii < numVal; ii++) {
469 in >> rtnCoM[ii];
470 }
[4991]471 }
[5503]472 else if (key == "CodeBias") {
[6850]473 in >> numVal;
[5503]474 for (int ii = 0; ii < numVal; ii++) {
475 QString type;
[6877]476 double value;
[5503]477 in >> type >> value;
478 codeBiases[type] = value;
479 }
480 }
[6857]481 else if (key == "YawAngle") {
[8018]482 in >> numVal >> pbSat.yawAngle;
483 if (pbSat.yawAngle < 0.0) {
484 pbSat.yawAngle += (2*M_PI);
[6975]485 }
[8018]486 else if (pbSat.yawAngle > 2*M_PI) {
487 pbSat.yawAngle -= (2*M_PI);
[6975]488 }
[6851]489 }
[6857]490 else if (key == "YawRate") {
[8018]491 in >> numVal >> pbSat.yawRate;
[6851]492 }
[6850]493 else if (key == "PhaseBias") {
494 in >> numVal;
495 for (int ii = 0; ii < numVal; ii++) {
[6851]496 phaseBiasSignal pb;
[8018]497 in >> pb.type >> pb.bias >> pb.integerIndicator
498 >> pb.wlIndicator >> pb.discontinuityCounter;
[6851]499 phaseBiasList.append(pb);
[6850]500 }
501 }
[4991]502 else {
[8541]503 emit(newMessage(" RTNET format error: "
504 + lines[ii].toAscii(), false));
[4991]505 }
[5662]506 }
[6850]507
[3222]508 struct ClockOrbit::SatData* sd = 0;
[6877]509 if (prn.system() == 'G') {
[5666]510 sd = co.Sat + co.NumberOfSat[CLOCKORBIT_SATGPS];
511 ++co.NumberOfSat[CLOCKORBIT_SATGPS];
[3222]512 }
[6876]513 else if (prn.system() == 'R') {
[6877]514 sd = co.Sat + CLOCKORBIT_NUMGPS + co.NumberOfSat[CLOCKORBIT_SATGLONASS];
[5666]515 ++co.NumberOfSat[CLOCKORBIT_SATGLONASS];
[3222]516 }
[6876]517 else if (prn.system() == 'E') {
[6844]518 sd = co.Sat + CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS
519 + co.NumberOfSat[CLOCKORBIT_SATGALILEO];
520 ++co.NumberOfSat[CLOCKORBIT_SATGALILEO];
521 }
[6876]522 else if (prn.system() == 'J') {
[6877]523 sd = co.Sat + CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS
524 + CLOCKORBIT_NUMGALILEO + co.NumberOfSat[CLOCKORBIT_SATQZSS];
[6844]525 ++co.NumberOfSat[CLOCKORBIT_SATQZSS];
526 }
[6876]527 else if (prn.system() == 'S') {
[6877]528 sd = co.Sat + CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS
529 + CLOCKORBIT_NUMGALILEO + CLOCKORBIT_NUMQZSS
[6844]530 + co.NumberOfSat[CLOCKORBIT_SATSBAS];
531 ++co.NumberOfSat[CLOCKORBIT_SATSBAS];
532 }
[6876]533 else if (prn.system() == 'C') {
[6877]534 sd = co.Sat + CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS
535 + CLOCKORBIT_NUMGALILEO + CLOCKORBIT_NUMQZSS + CLOCKORBIT_NUMSBAS
[6844]536 + co.NumberOfSat[CLOCKORBIT_SATBDS];
537 ++co.NumberOfSat[CLOCKORBIT_SATBDS];
538 }
[3222]539 if (sd) {
540 QString outLine;
[8541]541 t_irc irc = processSatellite(eph, epoTime.gpsw(), epoTime.gpssec(), prnStr, rtnAPC,
542 rtnUra, rtnClk, rtnVel, rtnCoM, rtnClkSig, sd, outLine);
543 if (irc != success) {
[8582]544 // very few cases: check states bad and unhealthy are excluded earlier
545 sd->ID = prnStr.mid(1).toInt(); // to prevent G00, R00 entries
546 sd->IOD = eph->IOD();
[8541]547 }
[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////////////////////////////////////////////////////////////////////////////
[8541]2261t_irc 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 // -------------------------------
[8541]2269 ColumnVector xB(6);
[4930]2270 ColumnVector vB(3);
[8541]2271 t_irc irc = eph->getCrd(bncTime(GPSweek, GPSweeks), xB, vB, false);
[5662]2272
[8541]2273 if (irc != success) {
2274 return irc;
2275 }
2276
[4991]2277 // Precise Position
2278 // ----------------
2279 ColumnVector xP = _CoM ? rtnCoM : rtnAPC;
[3222]2280
[8541]2281 if (xP.size() == 0) {
2282 return failure;
2283 }
2284
[5662]2285 double dc = 0.0;
[8411]2286 if (_crdTrafo != "IGS14") {
[8146]2287 crdTrafo(GPSweek, xP, dc);
[8101]2288 }
[5662]2289
[4930]2290 // Difference in xyz
2291 // -----------------
[6877]2292 ColumnVector dx = xB.Rows(1, 3) - xP;
2293 ColumnVector dv = vB - rtnVel;
[5662]2294
[4930]2295 // Difference in RSW
2296 // -----------------
[3222]2297 ColumnVector rsw(3);
[6877]2298 XYZ_to_RSW(xB.Rows(1, 3), vB, dx, rsw);
[3222]2299
[4930]2300 ColumnVector dotRsw(3);
[6877]2301 XYZ_to_RSW(xB.Rows(1, 3), vB, dv, dotRsw);
[3222]2302
[4930]2303 // Clock Correction
2304 // ----------------
[8498]2305 double dClkA0 = rtnClk(1) - (xB(4) - dc) * t_CST::c;
[8570]2306 double dClkA1 = 0.0;
2307 if (rtnClk(2)) {
2308 dClkA1 = rtnClk(2) - xB(5) * t_CST::c;
2309 }
2310 double dClkA2 = 0.0;
2311 if (rtnClk(3)) {
2312 dClkA2 = rtnClk(3) - xB(6) * t_CST::c;
2313 }
[3222]2314
2315 if (sd) {
[6877]2316 sd->ID = prn.mid(1).toInt();
2317 sd->IOD = eph->IOD();
[8484]2318 sd->Clock.DeltaA0 = dClkA0;
2319 sd->Clock.DeltaA1 = dClkA1;
2320 sd->Clock.DeltaA2 = dClkA2;
2321 sd->UserRangeAccuracy = rtnUra;
2322 sd->Orbit.DeltaRadial = rsw(1);
[6877]2323 sd->Orbit.DeltaAlongTrack = rsw(2);
2324 sd->Orbit.DeltaCrossTrack = rsw(3);
[8484]2325 sd->Orbit.DotDeltaRadial = dotRsw(1);
[4930]2326 sd->Orbit.DotDeltaAlongTrack = dotRsw(2);
2327 sd->Orbit.DotDeltaCrossTrack = dotRsw(3);
[3222]2328 }
2329
[8484]2330 outLine.sprintf("%d %.1f %s %u %10.3f %8.3f %8.3f %8.3f %8.3f %8.3f\n", GPSweek,
2331 GPSweeks, eph->prn().toString().c_str(), eph->IOD(), dClkA0, dClkA1, dClkA2,
2332 rsw(1), rsw(2), rsw(3));
[3222]2333
[8498]2334 // RTNET full clock for RINEX and SP3 file
2335 // ---------------------------------------
[4991]2336 double relativity = -2.0 * DotProduct(xP, rtnVel) / t_CST::c;
[8498]2337 double clkRnx = (rtnClk[0] - relativity) / t_CST::c; // [s]
[8484]2338 double clkRnxRate = rtnClk[1] / t_CST::c; // [s/s = -]
2339 double clkRnxAcc = rtnClk[2] / t_CST::c; // [s/s² ) -/s]
[4991]2340
[3222]2341 if (_rnx) {
[8509]2342 double clkRnxSig, clkRnxRateSig, clkRnxAccSig;
2343 int s = rtnClkSig.size();
2344 switch (s) {
2345 case 1:
2346 clkRnxSig = rtnClkSig[0] / t_CST::c; // [s]
2347 clkRnxRateSig = 0.0; // [s/s = -]
2348 clkRnxAccSig = 0.0; // [s/s² ) -/s]
2349 break;
2350 case 2:
2351 clkRnxSig = rtnClkSig[0] / t_CST::c; // [s]
2352 clkRnxRateSig = rtnClkSig[1] / t_CST::c; // [s/s = -]
2353 clkRnxAccSig = 0.0; // [s/s² ) -/s]
2354 break;
2355 case 3:
2356 clkRnxSig = rtnClkSig[0] / t_CST::c; // [s]
2357 clkRnxRateSig = rtnClkSig[1] / t_CST::c; // [s/s = -]
2358 clkRnxAccSig = rtnClkSig[2] / t_CST::c; // [s/s² ) -/s]
2359 break;
2360 }
[8484]2361 _rnx->write(GPSweek, GPSweeks, prn, clkRnx, clkRnxRate, clkRnxAcc,
2362 clkRnxSig, clkRnxRateSig, clkRnxAccSig);
[3222]2363 }
2364 if (_sp3) {
[8484]2365 _sp3->write(GPSweek, GPSweeks, prn, rtnCoM, clkRnx, rtnVel, clkRnxRate);
[3222]2366 }
[8541]2367 return success;
[3222]2368}
2369
2370// Transform Coordinates
2371////////////////////////////////////////////////////////////////////////////
[5662]2372void bncRtnetUploadCaster::crdTrafo(int GPSWeek, ColumnVector& xyz,
[6877]2373 double& dc) {
[3222]2374
2375 // Current epoch minus 2000.0 in years
2376 // ------------------------------------
[6877]2377 double dt = (GPSWeek - (1042.0 + 6.0 / 7.0)) / 365.2422 * 7.0 + 2000.0 - _t0;
[3222]2378
2379 ColumnVector dx(3);
2380
2381 dx(1) = _dx + dt * _dxr;
2382 dx(2) = _dy + dt * _dyr;
2383 dx(3) = _dz + dt * _dzr;
2384
2385 static const double arcSec = 180.0 * 3600.0 / M_PI;
2386
2387 double ox = (_ox + dt * _oxr) / arcSec;
2388 double oy = (_oy + dt * _oyr) / arcSec;
2389 double oz = (_oz + dt * _ozr) / arcSec;
2390
2391 double sc = 1.0 + _sc * 1e-9 + dt * _scr * 1e-9;
2392
[4912]2393 // Specify approximate center of area
2394 // ----------------------------------
2395 ColumnVector meanSta(3);
2396
[6877]2397 if (_crdTrafo == "ETRF2000") {
2398 meanSta(1) = 3661090.0;
2399 meanSta(2) = 845230.0;
2400 meanSta(3) = 5136850.0;
[4908]2401 }
[8101]2402 else if (_crdTrafo == "GDA2020") {
[4973]2403 meanSta(1) = -4052050.0;
[6877]2404 meanSta(2) = 4212840.0;
[4973]2405 meanSta(3) = -2545110.0;
[4912]2406 }
2407 else if (_crdTrafo == "SIRGAS2000") {
[6877]2408 meanSta(1) = 3740860.0;
[4973]2409 meanSta(2) = -4964290.0;
2410 meanSta(3) = -1425420.0;
[4912]2411 }
[5343]2412 else if (_crdTrafo == "DREF91") {
[6877]2413 meanSta(1) = 3959579.0;
2414 meanSta(2) = 721719.0;
2415 meanSta(3) = 4931539.0;
[5343]2416 }
[4912]2417 else if (_crdTrafo == "Custom") {
[6877]2418 meanSta(1) = 0.0; // TODO
2419 meanSta(2) = 0.0; // TODO
2420 meanSta(3) = 0.0; // TODO
[4912]2421 }
[8484]2422
[4912]2423 // Clock correction proportional to topocentric distance to satellites
2424 // -------------------------------------------------------------------
2425 double rho = (xyz - meanSta).norm_Frobenius();
[4913]2426 dc = rho * (sc - 1.0) / sc / t_CST::c;
[4908]2427
[6877]2428 Matrix rMat(3, 3);
2429 rMat(1, 1) = 1.0;
2430 rMat(1, 2) = -oz;
2431 rMat(1, 3) = oy;
2432 rMat(2, 1) = oz;
2433 rMat(2, 2) = 1.0;
2434 rMat(2, 3) = -ox;
2435 rMat(3, 1) = -oy;
2436 rMat(3, 2) = ox;
2437 rMat(3, 3) = 1.0;
[3222]2438
2439 xyz = sc * rMat * xyz + dx;
2440}
2441
[6557]2442int bncRtnetUploadCaster::determineUpdateInd(double samplingRate) {
2443
2444 if (samplingRate == 10.0) {
2445 return 3;
2446 }
2447 else if (samplingRate == 15.0) {
2448 return 4;
2449 }
2450 else if (samplingRate == 30.0) {
2451 return 5;
2452 }
2453 else if (samplingRate == 60.0) {
2454 return 6;
2455 }
2456 else if (samplingRate == 120.0) {
2457 return 7;
2458 }
2459 else if (samplingRate == 240.0) {
2460 return 8;
2461 }
2462 else if (samplingRate == 300.0) {
2463 return 9;
2464 }
2465 else if (samplingRate == 600.0) {
2466 return 10;
2467 }
2468 else if (samplingRate == 900.0) {
2469 return 11;
2470 }
2471 else if (samplingRate == 1800.0) {
2472 return 12;
2473 }
2474 else if (samplingRate == 3600.0) {
2475 return 13;
2476 }
2477 else if (samplingRate == 7200.0) {
2478 return 14;
2479 }
2480 else if (samplingRate == 10800.0) {
2481 return 15;
2482 }
[6877]2483 return 2; // default
[6557]2484}
Note: See TracBrowser for help on using the repository browser.