source: ntrip/trunk/BNC/src/upload/bncrtnetuploadcaster.cpp@ 6877

Last change on this file since 6877 was 6877, checked in by stuerze, 9 years ago

minor changes in rtnetupload interface to prevent the generation opf empty RTCM-SSR bias data sets + format changes

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