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

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

minor changes

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