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

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

minor changes

File size: 95.3 KB
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 in >> numVal;
508 for (int ii = 0; ii < numVal; ii++) {
509 double dummy;
510 in >> dummy;
511 }
512 }
513 }
514
515 struct ClockOrbit::SatData* sd = 0;
516 if (prn.system() == 'G') {
517 sd = co.Sat + co.NumberOfSat[CLOCKORBIT_SATGPS];
518 ++co.NumberOfSat[CLOCKORBIT_SATGPS];
519 }
520 else if (prn.system() == 'R') {
521 sd = co.Sat + CLOCKORBIT_NUMGPS + co.NumberOfSat[CLOCKORBIT_SATGLONASS];
522 ++co.NumberOfSat[CLOCKORBIT_SATGLONASS];
523 }
524 else if (prn.system() == 'E') {
525 sd = co.Sat + CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS
526 + co.NumberOfSat[CLOCKORBIT_SATGALILEO];
527 ++co.NumberOfSat[CLOCKORBIT_SATGALILEO];
528 }
529 else if (prn.system() == 'J') {
530 sd = co.Sat + CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS
531 + CLOCKORBIT_NUMGALILEO + co.NumberOfSat[CLOCKORBIT_SATQZSS];
532 ++co.NumberOfSat[CLOCKORBIT_SATQZSS];
533 }
534 else if (prn.system() == 'S') {
535 sd = co.Sat + CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS
536 + CLOCKORBIT_NUMGALILEO + CLOCKORBIT_NUMQZSS
537 + co.NumberOfSat[CLOCKORBIT_SATSBAS];
538 ++co.NumberOfSat[CLOCKORBIT_SATSBAS];
539 }
540 else if (prn.system() == 'C') {
541 sd = co.Sat + CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS
542 + CLOCKORBIT_NUMGALILEO + CLOCKORBIT_NUMQZSS + CLOCKORBIT_NUMSBAS
543 + co.NumberOfSat[CLOCKORBIT_SATBDS];
544 ++co.NumberOfSat[CLOCKORBIT_SATBDS];
545 }
546 if (sd) {
547 QString outLine;
548 processSatellite(eph, epoTime.gpsw(), epoTime.gpssec(), prnStr, rtnAPC,
549 rtnClk, rtnVel, rtnCoM, sd, outLine);
550 }
551
552 // Code Biases
553 // -----------
554 struct CodeBias::BiasSat* biasSat = 0;
555 if (!codeBiases.isEmpty()) {
556 if (prn.system() == 'G') {
557 biasSat = bias.Sat + bias.NumberOfSat[CLOCKORBIT_SATGPS];
558 ++bias.NumberOfSat[CLOCKORBIT_SATGPS];
559 }
560 else if (prn.system() == 'R') {
561 biasSat = bias.Sat + CLOCKORBIT_NUMGPS
562 + bias.NumberOfSat[CLOCKORBIT_SATGLONASS];
563 ++bias.NumberOfSat[CLOCKORBIT_SATGLONASS];
564 }
565 else if (prn.system() == 'E') {
566 biasSat = bias.Sat + CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS
567 + bias.NumberOfSat[CLOCKORBIT_SATGALILEO];
568 ++bias.NumberOfSat[CLOCKORBIT_SATGALILEO];
569 }
570 else if (prn.system() == 'J') {
571 biasSat = bias.Sat + CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS
572 + CLOCKORBIT_NUMGALILEO + bias.NumberOfSat[CLOCKORBIT_SATQZSS];
573 ++bias.NumberOfSat[CLOCKORBIT_SATQZSS];
574 }
575 else if (prn.system() == 'S') {
576 biasSat = bias.Sat + CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS
577 + CLOCKORBIT_NUMGALILEO + CLOCKORBIT_NUMQZSS
578 + bias.NumberOfSat[CLOCKORBIT_SATSBAS];
579 ++bias.NumberOfSat[CLOCKORBIT_SATSBAS];
580 }
581 else if (prn.system() == 'C') {
582 biasSat = bias.Sat + CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS
583 + CLOCKORBIT_NUMGALILEO + CLOCKORBIT_NUMQZSS + CLOCKORBIT_NUMSBAS
584 + bias.NumberOfSat[CLOCKORBIT_SATBDS];
585 ++bias.NumberOfSat[CLOCKORBIT_SATBDS];
586 }
587 }
588
589 if (biasSat) {
590 biasSat->ID = prn.number();
591 biasSat->NumberOfCodeBiases = 0;
592 if (prn.system() == 'G') {
593 QMapIterator<QString, double> it(codeBiases);
594 while (it.hasNext()) {
595 it.next();
596 if (it.key() == "1C") {
597 int ii = biasSat->NumberOfCodeBiases;
598 if (ii >= CLOCKORBIT_NUMBIAS)
599 break;
600 biasSat->NumberOfCodeBiases += 1;
601 biasSat->Biases[ii].Type = CODETYPEGPS_L1_CA;
602 biasSat->Biases[ii].Bias = it.value();
603 }
604 else if (it.key() == "1S") {
605 int ii = biasSat->NumberOfCodeBiases;
606 if (ii >= CLOCKORBIT_NUMBIAS)
607 break;
608 biasSat->NumberOfCodeBiases += 1;
609 biasSat->Biases[ii].Type = CODETYPEGPS_L1C_D;
610 biasSat->Biases[ii].Bias = it.value();
611 }
612 else if (it.key() == "1L") {
613 int ii = biasSat->NumberOfCodeBiases;
614 if (ii >= CLOCKORBIT_NUMBIAS)
615 break;
616 biasSat->NumberOfCodeBiases += 1;
617 biasSat->Biases[ii].Type = CODETYPEGPS_L1C_P;
618 biasSat->Biases[ii].Bias = it.value();
619 }
620 else if (it.key() == "1X") {
621 int ii = biasSat->NumberOfCodeBiases;
622 if (ii >= CLOCKORBIT_NUMBIAS)
623 break;
624 biasSat->NumberOfCodeBiases += 1;
625 biasSat->Biases[ii].Type = CODETYPEGPS_L1C_DP;
626 biasSat->Biases[ii].Bias = it.value();
627 }
628 else if (it.key() == "1P") {
629 int ii = biasSat->NumberOfCodeBiases;
630 if (ii >= CLOCKORBIT_NUMBIAS)
631 break;
632 biasSat->NumberOfCodeBiases += 1;
633 biasSat->Biases[ii].Type = CODETYPEGPS_L1_P;
634 biasSat->Biases[ii].Bias = it.value();
635 }
636 else if (it.key() == "1W") {
637 int ii = biasSat->NumberOfCodeBiases;
638 if (ii >= CLOCKORBIT_NUMBIAS)
639 break;
640 biasSat->NumberOfCodeBiases += 1;
641 biasSat->Biases[ii].Type = CODETYPEGPS_L1_Z;
642 biasSat->Biases[ii].Bias = it.value();
643 }
644 else if (it.key() == "2C") {
645 int ii = biasSat->NumberOfCodeBiases;
646 if (ii >= CLOCKORBIT_NUMBIAS)
647 break;
648 biasSat->NumberOfCodeBiases += 1;
649 biasSat->Biases[ii].Type = CODETYPEGPS_L2_CA;
650 biasSat->Biases[ii].Bias = it.value();
651 }
652 else if (it.key() == "2D") {
653 int ii = biasSat->NumberOfCodeBiases;
654 if (ii >= CLOCKORBIT_NUMBIAS)
655 break;
656 biasSat->NumberOfCodeBiases += 1;
657 biasSat->Biases[ii].Type = CODETYPEGPS_SEMI_CODELESS;
658 biasSat->Biases[ii].Bias = it.value();
659 }
660 else if (it.key() == "2S") {
661 int ii = biasSat->NumberOfCodeBiases;
662 if (ii >= CLOCKORBIT_NUMBIAS)
663 break;
664 biasSat->NumberOfCodeBiases += 1;
665 biasSat->Biases[ii].Type = CODETYPEGPS_L2_CM;
666 biasSat->Biases[ii].Bias = it.value();
667 }
668 else if (it.key() == "2L") {
669 int ii = biasSat->NumberOfCodeBiases;
670 if (ii >= CLOCKORBIT_NUMBIAS)
671 break;
672 biasSat->NumberOfCodeBiases += 1;
673 biasSat->Biases[ii].Type = CODETYPEGPS_L2_CL;
674 biasSat->Biases[ii].Bias = it.value();
675 }
676 else if (it.key() == "2X") {
677 int ii = biasSat->NumberOfCodeBiases;
678 if (ii >= CLOCKORBIT_NUMBIAS)
679 break;
680 biasSat->NumberOfCodeBiases += 1;
681 biasSat->Biases[ii].Type = CODETYPEGPS_L2_CML;
682 biasSat->Biases[ii].Bias = it.value();
683 }
684 else if (it.key() == "2P") {
685 int ii = biasSat->NumberOfCodeBiases;
686 if (ii >= CLOCKORBIT_NUMBIAS)
687 break;
688 biasSat->NumberOfCodeBiases += 1;
689 biasSat->Biases[ii].Type = CODETYPEGPS_L2_P;
690 biasSat->Biases[ii].Bias = it.value();
691 }
692 else if (it.key() == "2W") {
693 int ii = biasSat->NumberOfCodeBiases;
694 if (ii >= CLOCKORBIT_NUMBIAS)
695 break;
696 biasSat->NumberOfCodeBiases += 1;
697 biasSat->Biases[ii].Type = CODETYPEGPS_L2_Z;
698 biasSat->Biases[ii].Bias = it.value();
699 }
700 else if (it.key() == "5I") {
701 int ii = biasSat->NumberOfCodeBiases;
702 if (ii >= CLOCKORBIT_NUMBIAS)
703 break;
704 biasSat->NumberOfCodeBiases += 1;
705 biasSat->Biases[ii].Type = CODETYPEGPS_L5_I;
706 biasSat->Biases[ii].Bias = it.value();
707 }
708 else if (it.key() == "5Q") {
709 int ii = biasSat->NumberOfCodeBiases;
710 if (ii >= CLOCKORBIT_NUMBIAS)
711 break;
712 biasSat->NumberOfCodeBiases += 1;
713 biasSat->Biases[ii].Type = CODETYPEGPS_L5_Q;
714 biasSat->Biases[ii].Bias = it.value();
715 }
716 else if (it.key() == "5X") {
717 int ii = biasSat->NumberOfCodeBiases;
718 if (ii >= CLOCKORBIT_NUMBIAS)
719 break;
720 biasSat->NumberOfCodeBiases += 1;
721 biasSat->Biases[ii].Type = CODETYPEGPS_L5_IQ;
722 biasSat->Biases[ii].Bias = it.value();
723 }
724 }
725 }
726 else if (prn.system() == 'R') {
727 QMapIterator<QString, double> it(codeBiases);
728 while (it.hasNext()) {
729 it.next();
730 if (it.key() == "1C") {
731 int ii = biasSat->NumberOfCodeBiases;
732 if (ii >= CLOCKORBIT_NUMBIAS)
733 break;
734 biasSat->NumberOfCodeBiases += 1;
735 biasSat->Biases[ii].Type = CODETYPEGLONASS_L1_CA;
736 biasSat->Biases[ii].Bias = it.value();
737 }
738 else if (it.key() == "1P") {
739 int ii = biasSat->NumberOfCodeBiases;
740 if (ii >= CLOCKORBIT_NUMBIAS)
741 break;
742 biasSat->NumberOfCodeBiases += 1;
743 biasSat->Biases[ii].Type = CODETYPEGLONASS_L1_P;
744 biasSat->Biases[ii].Bias = it.value();
745 }
746 else if (it.key() == "2C") {
747 int ii = biasSat->NumberOfCodeBiases;
748 if (ii >= CLOCKORBIT_NUMBIAS)
749 break;
750 biasSat->NumberOfCodeBiases += 1;
751 biasSat->Biases[ii].Type = CODETYPEGLONASS_L2_CA;
752 biasSat->Biases[ii].Bias = it.value();
753 }
754 else if (it.key() == "2P") {
755 int ii = biasSat->NumberOfCodeBiases;
756 if (ii >= CLOCKORBIT_NUMBIAS)
757 break;
758 biasSat->NumberOfCodeBiases += 1;
759 biasSat->Biases[ii].Type = CODETYPEGLONASS_L2_P;
760 biasSat->Biases[ii].Bias = it.value();
761 }
762 }
763 }
764 else if (prn.system() == 'E') {
765 QMapIterator<QString, double> it(codeBiases);
766 while (it.hasNext()) {
767 it.next();
768 if (it.key() == "1A") {
769 int ii = biasSat->NumberOfCodeBiases;
770 if (ii >= CLOCKORBIT_NUMBIAS)
771 break;
772 biasSat->NumberOfCodeBiases += 1;
773 biasSat->Biases[ii].Type = CODETYPEGALILEO_E1_A;
774 biasSat->Biases[ii].Bias = it.value();
775 }
776 else if (it.key() == "1B") {
777 int ii = biasSat->NumberOfCodeBiases;
778 if (ii >= CLOCKORBIT_NUMBIAS)
779 break;
780 biasSat->NumberOfCodeBiases += 1;
781 biasSat->Biases[ii].Type = CODETYPEGALILEO_E1_B;
782 biasSat->Biases[ii].Bias = it.value();
783 }
784 else if (it.key() == "1C") {
785 int ii = biasSat->NumberOfCodeBiases;
786 if (ii >= CLOCKORBIT_NUMBIAS)
787 break;
788 biasSat->NumberOfCodeBiases += 1;
789 biasSat->Biases[ii].Type = CODETYPEGALILEO_E1_C;
790 biasSat->Biases[ii].Bias = it.value();
791 }
792 else if (it.key() == "1X") {
793 int ii = biasSat->NumberOfCodeBiases;
794 if (ii >= CLOCKORBIT_NUMBIAS)
795 break;
796 biasSat->NumberOfCodeBiases += 1;
797 biasSat->Biases[ii].Type = CODETYPEGALILEO_E1_BC;
798 biasSat->Biases[ii].Bias = it.value();
799 }
800 else if (it.key() == "1Z") {
801 int ii = biasSat->NumberOfCodeBiases;
802 if (ii >= CLOCKORBIT_NUMBIAS)
803 break;
804 biasSat->NumberOfCodeBiases += 1;
805 biasSat->Biases[ii].Type = CODETYPEGALILEO_E1_ABC;
806 biasSat->Biases[ii].Bias = it.value();
807 }
808 else if (it.key() == "5I") {
809 int ii = biasSat->NumberOfCodeBiases;
810 if (ii >= CLOCKORBIT_NUMBIAS)
811 break;
812 biasSat->NumberOfCodeBiases += 1;
813 biasSat->Biases[ii].Type = CODETYPEGALILEO_E5A_I;
814 biasSat->Biases[ii].Bias = it.value();
815 }
816 else if (it.key() == "5Q") {
817 int ii = biasSat->NumberOfCodeBiases;
818 if (ii >= CLOCKORBIT_NUMBIAS)
819 break;
820 biasSat->NumberOfCodeBiases += 1;
821 biasSat->Biases[ii].Type = CODETYPEGALILEO_E5A_Q;
822 biasSat->Biases[ii].Bias = it.value();
823 }
824 else if (it.key() == "5X") {
825 int ii = biasSat->NumberOfCodeBiases;
826 if (ii >= CLOCKORBIT_NUMBIAS)
827 break;
828 biasSat->NumberOfCodeBiases += 1;
829 biasSat->Biases[ii].Type = CODETYPEGALILEO_E5A_IQ;
830 biasSat->Biases[ii].Bias = it.value();
831 }
832 else if (it.key() == "7I") {
833 int ii = biasSat->NumberOfCodeBiases;
834 if (ii >= CLOCKORBIT_NUMBIAS)
835 break;
836 biasSat->NumberOfCodeBiases += 1;
837 biasSat->Biases[ii].Type = CODETYPEGALILEO_E5B_I;
838 biasSat->Biases[ii].Bias = it.value();
839 }
840 else if (it.key() == "7Q") {
841 int ii = biasSat->NumberOfCodeBiases;
842 if (ii >= CLOCKORBIT_NUMBIAS)
843 break;
844 biasSat->NumberOfCodeBiases += 1;
845 biasSat->Biases[ii].Type = CODETYPEGALILEO_E5B_Q;
846 biasSat->Biases[ii].Bias = it.value();
847 }
848 else if (it.key() == "7X") {
849 int ii = biasSat->NumberOfCodeBiases;
850 if (ii >= CLOCKORBIT_NUMBIAS)
851 break;
852 biasSat->NumberOfCodeBiases += 1;
853 biasSat->Biases[ii].Type = CODETYPEGALILEO_E5B_IQ;
854 biasSat->Biases[ii].Bias = it.value();
855 }
856 else if (it.key() == "8I") {
857 int ii = biasSat->NumberOfCodeBiases;
858 if (ii >= CLOCKORBIT_NUMBIAS)
859 break;
860 biasSat->NumberOfCodeBiases += 1;
861 biasSat->Biases[ii].Type = CODETYPEGALILEO_E5_I;
862 biasSat->Biases[ii].Bias = it.value();
863 }
864 else if (it.key() == "8Q") {
865 int ii = biasSat->NumberOfCodeBiases;
866 if (ii >= CLOCKORBIT_NUMBIAS)
867 break;
868 biasSat->NumberOfCodeBiases += 1;
869 biasSat->Biases[ii].Type = CODETYPEGALILEO_E5_Q;
870 biasSat->Biases[ii].Bias = it.value();
871 }
872 else if (it.key() == "8X") {
873 int ii = biasSat->NumberOfCodeBiases;
874 if (ii >= CLOCKORBIT_NUMBIAS)
875 break;
876 biasSat->NumberOfCodeBiases += 1;
877 biasSat->Biases[ii].Type = CODETYPEGALILEO_E5_IQ;
878 biasSat->Biases[ii].Bias = it.value();
879 }
880 else if (it.key() == "6A") {
881 int ii = biasSat->NumberOfCodeBiases;
882 if (ii >= CLOCKORBIT_NUMBIAS)
883 break;
884 biasSat->NumberOfCodeBiases += 1;
885 biasSat->Biases[ii].Type = CODETYPEGALILEO_E6_A;
886 biasSat->Biases[ii].Bias = it.value();
887 }
888 else if (it.key() == "6B") {
889 int ii = biasSat->NumberOfCodeBiases;
890 if (ii >= CLOCKORBIT_NUMBIAS)
891 break;
892 biasSat->NumberOfCodeBiases += 1;
893 biasSat->Biases[ii].Type = CODETYPEGALILEO_E6_B;
894 biasSat->Biases[ii].Bias = it.value();
895 }
896 else if (it.key() == "6C") {
897 int ii = biasSat->NumberOfCodeBiases;
898 if (ii >= CLOCKORBIT_NUMBIAS)
899 break;
900 biasSat->NumberOfCodeBiases += 1;
901 biasSat->Biases[ii].Type = CODETYPEGALILEO_E6_C;
902 biasSat->Biases[ii].Bias = it.value();
903 }
904 else if (it.key() == "6X") {
905 int ii = biasSat->NumberOfCodeBiases;
906 if (ii >= CLOCKORBIT_NUMBIAS)
907 break;
908 biasSat->NumberOfCodeBiases += 1;
909 biasSat->Biases[ii].Type = CODETYPEGALILEO_E6_BC;
910 biasSat->Biases[ii].Bias = it.value();
911 }
912 else if (it.key() == "6Z") {
913 int ii = biasSat->NumberOfCodeBiases;
914 if (ii >= CLOCKORBIT_NUMBIAS)
915 break;
916 biasSat->NumberOfCodeBiases += 1;
917 biasSat->Biases[ii].Type = CODETYPEGALILEO_E6_ABC;
918 biasSat->Biases[ii].Bias = it.value();
919 }
920 }
921 }
922 else if (prn.system() == 'J') {
923 QMapIterator<QString, double> it(codeBiases);
924 while (it.hasNext()) {
925 it.next();
926 if (it.key() == "1C") {
927 int ii = biasSat->NumberOfCodeBiases;
928 if (ii >= CLOCKORBIT_NUMBIAS)
929 break;
930 biasSat->NumberOfCodeBiases += 1;
931 biasSat->Biases[ii].Type = CODETYPEQZSS_L1_CA;
932 biasSat->Biases[ii].Bias = it.value();
933 }
934 else if (it.key() == "1S") {
935 int ii = biasSat->NumberOfCodeBiases;
936 if (ii >= CLOCKORBIT_NUMBIAS)
937 break;
938 biasSat->NumberOfCodeBiases += 1;
939 biasSat->Biases[ii].Type = CODETYPEQZSS_L1C_D;
940 biasSat->Biases[ii].Bias = it.value();
941 }
942 else if (it.key() == "1L") {
943 int ii = biasSat->NumberOfCodeBiases;
944 if (ii >= CLOCKORBIT_NUMBIAS)
945 break;
946 biasSat->NumberOfCodeBiases += 1;
947 biasSat->Biases[ii].Type = CODETYPEQZSS_L1C_P;
948 biasSat->Biases[ii].Bias = it.value();
949 }
950 else if (it.key() == "1X") {
951 int ii = biasSat->NumberOfCodeBiases;
952 if (ii >= CLOCKORBIT_NUMBIAS)
953 break;
954 biasSat->NumberOfCodeBiases += 1;
955 biasSat->Biases[ii].Type = CODETYPEQZSS_L1C_DP;
956 biasSat->Biases[ii].Bias = it.value();
957 }
958 else if (it.key() == "2S") {
959 int ii = biasSat->NumberOfCodeBiases;
960 if (ii >= CLOCKORBIT_NUMBIAS)
961 break;
962 biasSat->NumberOfCodeBiases += 1;
963 biasSat->Biases[ii].Type = CODETYPEQZSS_L2C_M;
964 biasSat->Biases[ii].Bias = it.value();
965 }
966 else if (it.key() == "2L") {
967 int ii = biasSat->NumberOfCodeBiases;
968 if (ii >= CLOCKORBIT_NUMBIAS)
969 break;
970 biasSat->NumberOfCodeBiases += 1;
971 biasSat->Biases[ii].Type = CODETYPEQZSS_L2C_L;
972 biasSat->Biases[ii].Bias = it.value();
973 }
974 else if (it.key() == "2X") {
975 int ii = biasSat->NumberOfCodeBiases;
976 if (ii >= CLOCKORBIT_NUMBIAS)
977 break;
978 biasSat->NumberOfCodeBiases += 1;
979 biasSat->Biases[ii].Type = CODETYPEQZSS_L2C_ML;
980 biasSat->Biases[ii].Bias = it.value();
981 }
982 else if (it.key() == "5I") {
983 int ii = biasSat->NumberOfCodeBiases;
984 if (ii >= CLOCKORBIT_NUMBIAS)
985 break;
986 biasSat->NumberOfCodeBiases += 1;
987 biasSat->Biases[ii].Type = CODETYPEQZSS_L5_I;
988 biasSat->Biases[ii].Bias = it.value();
989 }
990 else if (it.key() == "5Q") {
991 int ii = biasSat->NumberOfCodeBiases;
992 if (ii >= CLOCKORBIT_NUMBIAS)
993 break;
994 biasSat->NumberOfCodeBiases += 1;
995 biasSat->Biases[ii].Type = CODETYPEQZSS_L5_Q;
996 biasSat->Biases[ii].Bias = it.value();
997 }
998 else if (it.key() == "5X") {
999 int ii = biasSat->NumberOfCodeBiases;
1000 if (ii >= CLOCKORBIT_NUMBIAS)
1001 break;
1002 biasSat->NumberOfCodeBiases += 1;
1003 biasSat->Biases[ii].Type = CODETYPEQZSS_L5_IQ;
1004 biasSat->Biases[ii].Bias = it.value();
1005 }
1006 else if (it.key() == "6S") {
1007 int ii = biasSat->NumberOfCodeBiases;
1008 if (ii >= CLOCKORBIT_NUMBIAS)
1009 break;
1010 biasSat->NumberOfCodeBiases += 1;
1011 biasSat->Biases[ii].Type = CODETYPEQZSS_LEX_S;
1012 biasSat->Biases[ii].Bias = it.value();
1013 }
1014 else if (it.key() == "6L") {
1015 int ii = biasSat->NumberOfCodeBiases;
1016 if (ii >= CLOCKORBIT_NUMBIAS)
1017 break;
1018 biasSat->NumberOfCodeBiases += 1;
1019 biasSat->Biases[ii].Type = CODETYPEQZSS_LEX_L;
1020 biasSat->Biases[ii].Bias = it.value();
1021 }
1022 else if (it.key() == "6X") {
1023 int ii = biasSat->NumberOfCodeBiases;
1024 if (ii >= CLOCKORBIT_NUMBIAS)
1025 break;
1026 biasSat->NumberOfCodeBiases += 1;
1027 biasSat->Biases[ii].Type = CODETYPEQZSS_LEX_SL;
1028 biasSat->Biases[ii].Bias = it.value();
1029 }
1030 }
1031 }
1032 else if (prn.system() == 'S') {
1033 QMapIterator<QString, double> it(codeBiases);
1034 while (it.hasNext()) {
1035 it.next();
1036 if (it.key() == "1C") {
1037 int ii = biasSat->NumberOfCodeBiases;
1038 if (ii >= CLOCKORBIT_NUMBIAS)
1039 break;
1040 biasSat->NumberOfCodeBiases += 1;
1041 biasSat->Biases[ii].Type = CODETYPE_SBAS_L1_CA;
1042 biasSat->Biases[ii].Bias = it.value();
1043 }
1044 else if (it.key() == "5I") {
1045 int ii = biasSat->NumberOfCodeBiases;
1046 if (ii >= CLOCKORBIT_NUMBIAS)
1047 break;
1048 biasSat->NumberOfCodeBiases += 1;
1049 biasSat->Biases[ii].Type = CODETYPE_SBAS_L5_I;
1050 biasSat->Biases[ii].Bias = it.value();
1051 }
1052 else if (it.key() == "5Q") {
1053 int ii = biasSat->NumberOfCodeBiases;
1054 if (ii >= CLOCKORBIT_NUMBIAS)
1055 break;
1056 biasSat->NumberOfCodeBiases += 1;
1057 biasSat->Biases[ii].Type = CODETYPE_SBAS_L5_Q;
1058 biasSat->Biases[ii].Bias = it.value();
1059 }
1060 else if (it.key() == "5X") {
1061 int ii = biasSat->NumberOfCodeBiases;
1062 if (ii >= CLOCKORBIT_NUMBIAS)
1063 break;
1064 biasSat->NumberOfCodeBiases += 1;
1065 biasSat->Biases[ii].Type = CODETYPE_SBAS_L5_IQ;
1066 biasSat->Biases[ii].Bias = it.value();
1067 }
1068 }
1069 }
1070 else if (prn.system() == 'C') {
1071 QMapIterator<QString, double> it(codeBiases);
1072 while (it.hasNext()) {
1073 it.next();
1074 if (it.key() == "2I") {
1075 int ii = biasSat->NumberOfCodeBiases;
1076 if (ii >= CLOCKORBIT_NUMBIAS)
1077 break;
1078 biasSat->NumberOfCodeBiases += 1;
1079 biasSat->Biases[ii].Type = CODETYPE_BDS_B1_I;
1080 biasSat->Biases[ii].Bias = it.value();
1081 }
1082 else if (it.key() == "2Q") {
1083 int ii = biasSat->NumberOfCodeBiases;
1084 if (ii >= CLOCKORBIT_NUMBIAS)
1085 break;
1086 biasSat->NumberOfCodeBiases += 1;
1087 biasSat->Biases[ii].Type = CODETYPE_BDS_B1_Q;
1088 biasSat->Biases[ii].Bias = it.value();
1089 }
1090 else if (it.key() == "2X") {
1091 int ii = biasSat->NumberOfCodeBiases;
1092 if (ii >= CLOCKORBIT_NUMBIAS)
1093 break;
1094 biasSat->NumberOfCodeBiases += 1;
1095 biasSat->Biases[ii].Type = CODETYPE_BDS_B1_IQ;
1096 biasSat->Biases[ii].Bias = it.value();
1097 }
1098 else if (it.key() == "6I") {
1099 int ii = biasSat->NumberOfCodeBiases;
1100 if (ii >= CLOCKORBIT_NUMBIAS)
1101 break;
1102 biasSat->NumberOfCodeBiases += 1;
1103 biasSat->Biases[ii].Type = CODETYPE_BDS_B3_I;
1104 biasSat->Biases[ii].Bias = it.value();
1105 }
1106 else if (it.key() == "6Q") {
1107 int ii = biasSat->NumberOfCodeBiases;
1108 if (ii >= CLOCKORBIT_NUMBIAS)
1109 break;
1110 biasSat->NumberOfCodeBiases += 1;
1111 biasSat->Biases[ii].Type = CODETYPE_BDS_B3_Q;
1112 biasSat->Biases[ii].Bias = it.value();
1113 }
1114 else if (it.key() == "6X") {
1115 int ii = biasSat->NumberOfCodeBiases;
1116 if (ii >= CLOCKORBIT_NUMBIAS)
1117 break;
1118 biasSat->NumberOfCodeBiases += 1;
1119 biasSat->Biases[ii].Type = CODETYPE_BDS_B3_IQ;
1120 biasSat->Biases[ii].Bias = it.value();
1121 }
1122 else if (it.key() == "7I") {
1123 int ii = biasSat->NumberOfCodeBiases;
1124 if (ii >= CLOCKORBIT_NUMBIAS)
1125 break;
1126 biasSat->NumberOfCodeBiases += 1;
1127 biasSat->Biases[ii].Type = CODETYPE_BDS_B2_I;
1128 biasSat->Biases[ii].Bias = it.value();
1129 }
1130 else if (it.key() == "7Q") {
1131 int ii = biasSat->NumberOfCodeBiases;
1132 if (ii >= CLOCKORBIT_NUMBIAS)
1133 break;
1134 biasSat->NumberOfCodeBiases += 1;
1135 biasSat->Biases[ii].Type = CODETYPE_BDS_B2_Q;
1136 biasSat->Biases[ii].Bias = it.value();
1137 }
1138 else if (it.key() == "7X") {
1139 int ii = biasSat->NumberOfCodeBiases;
1140 if (ii >= CLOCKORBIT_NUMBIAS)
1141 break;
1142 biasSat->NumberOfCodeBiases += 1;
1143 biasSat->Biases[ii].Type = CODETYPE_BDS_B2_IQ;
1144 biasSat->Biases[ii].Bias = it.value();
1145 }
1146 }
1147 }
1148 }
1149 // Phase Biases
1150 // ------------
1151 struct PhaseBias::PhaseBiasSat* phasebiasSat = 0;
1152 if (!phaseBiasList.isEmpty()) {
1153 if (prn.system() == 'G') {
1154 phasebiasSat = phasebias.Sat
1155 + phasebias.NumberOfSat[CLOCKORBIT_SATGPS];
1156 ++phasebias.NumberOfSat[CLOCKORBIT_SATGPS];
1157 }
1158 else if (prn.system() == 'R') {
1159 phasebiasSat = phasebias.Sat + CLOCKORBIT_NUMGPS
1160 + phasebias.NumberOfSat[CLOCKORBIT_SATGLONASS];
1161 ++phasebias.NumberOfSat[CLOCKORBIT_SATGLONASS];
1162 }
1163 else if (prn.system() == 'E') {
1164 phasebiasSat = phasebias.Sat + CLOCKORBIT_NUMGPS
1165 + CLOCKORBIT_NUMGLONASS
1166 + phasebias.NumberOfSat[CLOCKORBIT_SATGALILEO];
1167 ++phasebias.NumberOfSat[CLOCKORBIT_SATGALILEO];
1168 }
1169 else if (prn.system() == 'J') {
1170 phasebiasSat = phasebias.Sat + CLOCKORBIT_NUMGPS
1171 + CLOCKORBIT_NUMGLONASS + CLOCKORBIT_NUMGALILEO
1172 + phasebias.NumberOfSat[CLOCKORBIT_SATQZSS];
1173 ++phasebias.NumberOfSat[CLOCKORBIT_SATQZSS];
1174 }
1175 else if (prn.system() == 'S') {
1176 phasebiasSat = phasebias.Sat + CLOCKORBIT_NUMGPS
1177 + CLOCKORBIT_NUMGLONASS + CLOCKORBIT_NUMGALILEO
1178 + CLOCKORBIT_NUMQZSS + phasebias.NumberOfSat[CLOCKORBIT_SATSBAS];
1179 ++phasebias.NumberOfSat[CLOCKORBIT_SATSBAS];
1180 }
1181 else if (prn.system() == 'C') {
1182 phasebiasSat = phasebias.Sat + CLOCKORBIT_NUMGPS
1183 + CLOCKORBIT_NUMGLONASS + CLOCKORBIT_NUMGALILEO
1184 + CLOCKORBIT_NUMQZSS + CLOCKORBIT_NUMSBAS
1185 + phasebias.NumberOfSat[CLOCKORBIT_SATBDS];
1186 ++phasebias.NumberOfSat[CLOCKORBIT_SATBDS];
1187 }
1188 }
1189
1190 if (phasebiasSat) {
1191 phasebias.DispersiveBiasConsistencyIndicator = dispInd;
1192 phasebias.MWConsistencyIndicator = mwInd;
1193 phasebiasSat->ID = prn.number();
1194 phasebiasSat->NumberOfPhaseBiases = 0;
1195 phasebiasSat->YawAngle = pbSat.yA;
1196 phasebiasSat->YawRate = pbSat.yR;
1197 if (prn.system() == 'G') {
1198 QListIterator<phaseBiasSignal> it(phaseBiasList);
1199 while (it.hasNext()) {
1200 const phaseBiasSignal &pbSig = it.next();
1201 if (pbSig.type == "1C") {
1202 int ii = phasebiasSat->NumberOfPhaseBiases;
1203 if (ii >= CLOCKORBIT_NUMBIAS)
1204 break;
1205 phasebiasSat->NumberOfPhaseBiases += 1;
1206 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L1_CA;
1207 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1208 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1209 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1210 pbSig.wlInd;
1211 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1212 pbSig.discCount;
1213 }
1214 else if (pbSig.type == "1S") {
1215 int ii = phasebiasSat->NumberOfPhaseBiases;
1216 if (ii >= CLOCKORBIT_NUMBIAS)
1217 break;
1218 phasebiasSat->NumberOfPhaseBiases += 1;
1219 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L1C_D;
1220 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1221 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1222 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1223 pbSig.wlInd;
1224 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1225 pbSig.discCount;
1226 }
1227 else if (pbSig.type == "1L") {
1228 int ii = phasebiasSat->NumberOfPhaseBiases;
1229 if (ii >= CLOCKORBIT_NUMBIAS)
1230 break;
1231 phasebiasSat->NumberOfPhaseBiases += 1;
1232 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L1C_P;
1233 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1234 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1235 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1236 pbSig.wlInd;
1237 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1238 pbSig.discCount;
1239 }
1240 else if (pbSig.type == "1X") {
1241 int ii = phasebiasSat->NumberOfPhaseBiases;
1242 if (ii >= CLOCKORBIT_NUMBIAS)
1243 break;
1244 phasebiasSat->NumberOfPhaseBiases += 1;
1245 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L1C_P;
1246 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1247 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1248 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1249 pbSig.wlInd;
1250 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1251 pbSig.discCount;
1252 }
1253 else if (pbSig.type == "1P") {
1254 int ii = phasebiasSat->NumberOfPhaseBiases;
1255 if (ii >= CLOCKORBIT_NUMBIAS)
1256 break;
1257 phasebiasSat->NumberOfPhaseBiases += 1;
1258 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L1_P;
1259 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1260 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1261 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1262 pbSig.wlInd;
1263 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1264 pbSig.discCount;
1265 }
1266 else if (pbSig.type == "1W") {
1267 int ii = phasebiasSat->NumberOfPhaseBiases;
1268 if (ii >= CLOCKORBIT_NUMBIAS)
1269 break;
1270 phasebiasSat->NumberOfPhaseBiases += 1;
1271 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L1_Z;
1272 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1273 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1274 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1275 pbSig.wlInd;
1276 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1277 pbSig.discCount;
1278 }
1279 else if (pbSig.type == "2C") {
1280 int ii = phasebiasSat->NumberOfPhaseBiases;
1281 if (ii >= CLOCKORBIT_NUMBIAS)
1282 break;
1283 phasebiasSat->NumberOfPhaseBiases += 1;
1284 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L2_CA;
1285 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1286 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1287 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1288 pbSig.wlInd;
1289 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1290 pbSig.discCount;
1291 }
1292 else if (pbSig.type == "2D") {
1293 int ii = phasebiasSat->NumberOfPhaseBiases;
1294 if (ii >= CLOCKORBIT_NUMBIAS)
1295 break;
1296 phasebiasSat->NumberOfPhaseBiases += 1;
1297 phasebiasSat->Biases[ii].Type = CODETYPEGPS_SEMI_CODELESS;
1298 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1299 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1300 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1301 pbSig.wlInd;
1302 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1303 pbSig.discCount;
1304 }
1305 else if (pbSig.type == "2S") {
1306 int ii = phasebiasSat->NumberOfPhaseBiases;
1307 if (ii >= CLOCKORBIT_NUMBIAS)
1308 break;
1309 phasebiasSat->NumberOfPhaseBiases += 1;
1310 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L2_CM;
1311 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1312 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1313 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1314 pbSig.wlInd;
1315 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1316 pbSig.discCount;
1317 }
1318 else if (pbSig.type == "2L") {
1319 int ii = phasebiasSat->NumberOfPhaseBiases;
1320 if (ii >= CLOCKORBIT_NUMBIAS)
1321 break;
1322 phasebiasSat->NumberOfPhaseBiases += 1;
1323 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L2_CL;
1324 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1325 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1326 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1327 pbSig.wlInd;
1328 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1329 pbSig.discCount;
1330 }
1331 else if (pbSig.type == "2X") {
1332 int ii = phasebiasSat->NumberOfPhaseBiases;
1333 if (ii >= CLOCKORBIT_NUMBIAS)
1334 break;
1335 phasebiasSat->NumberOfPhaseBiases += 1;
1336 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L2_CML;
1337 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1338 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1339 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1340 pbSig.wlInd;
1341 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1342 pbSig.discCount;
1343 }
1344 else if (pbSig.type == "2P") {
1345 int ii = phasebiasSat->NumberOfPhaseBiases;
1346 if (ii >= CLOCKORBIT_NUMBIAS)
1347 break;
1348 phasebiasSat->NumberOfPhaseBiases += 1;
1349 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L2_P;
1350 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1351 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1352 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1353 pbSig.wlInd;
1354 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1355 pbSig.discCount;
1356 }
1357 else if (pbSig.type == "2W") {
1358 int ii = phasebiasSat->NumberOfPhaseBiases;
1359 if (ii >= CLOCKORBIT_NUMBIAS)
1360 break;
1361 phasebiasSat->NumberOfPhaseBiases += 1;
1362 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L2_Z;
1363 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1364 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1365 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1366 pbSig.wlInd;
1367 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1368 pbSig.discCount;
1369 }
1370 else if (pbSig.type == "5I") {
1371 int ii = phasebiasSat->NumberOfPhaseBiases;
1372 if (ii >= CLOCKORBIT_NUMBIAS)
1373 break;
1374 phasebiasSat->NumberOfPhaseBiases += 1;
1375 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L5_I;
1376 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1377 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1378 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1379 pbSig.wlInd;
1380 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1381 pbSig.discCount;
1382 }
1383 else if (pbSig.type == "5Q") {
1384 int ii = phasebiasSat->NumberOfPhaseBiases;
1385 if (ii >= CLOCKORBIT_NUMBIAS)
1386 break;
1387 phasebiasSat->NumberOfPhaseBiases += 1;
1388 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L5_Q;
1389 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1390 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1391 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1392 pbSig.wlInd;
1393 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1394 pbSig.discCount;
1395 }
1396 else if (pbSig.type == "5X") {
1397 int ii = phasebiasSat->NumberOfPhaseBiases;
1398 if (ii >= CLOCKORBIT_NUMBIAS)
1399 break;
1400 phasebiasSat->NumberOfPhaseBiases += 1;
1401 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L5_IQ;
1402 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1403 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1404 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1405 pbSig.wlInd;
1406 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1407 pbSig.discCount;
1408 }
1409 }
1410 }
1411 if (prn.system() == 'R') {
1412 QListIterator<phaseBiasSignal> it(phaseBiasList);
1413 while (it.hasNext()) {
1414 const phaseBiasSignal &pbSig = it.next();
1415 if (pbSig.type == "1C") {
1416 int ii = phasebiasSat->NumberOfPhaseBiases;
1417 if (ii >= CLOCKORBIT_NUMBIAS)
1418 break;
1419 phasebiasSat->NumberOfPhaseBiases += 1;
1420 phasebiasSat->Biases[ii].Type = CODETYPEGLONASS_L1_CA;
1421 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1422 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1423 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1424 pbSig.wlInd;
1425 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1426 pbSig.discCount;
1427 }
1428 else if (pbSig.type == "1P") {
1429 int ii = phasebiasSat->NumberOfPhaseBiases;
1430 if (ii >= CLOCKORBIT_NUMBIAS)
1431 break;
1432 phasebiasSat->NumberOfPhaseBiases += 1;
1433 phasebiasSat->Biases[ii].Type = CODETYPEGLONASS_L1_P;
1434 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1435 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1436 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1437 pbSig.wlInd;
1438 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1439 pbSig.discCount;
1440 }
1441 else if (pbSig.type == "2C") {
1442 int ii = phasebiasSat->NumberOfPhaseBiases;
1443 if (ii >= CLOCKORBIT_NUMBIAS)
1444 break;
1445 phasebiasSat->NumberOfPhaseBiases += 1;
1446 phasebiasSat->Biases[ii].Type = CODETYPEGLONASS_L2_CA;
1447 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1448 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1449 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1450 pbSig.wlInd;
1451 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1452 pbSig.discCount;
1453 }
1454 else if (pbSig.type == "2P") {
1455 int ii = phasebiasSat->NumberOfPhaseBiases;
1456 if (ii >= CLOCKORBIT_NUMBIAS)
1457 break;
1458 phasebiasSat->NumberOfPhaseBiases += 1;
1459 phasebiasSat->Biases[ii].Type = CODETYPEGLONASS_L2_P;
1460 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1461 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1462 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1463 pbSig.wlInd;
1464 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1465 pbSig.discCount;
1466 }
1467 }
1468 }
1469 if (prn.system() == 'E') {
1470 QListIterator<phaseBiasSignal> it(phaseBiasList);
1471 while (it.hasNext()) {
1472 const phaseBiasSignal &pbSig = it.next();
1473 if (pbSig.type == "1A") {
1474 int ii = phasebiasSat->NumberOfPhaseBiases;
1475 if (ii >= CLOCKORBIT_NUMBIAS)
1476 break;
1477 phasebiasSat->NumberOfPhaseBiases += 1;
1478 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E1_A;
1479 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1480 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1481 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1482 pbSig.wlInd;
1483 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1484 pbSig.discCount;
1485 }
1486 else if (pbSig.type == "1B") {
1487 int ii = phasebiasSat->NumberOfPhaseBiases;
1488 if (ii >= CLOCKORBIT_NUMBIAS)
1489 break;
1490 phasebiasSat->NumberOfPhaseBiases += 1;
1491 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E1_B;
1492 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1493 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1494 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1495 pbSig.wlInd;
1496 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1497 pbSig.discCount;
1498 }
1499 else if (pbSig.type == "1C") {
1500 int ii = phasebiasSat->NumberOfPhaseBiases;
1501 if (ii >= CLOCKORBIT_NUMBIAS)
1502 break;
1503 phasebiasSat->NumberOfPhaseBiases += 1;
1504 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E1_C;
1505 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1506 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1507 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1508 pbSig.wlInd;
1509 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1510 pbSig.discCount;
1511 }
1512 else if (pbSig.type == "1X") {
1513 int ii = phasebiasSat->NumberOfPhaseBiases;
1514 if (ii >= CLOCKORBIT_NUMBIAS)
1515 break;
1516 phasebiasSat->NumberOfPhaseBiases += 1;
1517 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E1_BC;
1518 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1519 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1520 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1521 pbSig.wlInd;
1522 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1523 pbSig.discCount;
1524 }
1525 else if (pbSig.type == "1Z") {
1526 int ii = phasebiasSat->NumberOfPhaseBiases;
1527 if (ii >= CLOCKORBIT_NUMBIAS)
1528 break;
1529 phasebiasSat->NumberOfPhaseBiases += 1;
1530 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E1_ABC;
1531 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1532 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1533 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1534 pbSig.wlInd;
1535 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1536 pbSig.discCount;
1537 }
1538 else if (pbSig.type == "5I") {
1539 int ii = phasebiasSat->NumberOfPhaseBiases;
1540 if (ii >= CLOCKORBIT_NUMBIAS)
1541 break;
1542 phasebiasSat->NumberOfPhaseBiases += 1;
1543 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E5A_I;
1544 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1545 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1546 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1547 pbSig.wlInd;
1548 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1549 pbSig.discCount;
1550 }
1551 else if (pbSig.type == "5Q") {
1552 int ii = phasebiasSat->NumberOfPhaseBiases;
1553 if (ii >= CLOCKORBIT_NUMBIAS)
1554 break;
1555 phasebiasSat->NumberOfPhaseBiases += 1;
1556 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E5A_Q;
1557 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1558 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1559 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1560 pbSig.wlInd;
1561 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1562 pbSig.discCount;
1563 }
1564 else if (pbSig.type == "5X") {
1565 int ii = phasebiasSat->NumberOfPhaseBiases;
1566 if (ii >= CLOCKORBIT_NUMBIAS)
1567 break;
1568 phasebiasSat->NumberOfPhaseBiases += 1;
1569 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E5A_IQ;
1570 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1571 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1572 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1573 pbSig.wlInd;
1574 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1575 pbSig.discCount;
1576 }
1577 else if (pbSig.type == "7I") {
1578 int ii = phasebiasSat->NumberOfPhaseBiases;
1579 if (ii >= CLOCKORBIT_NUMBIAS)
1580 break;
1581 phasebiasSat->NumberOfPhaseBiases += 1;
1582 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E5B_I;
1583 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1584 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1585 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1586 pbSig.wlInd;
1587 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1588 pbSig.discCount;
1589 }
1590 else if (pbSig.type == "7Q") {
1591 int ii = phasebiasSat->NumberOfPhaseBiases;
1592 if (ii >= CLOCKORBIT_NUMBIAS)
1593 break;
1594 phasebiasSat->NumberOfPhaseBiases += 1;
1595 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E5B_Q;
1596 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1597 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1598 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1599 pbSig.wlInd;
1600 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1601 pbSig.discCount;
1602 }
1603 else if (pbSig.type == "7X") {
1604 int ii = phasebiasSat->NumberOfPhaseBiases;
1605 if (ii >= CLOCKORBIT_NUMBIAS)
1606 break;
1607 phasebiasSat->NumberOfPhaseBiases += 1;
1608 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E5B_IQ;
1609 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1610 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1611 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1612 pbSig.wlInd;
1613 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1614 pbSig.discCount;
1615 }
1616 else if (pbSig.type == "8I") {
1617 int ii = phasebiasSat->NumberOfPhaseBiases;
1618 if (ii >= CLOCKORBIT_NUMBIAS)
1619 break;
1620 phasebiasSat->NumberOfPhaseBiases += 1;
1621 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E5_I;
1622 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1623 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1624 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1625 pbSig.wlInd;
1626 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1627 pbSig.discCount;
1628 }
1629 else if (pbSig.type == "8Q") {
1630 int ii = phasebiasSat->NumberOfPhaseBiases;
1631 if (ii >= CLOCKORBIT_NUMBIAS)
1632 break;
1633 phasebiasSat->NumberOfPhaseBiases += 1;
1634 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E5_Q;
1635 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1636 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1637 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1638 pbSig.wlInd;
1639 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1640 pbSig.discCount;
1641 }
1642 else if (pbSig.type == "8X") {
1643 int ii = phasebiasSat->NumberOfPhaseBiases;
1644 if (ii >= CLOCKORBIT_NUMBIAS)
1645 break;
1646 phasebiasSat->NumberOfPhaseBiases += 1;
1647 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E5_IQ;
1648 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1649 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1650 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1651 pbSig.wlInd;
1652 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1653 pbSig.discCount;
1654 }
1655 else if (pbSig.type == "6A") {
1656 int ii = phasebiasSat->NumberOfPhaseBiases;
1657 if (ii >= CLOCKORBIT_NUMBIAS)
1658 break;
1659 phasebiasSat->NumberOfPhaseBiases += 1;
1660 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E6_A;
1661 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1662 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1663 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1664 pbSig.wlInd;
1665 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1666 pbSig.discCount;
1667 }
1668 else if (pbSig.type == "6B") {
1669 int ii = phasebiasSat->NumberOfPhaseBiases;
1670 if (ii >= CLOCKORBIT_NUMBIAS)
1671 break;
1672 phasebiasSat->NumberOfPhaseBiases += 1;
1673 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E6_B;
1674 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1675 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1676 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1677 pbSig.wlInd;
1678 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1679 pbSig.discCount;
1680 }
1681 else if (pbSig.type == "6C") {
1682 int ii = phasebiasSat->NumberOfPhaseBiases;
1683 if (ii >= CLOCKORBIT_NUMBIAS)
1684 break;
1685 phasebiasSat->NumberOfPhaseBiases += 1;
1686 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E6_C;
1687 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1688 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1689 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1690 pbSig.wlInd;
1691 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1692 pbSig.discCount;
1693 }
1694 else if (pbSig.type == "6X") {
1695 int ii = phasebiasSat->NumberOfPhaseBiases;
1696 if (ii >= CLOCKORBIT_NUMBIAS)
1697 break;
1698 phasebiasSat->NumberOfPhaseBiases += 1;
1699 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E6_BC;
1700 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1701 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1702 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1703 pbSig.wlInd;
1704 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1705 pbSig.discCount;
1706 }
1707 else if (pbSig.type == "6Z") {
1708 int ii = phasebiasSat->NumberOfPhaseBiases;
1709 if (ii >= CLOCKORBIT_NUMBIAS)
1710 break;
1711 phasebiasSat->NumberOfPhaseBiases += 1;
1712 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E6_ABC;
1713 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1714 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1715 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1716 pbSig.wlInd;
1717 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1718 pbSig.discCount;
1719 }
1720 }
1721 }
1722 if (prn.system() == 'J') {
1723 QListIterator<phaseBiasSignal> it(phaseBiasList);
1724 while (it.hasNext()) {
1725 const phaseBiasSignal &pbSig = it.next();
1726 if (pbSig.type == "1C") {
1727 int ii = phasebiasSat->NumberOfPhaseBiases;
1728 if (ii >= CLOCKORBIT_NUMBIAS)
1729 break;
1730 phasebiasSat->NumberOfPhaseBiases += 1;
1731 phasebiasSat->Biases[ii].Type = CODETYPEQZSS_L1_CA;
1732 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1733 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1734 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1735 pbSig.wlInd;
1736 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1737 pbSig.discCount;
1738 }
1739 else if (pbSig.type == "1S") {
1740 int ii = phasebiasSat->NumberOfPhaseBiases;
1741 if (ii >= CLOCKORBIT_NUMBIAS)
1742 break;
1743 phasebiasSat->NumberOfPhaseBiases += 1;
1744 phasebiasSat->Biases[ii].Type = CODETYPEQZSS_L1C_D;
1745 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1746 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1747 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1748 pbSig.wlInd;
1749 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1750 pbSig.discCount;
1751 }
1752 else if (pbSig.type == "1L") {
1753 int ii = phasebiasSat->NumberOfPhaseBiases;
1754 if (ii >= CLOCKORBIT_NUMBIAS)
1755 break;
1756 phasebiasSat->NumberOfPhaseBiases += 1;
1757 phasebiasSat->Biases[ii].Type = CODETYPEQZSS_L1C_P;
1758 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1759 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1760 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1761 pbSig.wlInd;
1762 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1763 pbSig.discCount;
1764 }
1765 else if (pbSig.type == "1X") {
1766 int ii = phasebiasSat->NumberOfPhaseBiases;
1767 if (ii >= CLOCKORBIT_NUMBIAS)
1768 break;
1769 phasebiasSat->NumberOfPhaseBiases += 1;
1770 phasebiasSat->Biases[ii].Type = CODETYPEQZSS_L1C_DP;
1771 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1772 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1773 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1774 pbSig.wlInd;
1775 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1776 pbSig.discCount;
1777 }
1778 else if (pbSig.type == "2S") {
1779 int ii = phasebiasSat->NumberOfPhaseBiases;
1780 if (ii >= CLOCKORBIT_NUMBIAS)
1781 break;
1782 phasebiasSat->NumberOfPhaseBiases += 1;
1783 phasebiasSat->Biases[ii].Type = CODETYPEQZSS_L2C_M;
1784 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1785 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1786 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1787 pbSig.wlInd;
1788 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1789 pbSig.discCount;
1790 }
1791 else if (pbSig.type == "2L") {
1792 int ii = phasebiasSat->NumberOfPhaseBiases;
1793 if (ii >= CLOCKORBIT_NUMBIAS)
1794 break;
1795 phasebiasSat->NumberOfPhaseBiases += 1;
1796 phasebiasSat->Biases[ii].Type = CODETYPEQZSS_L2C_L;
1797 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1798 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1799 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1800 pbSig.wlInd;
1801 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1802 pbSig.discCount;
1803 }
1804 else if (pbSig.type == "2X") {
1805 int ii = phasebiasSat->NumberOfPhaseBiases;
1806 if (ii >= CLOCKORBIT_NUMBIAS)
1807 break;
1808 phasebiasSat->NumberOfPhaseBiases += 1;
1809 phasebiasSat->Biases[ii].Type = CODETYPEQZSS_L2C_ML;
1810 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1811 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1812 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1813 pbSig.wlInd;
1814 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1815 pbSig.discCount;
1816 }
1817 else if (pbSig.type == "5I") {
1818 int ii = phasebiasSat->NumberOfPhaseBiases;
1819 if (ii >= CLOCKORBIT_NUMBIAS)
1820 break;
1821 phasebiasSat->NumberOfPhaseBiases += 1;
1822 phasebiasSat->Biases[ii].Type = CODETYPEQZSS_L5_I;
1823 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1824 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1825 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1826 pbSig.wlInd;
1827 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1828 pbSig.discCount;
1829 }
1830 else if (pbSig.type == "5Q") {
1831 int ii = phasebiasSat->NumberOfPhaseBiases;
1832 if (ii >= CLOCKORBIT_NUMBIAS)
1833 break;
1834 phasebiasSat->NumberOfPhaseBiases += 1;
1835 phasebiasSat->Biases[ii].Type = CODETYPEQZSS_L5_Q;
1836 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1837 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1838 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1839 pbSig.wlInd;
1840 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1841 pbSig.discCount;
1842 }
1843 else if (pbSig.type == "5X") {
1844 int ii = phasebiasSat->NumberOfPhaseBiases;
1845 if (ii >= CLOCKORBIT_NUMBIAS)
1846 break;
1847 phasebiasSat->NumberOfPhaseBiases += 1;
1848 phasebiasSat->Biases[ii].Type = CODETYPEQZSS_L5_IQ;
1849 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1850 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1851 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1852 pbSig.wlInd;
1853 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1854 pbSig.discCount;
1855 }
1856 else if (pbSig.type == "6S") {
1857 int ii = phasebiasSat->NumberOfPhaseBiases;
1858 if (ii >= CLOCKORBIT_NUMBIAS)
1859 break;
1860 phasebiasSat->NumberOfPhaseBiases += 1;
1861 phasebiasSat->Biases[ii].Type = CODETYPEQZSS_LEX_S;
1862 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1863 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1864 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1865 pbSig.wlInd;
1866 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1867 pbSig.discCount;
1868 }
1869 else if (pbSig.type == "6L") {
1870 int ii = phasebiasSat->NumberOfPhaseBiases;
1871 if (ii >= CLOCKORBIT_NUMBIAS)
1872 break;
1873 phasebiasSat->NumberOfPhaseBiases += 1;
1874 phasebiasSat->Biases[ii].Type = CODETYPEQZSS_LEX_L;
1875 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1876 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1877 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1878 pbSig.wlInd;
1879 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1880 pbSig.discCount;
1881 }
1882 else if (pbSig.type == "6X") {
1883 int ii = phasebiasSat->NumberOfPhaseBiases;
1884 if (ii >= CLOCKORBIT_NUMBIAS)
1885 break;
1886 phasebiasSat->NumberOfPhaseBiases += 1;
1887 phasebiasSat->Biases[ii].Type = CODETYPEQZSS_LEX_SL;
1888 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1889 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1890 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1891 pbSig.wlInd;
1892 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1893 pbSig.discCount;
1894 }
1895 }
1896 }
1897 if (prn.system() == 'S') {
1898 QListIterator<phaseBiasSignal> it(phaseBiasList);
1899 while (it.hasNext()) {
1900 const phaseBiasSignal &pbSig = it.next();
1901 if (pbSig.type == "1C") {
1902 int ii = phasebiasSat->NumberOfPhaseBiases;
1903 if (ii >= CLOCKORBIT_NUMBIAS)
1904 break;
1905 phasebiasSat->NumberOfPhaseBiases += 1;
1906 phasebiasSat->Biases[ii].Type = CODETYPE_SBAS_L1_CA;
1907 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1908 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1909 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1910 pbSig.wlInd;
1911 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1912 pbSig.discCount;
1913 }
1914 else if (pbSig.type == "5I") {
1915 int ii = phasebiasSat->NumberOfPhaseBiases;
1916 if (ii >= CLOCKORBIT_NUMBIAS)
1917 break;
1918 phasebiasSat->NumberOfPhaseBiases += 1;
1919 phasebiasSat->Biases[ii].Type = CODETYPE_SBAS_L5_I;
1920 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1921 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1922 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1923 pbSig.wlInd;
1924 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1925 pbSig.discCount;
1926 }
1927 else if (pbSig.type == "5Q") {
1928 int ii = phasebiasSat->NumberOfPhaseBiases;
1929 if (ii >= CLOCKORBIT_NUMBIAS)
1930 break;
1931 phasebiasSat->NumberOfPhaseBiases += 1;
1932 phasebiasSat->Biases[ii].Type = CODETYPE_SBAS_L5_Q;
1933 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1934 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1935 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1936 pbSig.wlInd;
1937 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1938 pbSig.discCount;
1939 }
1940 else if (pbSig.type == "5X") {
1941 int ii = phasebiasSat->NumberOfPhaseBiases;
1942 if (ii >= CLOCKORBIT_NUMBIAS)
1943 break;
1944 phasebiasSat->NumberOfPhaseBiases += 1;
1945 phasebiasSat->Biases[ii].Type = CODETYPE_SBAS_L5_IQ;
1946 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1947 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1948 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1949 pbSig.wlInd;
1950 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1951 pbSig.discCount;
1952 }
1953 }
1954 }
1955 if (prn.system() == 'C') {
1956 QListIterator<phaseBiasSignal> it(phaseBiasList);
1957 while (it.hasNext()) {
1958 const phaseBiasSignal &pbSig = it.next();
1959 if (pbSig.type == "2I") {
1960 int ii = phasebiasSat->NumberOfPhaseBiases;
1961 if (ii >= CLOCKORBIT_NUMBIAS)
1962 break;
1963 phasebiasSat->NumberOfPhaseBiases += 1;
1964 phasebiasSat->Biases[ii].Type = CODETYPE_BDS_B1_I;
1965 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1966 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1967 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1968 pbSig.wlInd;
1969 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1970 pbSig.discCount;
1971 }
1972 else if (pbSig.type == "2Q") {
1973 int ii = phasebiasSat->NumberOfPhaseBiases;
1974 if (ii >= CLOCKORBIT_NUMBIAS)
1975 break;
1976 phasebiasSat->NumberOfPhaseBiases += 1;
1977 phasebiasSat->Biases[ii].Type = CODETYPE_BDS_B1_Q;
1978 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1979 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1980 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1981 pbSig.wlInd;
1982 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1983 pbSig.discCount;
1984 }
1985 else if (pbSig.type == "2X") {
1986 int ii = phasebiasSat->NumberOfPhaseBiases;
1987 if (ii >= CLOCKORBIT_NUMBIAS)
1988 break;
1989 phasebiasSat->NumberOfPhaseBiases += 1;
1990 phasebiasSat->Biases[ii].Type = CODETYPE_BDS_B1_IQ;
1991 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1992 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
1993 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1994 pbSig.wlInd;
1995 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1996 pbSig.discCount;
1997 }
1998 else if (pbSig.type == "6I") {
1999 int ii = phasebiasSat->NumberOfPhaseBiases;
2000 if (ii >= CLOCKORBIT_NUMBIAS)
2001 break;
2002 phasebiasSat->NumberOfPhaseBiases += 1;
2003 phasebiasSat->Biases[ii].Type = CODETYPE_BDS_B3_I;
2004 phasebiasSat->Biases[ii].Bias = pbSig.bias;
2005 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
2006 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
2007 pbSig.wlInd;
2008 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
2009 pbSig.discCount;
2010 }
2011 else if (pbSig.type == "6Q") {
2012 int ii = phasebiasSat->NumberOfPhaseBiases;
2013 if (ii >= CLOCKORBIT_NUMBIAS)
2014 break;
2015 phasebiasSat->NumberOfPhaseBiases += 1;
2016 phasebiasSat->Biases[ii].Type = CODETYPE_BDS_B3_Q;
2017 phasebiasSat->Biases[ii].Bias = pbSig.bias;
2018 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
2019 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
2020 pbSig.wlInd;
2021 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
2022 pbSig.discCount;
2023 }
2024 else if (pbSig.type == "6X") {
2025 int ii = phasebiasSat->NumberOfPhaseBiases;
2026 if (ii >= CLOCKORBIT_NUMBIAS)
2027 break;
2028 phasebiasSat->NumberOfPhaseBiases += 1;
2029 phasebiasSat->Biases[ii].Type = CODETYPE_BDS_B3_IQ;
2030 phasebiasSat->Biases[ii].Bias = pbSig.bias;
2031 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
2032 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
2033 pbSig.wlInd;
2034 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
2035 pbSig.discCount;
2036 }
2037 else if (pbSig.type == "7I") {
2038 int ii = phasebiasSat->NumberOfPhaseBiases;
2039 if (ii >= CLOCKORBIT_NUMBIAS)
2040 break;
2041 phasebiasSat->NumberOfPhaseBiases += 1;
2042 phasebiasSat->Biases[ii].Type = CODETYPE_BDS_B2_I;
2043 phasebiasSat->Biases[ii].Bias = pbSig.bias;
2044 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
2045 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
2046 pbSig.wlInd;
2047 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
2048 pbSig.discCount;
2049 }
2050 else if (pbSig.type == "7Q") {
2051 int ii = phasebiasSat->NumberOfPhaseBiases;
2052 if (ii >= CLOCKORBIT_NUMBIAS)
2053 break;
2054 phasebiasSat->NumberOfPhaseBiases += 1;
2055 phasebiasSat->Biases[ii].Type = CODETYPE_BDS_B2_Q;
2056 phasebiasSat->Biases[ii].Bias = pbSig.bias;
2057 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
2058 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
2059 pbSig.wlInd;
2060 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
2061 pbSig.discCount;
2062 }
2063 else if (pbSig.type == "7X") {
2064 int ii = phasebiasSat->NumberOfPhaseBiases;
2065 if (ii >= CLOCKORBIT_NUMBIAS)
2066 break;
2067 phasebiasSat->NumberOfPhaseBiases += 1;
2068 phasebiasSat->Biases[ii].Type = CODETYPE_BDS_B2_IQ;
2069 phasebiasSat->Biases[ii].Bias = pbSig.bias;
2070 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.intInd;
2071 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
2072 pbSig.wlInd;
2073 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
2074 pbSig.discCount;
2075 }
2076 }
2077 }
2078 }
2079 }
2080 }
2081
2082 QByteArray hlpBufferCo;
2083
2084 // Orbit and Clock Corrections together
2085 // ------------------------------------
2086 if (_samplRtcmEphCorr == 0.0) {
2087 if (co.NumberOfSat[CLOCKORBIT_SATGPS] > 0
2088 || co.NumberOfSat[CLOCKORBIT_SATGLONASS] > 0
2089 || co.NumberOfSat[CLOCKORBIT_SATGALILEO] > 0
2090 || co.NumberOfSat[CLOCKORBIT_SATQZSS] > 0
2091 || co.NumberOfSat[CLOCKORBIT_SATSBAS] > 0
2092 || co.NumberOfSat[CLOCKORBIT_SATBDS] > 0) {
2093 char obuffer[CLOCKORBIT_BUFFERSIZE];
2094 int len = MakeClockOrbit(&co, COTYPE_AUTO, 0, obuffer, sizeof(obuffer));
2095 if (len > 0) {
2096 hlpBufferCo = QByteArray(obuffer, len);
2097 }
2098 }
2099 }
2100
2101 // Orbit and Clock Corrections separately
2102 // --------------------------------------
2103 else {
2104 if (co.NumberOfSat[CLOCKORBIT_SATGPS] > 0) {
2105 char obuffer[CLOCKORBIT_BUFFERSIZE];
2106 if (fmod(epoTime.gpssec(), _samplRtcmEphCorr) == 0.0) {
2107 co.UpdateInterval = ephUpdInd;
2108 int len1 = MakeClockOrbit(&co, COTYPE_GPSORBIT, 1, obuffer,
2109 sizeof(obuffer));
2110 co.UpdateInterval = clkUpdInd;
2111 if (len1 > 0) {
2112 hlpBufferCo += QByteArray(obuffer, len1);
2113 }
2114 }
2115 int mmsg = (co.NumberOfSat[CLOCKORBIT_SATGLONASS] > 0) ? 1 : 0;
2116 int len2 = MakeClockOrbit(&co, COTYPE_GPSCLOCK, mmsg, obuffer,
2117 sizeof(obuffer));
2118 if (len2 > 0) {
2119 hlpBufferCo += QByteArray(obuffer, len2);
2120 }
2121 }
2122 if (co.NumberOfSat[CLOCKORBIT_SATGLONASS] > 0) {
2123 char obuffer[CLOCKORBIT_BUFFERSIZE];
2124 if (fmod(epoTime.gpssec(), _samplRtcmEphCorr) == 0.0) {
2125 co.UpdateInterval = ephUpdInd;
2126 int len1 = MakeClockOrbit(&co, COTYPE_GLONASSORBIT, 1, obuffer,
2127 sizeof(obuffer));
2128 co.UpdateInterval = clkUpdInd;
2129 if (len1 > 0) {
2130 hlpBufferCo += QByteArray(obuffer, len1);
2131 }
2132 }
2133 int mmsg = (co.NumberOfSat[CLOCKORBIT_SATGALILEO] > 0) ? 1 : 0;
2134 int len2 = MakeClockOrbit(&co, COTYPE_GLONASSCLOCK, mmsg, obuffer,
2135 sizeof(obuffer));
2136 if (len2 > 0) {
2137 hlpBufferCo += QByteArray(obuffer, len2);
2138 }
2139 }
2140 if (co.NumberOfSat[CLOCKORBIT_SATGALILEO] > 0) {
2141 char obuffer[CLOCKORBIT_BUFFERSIZE];
2142 if (fmod(epoTime.gpssec(), _samplRtcmEphCorr) == 0.0) {
2143 co.UpdateInterval = ephUpdInd;
2144 int len1 = MakeClockOrbit(&co, COTYPE_GALILEOORBIT, 1, obuffer,
2145 sizeof(obuffer));
2146 co.UpdateInterval = clkUpdInd;
2147 if (len1 > 0) {
2148 hlpBufferCo += QByteArray(obuffer, len1);
2149 }
2150 }
2151 int mmsg = (co.NumberOfSat[CLOCKORBIT_SATQZSS] > 0) ? 1 : 0;
2152 int len2 = MakeClockOrbit(&co, COTYPE_GALILEOCLOCK, mmsg, obuffer,
2153 sizeof(obuffer));
2154 if (len2 > 0) {
2155 hlpBufferCo += QByteArray(obuffer, len2);
2156 }
2157 }
2158 if (co.NumberOfSat[CLOCKORBIT_SATQZSS] > 0) {
2159 char obuffer[CLOCKORBIT_BUFFERSIZE];
2160 if (fmod(epoTime.gpssec(), _samplRtcmEphCorr) == 0.0) {
2161 co.UpdateInterval = ephUpdInd;
2162 int len1 = MakeClockOrbit(&co, COTYPE_QZSSORBIT, 1, obuffer,
2163 sizeof(obuffer));
2164 co.UpdateInterval = clkUpdInd;
2165 if (len1 > 0) {
2166 hlpBufferCo += QByteArray(obuffer, len1);
2167 }
2168 }
2169 int mmsg = (co.NumberOfSat[CLOCKORBIT_SATSBAS] > 0) ? 1 : 0;
2170 int len2 = MakeClockOrbit(&co, COTYPE_QZSSCLOCK, mmsg, obuffer,
2171 sizeof(obuffer));
2172 if (len2 > 0) {
2173 hlpBufferCo += QByteArray(obuffer, len2);
2174 }
2175 }
2176 if (co.NumberOfSat[CLOCKORBIT_SATSBAS] > 0) {
2177 char obuffer[CLOCKORBIT_BUFFERSIZE];
2178 if (fmod(epoTime.gpssec(), _samplRtcmEphCorr) == 0.0) {
2179 co.UpdateInterval = ephUpdInd;
2180 int len1 = MakeClockOrbit(&co, COTYPE_SBASORBIT, 1, obuffer,
2181 sizeof(obuffer));
2182 co.UpdateInterval = clkUpdInd;
2183 if (len1 > 0) {
2184 hlpBufferCo += QByteArray(obuffer, len1);
2185 }
2186 }
2187 int mmsg = (co.NumberOfSat[CLOCKORBIT_SATBDS] > 0) ? 1 : 0;
2188 int len2 = MakeClockOrbit(&co, COTYPE_SBASCLOCK, mmsg, obuffer,
2189 sizeof(obuffer));
2190 if (len2 > 0) {
2191 hlpBufferCo += QByteArray(obuffer, len2);
2192 }
2193 }
2194 if (co.NumberOfSat[CLOCKORBIT_SATBDS] > 0) {
2195 char obuffer[CLOCKORBIT_BUFFERSIZE];
2196 if (fmod(epoTime.gpssec(), _samplRtcmEphCorr) == 0.0) {
2197 co.UpdateInterval = ephUpdInd;
2198 int len1 = MakeClockOrbit(&co, COTYPE_BDSORBIT, 1, obuffer,
2199 sizeof(obuffer));
2200 co.UpdateInterval = clkUpdInd;
2201 if (len1 > 0) {
2202 hlpBufferCo += QByteArray(obuffer, len1);
2203 }
2204 }
2205 int len2 = MakeClockOrbit(&co, COTYPE_BDSCLOCK, 0, obuffer,
2206 sizeof(obuffer));
2207 if (len2 > 0) {
2208 hlpBufferCo += QByteArray(obuffer, len2);
2209 }
2210 }
2211 }
2212
2213 // Code Biases
2214 // -----------
2215 QByteArray hlpBufferBias;
2216 if (bias.NumberOfSat[CLOCKORBIT_SATGPS] > 0
2217 || bias.NumberOfSat[CLOCKORBIT_SATGLONASS] > 0
2218 || bias.NumberOfSat[CLOCKORBIT_SATGALILEO] > 0
2219 || bias.NumberOfSat[CLOCKORBIT_SATQZSS] > 0
2220 || bias.NumberOfSat[CLOCKORBIT_SATSBAS] > 0
2221 || bias.NumberOfSat[CLOCKORBIT_SATBDS] > 0) {
2222 char obuffer[CLOCKORBIT_BUFFERSIZE];
2223 int len = MakeCodeBias(&bias, BTYPE_AUTO, 0, obuffer, sizeof(obuffer));
2224 if (len > 0) {
2225 hlpBufferBias = QByteArray(obuffer, len);
2226 }
2227 }
2228
2229 // Phase Biases
2230 // ------------
2231 QByteArray hlpBufferPhaseBias;
2232 if (phasebias.NumberOfSat[CLOCKORBIT_SATGPS] > 0
2233 || phasebias.NumberOfSat[CLOCKORBIT_SATGLONASS] > 0
2234 || phasebias.NumberOfSat[CLOCKORBIT_SATGALILEO] > 0
2235 || phasebias.NumberOfSat[CLOCKORBIT_SATQZSS] > 0
2236 || phasebias.NumberOfSat[CLOCKORBIT_SATSBAS] > 0
2237 || phasebias.NumberOfSat[CLOCKORBIT_SATBDS] > 0) {
2238 char obuffer[CLOCKORBIT_BUFFERSIZE];
2239 int len = MakePhaseBias(&phasebias, PBTYPE_AUTO, 0, obuffer,
2240 sizeof(obuffer));
2241 if (len > 0) {
2242 hlpBufferPhaseBias = QByteArray(obuffer, len);
2243 }
2244 }
2245
2246 // VTEC
2247 // ----
2248 QByteArray hlpBufferVtec;
2249 if (vtec.NumLayers > 0) {
2250 char obuffer[CLOCKORBIT_BUFFERSIZE];
2251 int len = MakeVTEC(&vtec, 0, obuffer, sizeof(obuffer));
2252 if (len > 0) {
2253 hlpBufferVtec = QByteArray(obuffer, len);
2254 }
2255 }
2256
2257 _outBuffer += hlpBufferCo + hlpBufferBias + hlpBufferPhaseBias
2258 + hlpBufferVtec;
2259}
2260
2261//
2262////////////////////////////////////////////////////////////////////////////
2263void bncRtnetUploadCaster::processSatellite(const t_eph* eph, int GPSweek,
2264 double GPSweeks, const QString& prn, const ColumnVector& rtnAPC,
2265 double rtnClk, const ColumnVector& rtnVel, const ColumnVector& rtnCoM,
2266 struct ClockOrbit::SatData* sd, QString& outLine) {
2267
2268 // Broadcast Position and Velocity
2269 // -------------------------------
2270 ColumnVector xB(4);
2271 ColumnVector vB(3);
2272 eph->getCrd(bncTime(GPSweek, GPSweeks), xB, vB, false);
2273
2274 // Precise Position
2275 // ----------------
2276 ColumnVector xP = _CoM ? rtnCoM : rtnAPC;
2277
2278 double dc = 0.0;
2279 if (_crdTrafo != "IGS08") {
2280 crdTrafo(GPSweek, xP, dc);
2281 }
2282
2283 // Difference in xyz
2284 // -----------------
2285 ColumnVector dx = xB.Rows(1, 3) - xP;
2286 ColumnVector dv = vB - rtnVel;
2287
2288 // Difference in RSW
2289 // -----------------
2290 ColumnVector rsw(3);
2291 XYZ_to_RSW(xB.Rows(1, 3), vB, dx, rsw);
2292
2293 ColumnVector dotRsw(3);
2294 XYZ_to_RSW(xB.Rows(1, 3), vB, dv, dotRsw);
2295
2296 // Clock Correction
2297 // ----------------
2298 double dClk = rtnClk - (xB(4) - dc) * t_CST::c;
2299
2300 if (sd) {
2301 sd->ID = prn.mid(1).toInt();
2302 sd->IOD = eph->IOD();
2303 sd->Clock.DeltaA0 = dClk;
2304 sd->Clock.DeltaA1 = 0.0; // TODO
2305 sd->Clock.DeltaA2 = 0.0; // TODO
2306 sd->Orbit.DeltaRadial = rsw(1);
2307 sd->Orbit.DeltaAlongTrack = rsw(2);
2308 sd->Orbit.DeltaCrossTrack = rsw(3);
2309 sd->Orbit.DotDeltaRadial = dotRsw(1);
2310 sd->Orbit.DotDeltaAlongTrack = dotRsw(2);
2311 sd->Orbit.DotDeltaCrossTrack = dotRsw(3);
2312 }
2313
2314 outLine.sprintf("%d %.1f %s %u %10.3f %8.3f %8.3f %8.3f\n", GPSweek,
2315 GPSweeks, eph->prn().toString().c_str(), eph->IOD(), dClk, rsw(1), rsw(2),
2316 rsw(3));
2317
2318 double relativity = -2.0 * DotProduct(xP, rtnVel) / t_CST::c;
2319 double sp3Clk = (rtnClk - relativity) / t_CST::c; // in seconds
2320
2321 if (_rnx) {
2322 _rnx->write(GPSweek, GPSweeks, prn, sp3Clk);
2323 }
2324 if (_sp3) {
2325 _sp3->write(GPSweek, GPSweeks, prn, rtnCoM, sp3Clk);
2326 }
2327}
2328
2329// Transform Coordinates
2330////////////////////////////////////////////////////////////////////////////
2331void bncRtnetUploadCaster::crdTrafo(int GPSWeek, ColumnVector& xyz,
2332 double& dc) {
2333
2334 // Current epoch minus 2000.0 in years
2335 // ------------------------------------
2336 double dt = (GPSWeek - (1042.0 + 6.0 / 7.0)) / 365.2422 * 7.0 + 2000.0 - _t0;
2337
2338 ColumnVector dx(3);
2339
2340 dx(1) = _dx + dt * _dxr;
2341 dx(2) = _dy + dt * _dyr;
2342 dx(3) = _dz + dt * _dzr;
2343
2344 static const double arcSec = 180.0 * 3600.0 / M_PI;
2345
2346 double ox = (_ox + dt * _oxr) / arcSec;
2347 double oy = (_oy + dt * _oyr) / arcSec;
2348 double oz = (_oz + dt * _ozr) / arcSec;
2349
2350 double sc = 1.0 + _sc * 1e-9 + dt * _scr * 1e-9;
2351
2352 // Specify approximate center of area
2353 // ----------------------------------
2354 ColumnVector meanSta(3);
2355
2356 if (_crdTrafo == "ETRF2000") {
2357 meanSta(1) = 3661090.0;
2358 meanSta(2) = 845230.0;
2359 meanSta(3) = 5136850.0;
2360 }
2361 else if (_crdTrafo == "NAD83") {
2362 meanSta(1) = -1092950.0;
2363 meanSta(2) = -4383600.0;
2364 meanSta(3) = 4487420.0;
2365 }
2366 else if (_crdTrafo == "GDA94") {
2367 meanSta(1) = -4052050.0;
2368 meanSta(2) = 4212840.0;
2369 meanSta(3) = -2545110.0;
2370 }
2371 else if (_crdTrafo == "SIRGAS2000") {
2372 meanSta(1) = 3740860.0;
2373 meanSta(2) = -4964290.0;
2374 meanSta(3) = -1425420.0;
2375 }
2376 else if (_crdTrafo == "SIRGAS95") {
2377 meanSta(1) = 3135390.0;
2378 meanSta(2) = -5017670.0;
2379 meanSta(3) = -2374440.0;
2380 }
2381 else if (_crdTrafo == "DREF91") {
2382 meanSta(1) = 3959579.0;
2383 meanSta(2) = 721719.0;
2384 meanSta(3) = 4931539.0;
2385 }
2386 else if (_crdTrafo == "Custom") {
2387 meanSta(1) = 0.0; // TODO
2388 meanSta(2) = 0.0; // TODO
2389 meanSta(3) = 0.0; // TODO
2390 }
2391
2392 // Clock correction proportional to topocentric distance to satellites
2393 // -------------------------------------------------------------------
2394 double rho = (xyz - meanSta).norm_Frobenius();
2395 dc = rho * (sc - 1.0) / sc / t_CST::c;
2396
2397 Matrix rMat(3, 3);
2398 rMat(1, 1) = 1.0;
2399 rMat(1, 2) = -oz;
2400 rMat(1, 3) = oy;
2401 rMat(2, 1) = oz;
2402 rMat(2, 2) = 1.0;
2403 rMat(2, 3) = -ox;
2404 rMat(3, 1) = -oy;
2405 rMat(3, 2) = ox;
2406 rMat(3, 3) = 1.0;
2407
2408 xyz = sc * rMat * xyz + dx;
2409}
2410
2411int bncRtnetUploadCaster::determineUpdateInd(double samplingRate) {
2412
2413 if (samplingRate == 10.0) {
2414 return 3;
2415 }
2416 else if (samplingRate == 15.0) {
2417 return 4;
2418 }
2419 else if (samplingRate == 30.0) {
2420 return 5;
2421 }
2422 else if (samplingRate == 60.0) {
2423 return 6;
2424 }
2425 else if (samplingRate == 120.0) {
2426 return 7;
2427 }
2428 else if (samplingRate == 240.0) {
2429 return 8;
2430 }
2431 else if (samplingRate == 300.0) {
2432 return 9;
2433 }
2434 else if (samplingRate == 600.0) {
2435 return 10;
2436 }
2437 else if (samplingRate == 900.0) {
2438 return 11;
2439 }
2440 else if (samplingRate == 1800.0) {
2441 return 12;
2442 }
2443 else if (samplingRate == 3600.0) {
2444 return 13;
2445 }
2446 else if (samplingRate == 7200.0) {
2447 return 14;
2448 }
2449 else if (samplingRate == 10800.0) {
2450 return 15;
2451 }
2452 return 2; // default
2453}
Note: See TracBrowser for help on using the repository browser.