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

Last change on this file since 8010 was 8004, checked in by stuerze, 10 years ago

Signal and tracking mode identifier are updated with respect to the latest ssr1 proposal

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