mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-11-08 05:23:41 +08:00
ab81464bd1
Add navigation and map matching providers with the vendored map service sources. Co-authored-by: Daniel Koepping <elkoled@gmail.com> Co-authored-by: Danny <dannyirwin31@yahoo.com> Co-authored-by: Prabhaav Pillai <prabhaav@msu.edu> Co-authored-by: dirwin31 <83434411+dirwin31@users.noreply.github.com>
74 lines
2.5 KiB
Python
74 lines
2.5 KiB
Python
from types import SimpleNamespace as NS
|
|
|
|
from openpilot.starpilot.gps.acquisition import GpsAcquisition, acquisition_progress
|
|
|
|
|
|
class GnssMaster:
|
|
def __init__(self):
|
|
self.updated = {'gpsLocationExternal': False, 'qcomGnss': False}
|
|
self.valid = {'gpsLocationExternal': True, 'qcomGnss': True}
|
|
self.messages = {}
|
|
|
|
def update(self, _timeout):
|
|
pass
|
|
|
|
def __getitem__(self, key):
|
|
return self.messages[key]
|
|
|
|
def measurement(self, source, states):
|
|
self.updated = {'gpsLocationExternal': False, 'qcomGnss': True}
|
|
self.messages['qcomGnss'] = NS(which=lambda: 'measurementReport',
|
|
measurementReport=NS(source=source, sv=[NS(observationState=state) for state in states]))
|
|
|
|
|
|
def test_qualcomm_counts_only_tracked_satellites_and_expires_each_constellation():
|
|
sm = GnssMaster()
|
|
acquisition = GpsAcquisition(sm_factory=lambda: sm)
|
|
acquisition.update(10)
|
|
assert acquisition.satellites(10) is None and acquisition.since == 10
|
|
sm.measurement(0, [5, 5, 4, 1, 0])
|
|
acquisition.update(11)
|
|
sm.measurement(1, [5, 2])
|
|
acquisition.update(12)
|
|
assert acquisition.satellites(12) == 4
|
|
assert acquisition.satellites(16.5) == 1
|
|
assert acquisition.satellites(17) is None
|
|
|
|
|
|
def test_ublox_preferred_count_expiry_invalid_reports_and_reset():
|
|
sm = GnssMaster()
|
|
acquisition = GpsAcquisition(sm_factory=lambda: sm)
|
|
sm.measurement(0, [5, 4, 0])
|
|
acquisition.update(10)
|
|
sm.updated = {'gpsLocationExternal': True, 'qcomGnss': False}
|
|
sm.messages['gpsLocationExternal'] = NS(satelliteCount=9)
|
|
acquisition.update(11)
|
|
assert acquisition.satellites(11) == 9
|
|
sm.valid['gpsLocationExternal'] = False
|
|
acquisition.update(15)
|
|
assert acquisition.satellites(16) is None
|
|
acquisition.reset()
|
|
assert acquisition.since is None and acquisition.satellites(11) is None
|
|
|
|
|
|
def test_progress_matches_aacomma():
|
|
assert acquisition_progress(None) == acquisition_progress(0) == .04
|
|
assert acquisition_progress(3) == .5
|
|
assert acquisition_progress(6) == acquisition_progress(12) == 1
|
|
|
|
|
|
def test_qualcomm_reads_real_capnp_enums():
|
|
from openpilot.cereal import log
|
|
gnss = log.QcomGnss.new_message()
|
|
report = gnss.init('measurementReport')
|
|
report.source = 'glonass'
|
|
satellites = report.init('sv', 3)
|
|
for satellite, state in zip(satellites, ('track', 'trackVerify', 'search'), strict=True):
|
|
satellite.observationState = state
|
|
sm = GnssMaster()
|
|
sm.updated['qcomGnss'] = True
|
|
sm.messages['qcomGnss'] = gnss
|
|
acquisition = GpsAcquisition(sm_factory=lambda: sm)
|
|
acquisition.update(10)
|
|
assert acquisition.satellites(10) == 2
|