56 bool PNBGPSCNavDataFactory ::
60 if ((navIn->getNavID().navType != NavType::GPSCNAVL2) &&
61 (navIn->getNavID().navType != NavType::GPSCNAVL5))
67 bool isQZSS = navIn->getsatSys().system == SatelliteSystem::QZSS;
77 unsigned long svid = 0;
81 if ((msgType == 10) || (msgType == 11) ||
82 ((msgType >= 30) && (msgType <= 37)) ||
83 (isQZSS && ((msgType == 46) || (msgType == 47) ||
84 (msgType == 49) || (msgType == 51) ||
85 (msgType == 53) || (msgType == 61))))
87 rv = rv && processEph(msgType, navIn, navOut);
89 if ((msgType == 31) || (isQZSS && (msgType == 47)))
91 rv = rv && process31(msgType, navIn, navOut);
93 else if ((msgType == 30) || (isQZSS && (msgType == 61)))
95 rv = rv && process30(navIn, navOut);
97 else if ((msgType == 12) || (isQZSS && (msgType == 28)))
99 rv = rv && process12(msgType, navIn, navOut);
101 else if ((msgType == 33) || (isQZSS && (msgType == 49)))
103 rv = rv && process33(navIn, navOut);
105 else if ((msgType == 35) || (isQZSS && (msgType == 51)))
107 rv = rv && process35(navIn, navOut);
109 else if ((msgType == 37) || (isQZSS && (msgType == 53)))
111 rv = rv && processAlmOrb(msgType, navIn, navOut);
122 catch (std::exception& exc)
125 cerr << exc.
what() << endl;
130 cerr <<
"Unknown exception" << endl;
136 bool PNBGPSCNavDataFactory ::
143 unsigned prn = navIn->getsatSys().id;
176 if ((msgType == 10) && processHea)
179 NavDataPtr p1L1 = std::make_shared<GPSCNavHealth>();
180 NavDataPtr p1L2 = std::make_shared<GPSCNavHealth>();
181 NavDataPtr p1L5 = std::make_shared<GPSCNavHealth>();
182 p1L1->timeStamp = navIn->getTransmitTime();
183 p1L2->timeStamp = navIn->getTransmitTime();
184 p1L5->timeStamp = navIn->getTransmitTime();
193 NavMessageType::Health);
199 NavMessageType::Health);
202 CarrierBand::L5, TrackingCode::L5I,
204 NavMessageType::Health);
213 NavMessageType::Health);
217 NavMessageType::Health);
226 navOut.push_back(p1L1);
228 navOut.push_back(p1L2);
230 navOut.push_back(p1L5);
232 if (!PNBNavDataFactory::processEph)
237 if (ephAcc.find(prn) == ephAcc.end())
240 ephAcc[prn].resize(3);
241 ephAcc[prn][vecIdx] = navIn;
246 std::vector<PackedNavBitsPtr> &ephSF(ephAcc[prn]);
247 ephSF[vecIdx] = navIn;
250 (ephSF[
ephM10]->getNumBits() != 300) ||
251 (ephSF[
ephM11]->getNumBits() != 300) ||
252 (ephSF[
ephMClk]->getNumBits() != 300))
267 if ((toe10 != toe11) || (toe10 != toc))
275 NavDataPtr p0 = std::make_shared<GPSCNavEph>();
282 NavMessageType::Ephemeris);
321 eph->
A = eph->
deltaA + GPSCNavData::refAQZSS;
329 eph->
A = eph->
deltaA + GPSCNavData::refAGPS;
332 eph->
Ahalf = ::sqrt(eph->
A);
351 switch (navIn->getobsID().band)
355 SVHealth::Unhealthy);
357 case CarrierBand::L5:
359 SVHealth::Unhealthy);
383 navOut.push_back(p0);
390 bool PNBGPSCNavDataFactory ::
401 SatID xmitSat(navIn->getsatSys());
404 if (subjSys == SatelliteSystem::QZSS)
414 else if (msgType == 53)
418 subjSys = SatelliteSystem::GPS;
421 SatID subjSat(sprn, subjSys);
428 NavDataPtr p1L1 = std::make_shared<GPSCNavHealth>();
429 NavDataPtr p1L2 = std::make_shared<GPSCNavHealth>();
430 NavDataPtr p1L5 = std::make_shared<GPSCNavHealth>();
431 p1L1->timeStamp = navIn->getTransmitTime();
432 p1L2->timeStamp = navIn->getTransmitTime();
433 p1L5->timeStamp = navIn->getTransmitTime();
442 NavID(NavType::GPSLNAV)),
443 NavMessageType::Health);
449 NavMessageType::Health);
452 ObsID(ObservationType::NavMsg, CarrierBand::L5,
454 NavID(NavType::GPSCNAVL5)),
455 NavMessageType::Health);
464 NavID(NavType::GPSCNAVL2)),
465 NavMessageType::Health);
469 NavMessageType::Health);
478 navOut.push_back(p1L1);
480 navOut.push_back(p1L2);
482 navOut.push_back(p1L5);
484 if (!PNBNavDataFactory::processAlm)
489 NavDataPtr p0 = std::make_shared<GPSCNavAlm>();
492 alm->
timeStamp = navIn->getTransmitTime();
496 NavMessageType::Almanac);
528 switch (navIn->getobsID().band)
532 SVHealth::Unhealthy);
534 case CarrierBand::L5:
536 SVHealth::Unhealthy);
545 alm->
i0 = GPSCNavData::refi0QZSS + alm->
deltai;
549 alm->
i0 = GPSCNavData::refi0GPS + alm->
deltai;
553 navOut.push_back(p0);
558 bool PNBGPSCNavDataFactory ::
563 bool alert = navIn->asBool(
esbAlert);
567 processRedAlmOrb(msgType,
rsb12p1,pre,alert,wna,toa,navIn,navOut) &&
568 processRedAlmOrb(msgType,
rsb12p2,pre,alert,wna,toa,navIn,navOut) &&
569 processRedAlmOrb(msgType,
rsb12p3,pre,alert,wna,toa,navIn,navOut) &&
570 processRedAlmOrb(msgType,
rsb12p4,pre,alert,wna,toa,navIn,navOut) &&
571 processRedAlmOrb(msgType,
rsb12p5,pre,alert,wna,toa,navIn,navOut) &&
572 processRedAlmOrb(msgType,
rsb12p6,pre,alert,wna,toa,navIn,navOut) &&
573 processRedAlmOrb(msgType,
rsb12p7,pre,alert,wna,toa,navIn,navOut);
577 bool PNBGPSCNavDataFactory ::
580 if (PNBNavDataFactory::processIono)
582 NavDataPtr p0 = std::make_shared<GPSCNavIono>();
585 p0->
timeStamp = navIn->getTransmitTime();
588 navIn->getobsID(), navIn->getNavID()),
589 NavMessageType::Iono);
602 navOut.push_back(p0);
604 if (PNBNavDataFactory::processISC)
606 NavDataPtr p1 = std::make_shared<GPSCNavISC>();
609 p1->
timeStamp = navIn->getTransmitTime();
612 navIn->getobsID(), navIn->getNavID()),
613 NavMessageType::ISC);
623 navOut.push_back(p1);
629 bool PNBGPSCNavDataFactory ::
634 bool alert = navIn->asBool(
esbAlert);
638 processRedAlmOrb(msgType,
rsb31p1,pre,alert,wna,toa,navIn,navOut) &&
639 processRedAlmOrb(msgType,
rsb31p2,pre,alert,wna,toa,navIn,navOut) &&
640 processRedAlmOrb(msgType,
rsb31p3,pre,alert,wna,toa,navIn,navOut) &&
641 processRedAlmOrb(msgType,
rsb31p4,pre,alert,wna,toa,navIn,navOut);
645 bool PNBGPSCNavDataFactory ::
646 processRedAlmOrb(
unsigned msgType,
unsigned offset,
unsigned pre,
bool alert,
647 unsigned wna,
double toa,
650 SatID xmitSat(navIn->getsatSys());
651 unsigned long sprn = navIn->asUnsignedLong(offset+
rsbPRNa,
rnbPRNa,
660 if (subjSys == SatelliteSystem::QZSS)
662 if ((msgType == 31) || (msgType == 12))
670 else if ((msgType == 47) || (msgType == 28))
675 subjSys = SatelliteSystem::GPS;
678 SatID subjSat(sprn, subjSys);
679 if (PNBNavDataFactory::processHea)
682 NavDataPtr p1L1 = std::make_shared<GPSCNavHealth>();
683 NavDataPtr p1L2 = std::make_shared<GPSCNavHealth>();
684 NavDataPtr p1L5 = std::make_shared<GPSCNavHealth>();
685 p1L1->timeStamp = navIn->getTransmitTime();
686 p1L2->timeStamp = navIn->getTransmitTime();
687 p1L5->timeStamp = navIn->getTransmitTime();
696 NavID(NavType::GPSLNAV)),
697 NavMessageType::Health);
703 NavMessageType::Health);
706 ObsID(ObservationType::NavMsg, CarrierBand::L5,
708 NavID(NavType::GPSCNAVL5)),
709 NavMessageType::Health);
718 NavID(NavType::GPSCNAVL2)),
719 NavMessageType::Health);
723 NavMessageType::Health);
732 navOut.push_back(p1L1);
734 navOut.push_back(p1L2);
736 navOut.push_back(p1L5);
738 if (!PNBNavDataFactory::processAlm)
743 NavDataPtr p0 = std::make_shared<GPSCNavRedAlm>();
746 alm->
timeStamp = navIn->getTransmitTime();
750 NavMessageType::Almanac);
773 switch (navIn->getobsID().band)
777 SVHealth::Unhealthy);
779 case CarrierBand::L5:
781 SVHealth::Unhealthy);
793 navOut.push_back(p0);
798 bool PNBGPSCNavDataFactory ::
801 if (!PNBNavDataFactory::processTim)
806 NavDataPtr p0 = std::make_shared<GPSCNavTimeOffset>();
807 p0->timeStamp = navIn->getTransmitTime();
810 navIn->getobsID(), navIn->getNavID()),
811 NavMessageType::TimeOffset);
814 to->
tgt = TimeSystem::UTC;
833 navOut.push_back(p0);
838 bool PNBGPSCNavDataFactory ::
841 if (!PNBNavDataFactory::processTim)
846 NavDataPtr p0 = std::make_shared<GPSCNavTimeOffset>();
847 p0->timeStamp = navIn->getTransmitTime();
850 navIn->getobsID(), navIn->getNavID()),
851 NavMessageType::TimeOffset);
861 to->
tgt = TimeSystem::GAL;
864 to->
tgt = TimeSystem::GLO;
870 to->
tgt = TimeSystem::QZS;
889 navOut.push_back(p0);
894 void PNBGPSCNavDataFactory ::
895 dumpState(std::ostream& s)
898 s <<
"ephAcc.size() = " << ephAcc.size() <<
" (expect 32)" << endl;
899 for (
const auto& i : ephAcc)
901 s <<
" ephAcc[" << i.first <<
"].size() = " << i.second.size()
903 for (
unsigned j = 0; j < i.second.size(); j++)
905 s <<
" ephAcc[" << i.first <<
"][" << j <<
"] = ";
909 s << i.second[j]->getNumBits() <<
" bits";