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

Last change on this file since 8015 was 8015, checked in by stuerze, 8 years ago

minor changes

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