@@ -2593,57 +2593,37 @@ void GNSS_MOSAIC::storeBlock4013(SEMP_PARSE_STATE *parse)
25932593 if (Tracking)
25942594 {
25952595 // SV is being tracked. If it is not in svInTracking, add it
2596- std::vector<uint8_t >::iterator pos = std::find (svInTracking.begin (), svInTracking.end (), SVID);
2596+ std::vector<svTracking_t >::iterator pos = std::find_if (svInTracking.begin (), svInTracking.end (), find_sv ( SVID) );
25972597 if (pos == svInTracking.end ())
2598- svInTracking.push_back (SVID);
2598+ svInTracking.push_back ({ SVID, millis ()} );
25992599 }
26002600 else
26012601 {
26022602 // SV is not being tracked. If it is in svInTracking, remove it
2603- std::vector<uint8_t >::iterator pos = std::find (svInTracking.begin (), svInTracking.end (), SVID);
2603+ std::vector<svTracking_t >::iterator pos = std::find_if (svInTracking.begin (), svInTracking.end (), find_sv ( SVID) );
26042604 if (pos != svInTracking.end ())
26052605 svInTracking.erase (pos);
26062606 }
2607-
2608- // uint16_t PVTStatus = sempSbfGetU2(parse, 20 + ChannelInfoBytes + SB1Length + (j * SB2Length) + 4);
2609-
2610- // bool Used = false;
2611- // for (uint16_t shift = 0; shift < 16; shift += 2) // Step through each 2-bit status field
2612- // {
2613- // if ((PVTStatus & (0x0003 << shift)) == (0x0002 << shift)) // 2 : Used
2614- // {
2615- // Used = true;
2616- // }
2617- // }
2618-
2619- // if (Used)
2620- // {
2621- // // SV is being used for PVT. If it is not in svInPVT, add it
2622- // std::vector<uint8_t>::iterator pos =
2623- // std::find(svInPVT.begin(), svInPVT.end(), SVID);
2624- // if (pos == svInPVT.end())
2625- // svInPVT.push_back(SVID);
2626- // }
2627- // else
2628- // {
2629- // // SV is not being used for PVT. If it is in svInPVT, remove it
2630- // std::vector<uint8_t>::iterator pos =
2631- // std::find(svInPVT.begin(), svInPVT.end(), SVID);
2632- // if (pos != svInPVT.end())
2633- // svInPVT.erase(pos);
2634- // }
26352607 }
26362608
26372609 ChannelInfoBytes += SB1Length + (N2 * SB2Length);
26382610 }
26392611
2612+ // Erase stale SVs
2613+ bool keepGoing = true ;
2614+ while (keepGoing)
2615+ {
2616+ std::vector<svTracking_t>::iterator pos = std::find_if (svInTracking.begin (), svInTracking.end (), find_stale_sv (millis ()));
2617+ if (pos != svInTracking.end ())
2618+ svInTracking.erase (pos);
2619+ else
2620+ keepGoing = false ;
2621+ }
2622+
26402623 _satellitesInView = (uint8_t )std::distance (svInTracking.begin (), svInTracking.end ());
26412624
26422625 // if (settings.debugGnss && !inMainMenu)
2643- // {
2644- // uint8_t _inPVT = (uint8_t)std::distance(svInPVT.begin(), svInPVT.end());
2645- // systemPrintf("ChannelStatus: InTracking %d, InPVT %d\r\n", _satellitesInView, _inPVT);
2646- // }
2626+ // systemPrintf("ChannelStatus: InTracking %d\r\n", _satellitesInView);
26472627}
26482628
26492629// ----------------------------------------
0 commit comments