コード例 #1
0
ファイル: mdp2fic.cpp プロジェクト: Milfhunter/gpstk
   void processSubframes1to3(MDPNavSubframe& nav)
   {
         // For now, just look at L1 C/A navigation message
      if (nav.range != rcCA || nav.carrier != ccL1)
         return;

      NavIndex ni(RangeCarrierPair(nav.range, nav.carrier), nav.prn);
      ephData[ni] = nav;

      long sfa[10];
      nav.fillArray(sfa);
      uint32_t uint_sfa[10];
 
      for( int j = 0; j < 10; j++ )
         uint_sfa[j] = static_cast<uint32_t>( sfa[j] );

      numSubframesCollected++;
      if (gpstk::EngNav::checkParity(uint_sfa))
      {
         paritySuccessCount++;
         ephPageStore[ni][nav.getSFID()] = nav;
         EngEphemeris engEph;
         if (makeEngEphemeris(engEph, ephPageStore[ni]))
         {
            currentPRN = engEph.getPRNID();     // debug
            if (firstNavSF) 
            {
               earliestTime = engEph.getTransmitTime();
               firstNavSF = false;
            }
            latestTime = engEph.getTransmitTime();
            processEphemeris( engEph, ephPageStore[ni] );
         }
      }
      else parityFailCount++;
   } // end of process(MDPNavSubframe)
コード例 #2
0
ファイル: EphReader.cpp プロジェクト: Milfhunter/gpstk
   void EphReader::read_mdp_data(const string& fn)
   {
      GPSEphemerisStore* bce;

      if (eph == NULL)
      {
         bce = new(GPSEphemerisStore);
         eph = dynamic_cast<EphemerisStore*>(bce);
      }
      else
      {
         if (typeid(*eph) != typeid(GPSEphemerisStore))
            throw(FFStreamError("Don't mix nav data types..."));
         bce = dynamic_cast<GPSEphemerisStore*>(eph);
      }
      if (verboseLevel>2)
         cout << "Reading " << fn << " as MDP nav."<< endl;

      MDPStream mdps(fn.c_str(), ios::in);
      MDPHeader header;
      MDPNavSubframe nav;
      typedef pair<RangeCode, CarrierCode> RangeCarrierPair;
      typedef pair<RangeCarrierPair, short> NavIndex;
      typedef map<NavIndex, MDPNavSubframe> NavMap;
      NavMap ephData;
      map<NavIndex, EphemerisPages> ephPageStore;
      map<NavIndex, EngEphemeris> ephStore;
      bool firstEph=true;

      while (mdps >> header)
         if (header.id == MDPNavSubframe::myId)
         {
            mdps >> nav;
            if (!nav)
            {
               if (mdps && verboseLevel>2)
                  cout << "Error decoding nav " << endl;
            }
            else
            {
               MDPNavSubframe tmp = nav;

               // First try the data assuming it is already upright
               tmp.cooked = true;
               bool parityGood = tmp.checkParity();
               if (!parityGood)
               {
                  if (verboseLevel>3 && firstEph)
                     cout << "Raw subframe" << endl;
                  nav.cooked = false;
                  nav.cookSubframe();
                  parityGood = nav.checkParity();
               }
               else
               {
                  if (verboseLevel>3 && firstEph)
                     cout << "Cooked subframe" << endl;
               }

               firstEph = false;

               if (!parityGood)
               {
                  if (verboseLevel>2)
                     cout << "Parity error" << endl;
                  return;
               }

               short sfid = nav.getSFID();
               if (sfid > 3)
                  return;

               short week = static_cast<GPSWeekSecond>(nav.time).week;
#pragma unused(week)
               long sow = nav.getHOWTime();
               if (sow > FULLWEEK)
               {
                  if (verboseLevel>2)
                     cout << "Bad week" << endl;
                  return;
               }

               if (verboseLevel>3)
                  nav.dump(cout);

               if (nav.range != rcCA || nav.carrier != ccL1)
                  return;

               NavIndex ni(RangeCarrierPair(nav.range, nav.carrier), nav.prn);
               ephData[ni] = nav;

               ephPageStore[ni][sfid] = nav;
               EngEphemeris engEph;
               if (makeEngEphemeris(engEph, ephPageStore[ni]))
               {
                  bce->addEphemeris(RinexNavData(engEph));
                  ephPageStore[ni].clear();
               }
            }
         }