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

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

minor changes

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