adopt pre-modelrevert clearpilot tree (d639e28) as the new head
Discard the modelrevert tree adoption (8b4b7e0) and the in-process park short-circuits / cached-output / dashcam-idle work that came with it (0dc8002,37e095e). Restore the clearpilot tree as it stood atd639e28— the parked-controlsd manager-process split, the GPS-disable in locationd, the controlsd UI hooks, the boardd ignition-edge safety_setter_thread fix. After a full /data/params/d wipe and re-calibration drive, the modelrevert-tree variant overcorrected on turns; reverting to the parked-controlsd architecture (which Brian had previously vetted and documented in887b9c9+27cad05) and starting fresh. Single new commit, no merge — file state matchesd639e28byte-for-byte. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -170,7 +170,17 @@ def thermald_thread(end_event, hw_queue) -> None:
|
||||
|
||||
onroad_conditions: dict[str, bool] = {
|
||||
"ignition": False,
|
||||
# CLEARPILOT: park-aware gating. When False, manager runs controlsd_parked
|
||||
# (CAN listener only) instead of the full onroad stack. Latched + hysteresis
|
||||
# on going-into-parked to avoid R↔P↔D thrash; flips out of parked instantly.
|
||||
# Initialized False (assume parked) so the full stack waits for carState
|
||||
# to confirm gear has actually left Park before spinning up.
|
||||
"not_parked": False,
|
||||
}
|
||||
is_parked = True
|
||||
parked_since: float | None = None # monotonic ts when gear first read as Park
|
||||
PARKED_HYSTERESIS_S = 1.5
|
||||
ignition_param_prev: bool | None = None
|
||||
startup_conditions: dict[str, bool] = {}
|
||||
startup_conditions_prev: dict[str, bool] = {}
|
||||
|
||||
@@ -247,6 +257,32 @@ def thermald_thread(end_event, hw_queue) -> None:
|
||||
onroad_conditions["ignition"] = False
|
||||
cloudlog.error("panda timed out onroad")
|
||||
|
||||
# CLEARPILOT: derive is_parked from carState gearShifter. Whichever controlsd
|
||||
# variant is currently running publishes carState; we just read the gear.
|
||||
# Going INTO parked has hysteresis (PARKED_HYSTERESIS_S) so brief P touches
|
||||
# during low-speed parking don't kick the heavy stack off. Going OUT of
|
||||
# parked is instant so the full stack starts spinning up the moment the
|
||||
# driver shifts to D/R/N.
|
||||
if sm.updated['carState']:
|
||||
gear = sm['carState'].gearShifter
|
||||
gear_is_park = gear == car.CarState.GearShifter.park
|
||||
now_mono = time.monotonic()
|
||||
if gear_is_park:
|
||||
if parked_since is None:
|
||||
parked_since = now_mono
|
||||
if (not is_parked) and (now_mono - parked_since) >= PARKED_HYSTERESIS_S:
|
||||
is_parked = True
|
||||
else:
|
||||
parked_since = None
|
||||
is_parked = False
|
||||
onroad_conditions["not_parked"] = not is_parked
|
||||
|
||||
# CLEARPILOT: expose ignition as a Param so manager predicates (which only
|
||||
# see persistent Params, not pandaStates) can gate controlsd_parked.
|
||||
if ignition_param_prev != onroad_conditions["ignition"]:
|
||||
params.put_bool("IgnitionOn", onroad_conditions["ignition"])
|
||||
ignition_param_prev = onroad_conditions["ignition"]
|
||||
|
||||
try:
|
||||
last_hw_state = hw_queue.get_nowait()
|
||||
except queue.Empty:
|
||||
|
||||
Reference in New Issue
Block a user