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

Last change on this file since 8741 was 8741, checked in by stuerze, 2 years ago

some missing phase biases are added within rtnet2ssr transition for ssr upload

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