@@ -2593,57 +2593,37 @@ void GNSS_MOSAIC::storeBlock4013(SEMP_PARSE_STATE *parse)
2593
2593
if (Tracking)
2594
2594
{
2595
2595
// 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) );
2597
2597
if (pos == svInTracking.end ())
2598
- svInTracking.push_back (SVID);
2598
+ svInTracking.push_back ({ SVID, millis ()} );
2599
2599
}
2600
2600
else
2601
2601
{
2602
2602
// 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) );
2604
2604
if (pos != svInTracking.end ())
2605
2605
svInTracking.erase (pos);
2606
2606
}
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
- // }
2635
2607
}
2636
2608
2637
2609
ChannelInfoBytes += SB1Length + (N2 * SB2Length);
2638
2610
}
2639
2611
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
+
2640
2623
_satellitesInView = (uint8_t )std::distance (svInTracking.begin (), svInTracking.end ());
2641
2624
2642
2625
// 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);
2647
2627
}
2648
2628
2649
2629
// ----------------------------------------
0 commit comments