mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-11-06 20:43:46 +08:00
fc73a3383e
Wire longitudinal feature selection and inputs into planner hosts after their owners are available. Co-authored-by: Danny <dannyirwin31@yahoo.com> Co-authored-by: whoisdomi <dcantu83@gmail.com>
39 lines
1.3 KiB
Python
39 lines
1.3 KiB
Python
"""One saved planner preference, latched for the manager-owned drive process."""
|
|
from dataclasses import dataclass
|
|
from importlib import import_module
|
|
|
|
from openpilot.starpilot.saved_source import read_saved
|
|
from openpilot.starpilot.saved_document import commit_exact
|
|
|
|
KEY = 'UseStarPilotLongitudinalPlanner'
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class PlannerSelection:
|
|
starpilot: bool
|
|
valid: bool
|
|
raw: bytes | None
|
|
|
|
|
|
def read_selection(params):
|
|
raw, readable = read_saved(params, KEY, 8)
|
|
valid = readable and raw in (None, b'0', b'1')
|
|
# Invalid/unreadable preference preserves the default planner. Only an exact
|
|
# saved Off selects upstream; no malformed prefix silently changes a drive.
|
|
return PlannerSelection(raw != b'0' or not readable, valid, raw)
|
|
|
|
|
|
def run_selected(params, starpilot_main, *, importer=import_module):
|
|
selection = read_selection(params)
|
|
if selection.starpilot:
|
|
return starpilot_main()
|
|
return importer('openpilot.starpilot.longitudinal.upstream.plannerd').main()
|
|
|
|
|
|
def save_selection(params, value, expected, *, authorized):
|
|
if value not in ("Off", "On"):
|
|
return False
|
|
result = commit_exact(params, key=KEY, max_bytes=8, raw=b"1" if value == "On" else b"0",
|
|
expected=expected, authorized=authorized, temp_prefix=".planner-selection-")
|
|
return result.committed and result.verified
|