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

Last change on this file since 6897 was 6897, checked in by stuerze, 9 years ago

determination of an RTCM encoded update intervall for VTEC is added in rtnet interface

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