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

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

minor changes to prevent the loss of epochs if there are 2 epoch lines in the rtnetuploadbuffer

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