single IsOffroad param (#38205)

This commit is contained in:
Adeeb Shihadeh
2026-06-20 16:55:48 -07:00
committed by GitHub
parent fddb9fb31c
commit ad5151b38b
7 changed files with 12 additions and 20 deletions
-1
View File
@@ -61,7 +61,6 @@ inline static std::unordered_map<std::string, ParamKeyAttributes> keys = {
{"IsLiveStreaming", {CLEAR_ON_MANAGER_START, BOOL}},
{"IsMetric", {PERSISTENT, BOOL}},
{"IsOffroad", {CLEAR_ON_MANAGER_START, BOOL}},
{"IsOnroad", {PERSISTENT, BOOL}},
{"IsRhdDetected", {PERSISTENT, BOOL}},
{"IsReleaseBranch", {CLEAR_ON_MANAGER_START, BOOL}},
{"IsTakingSnapshot", {CLEAR_ON_MANAGER_START, BOOL}},
+2 -2
View File
@@ -583,7 +583,7 @@ def startStream(sdp: str, enabled: bool) -> dict:
else:
raise Exception("failed to get CarParamsPersistent")
if not params.get_bool("IsOnroad"):
if params.get_bool("IsOffroad"):
# manager owns camerad/stream_encoderd/webrtcd; flip the param and let it bring them up.
# webrtcd clears IsLiveStreaming when the session ends
params.put_bool("IsLiveStreaming", True)
@@ -786,7 +786,7 @@ def ws_manage(ws: WebSocket, end_event: threading.Event) -> None:
sock = ws.sock
while True:
onroad = params.get_bool("IsOnroad")
onroad = not params.get_bool("IsOffroad")
if onroad != onroad_prev:
onroad_prev = onroad
+2 -3
View File
@@ -7,7 +7,6 @@ from typing import cast
from openpilot.common.params import Params
from openpilot.common.timeout import Timeout
from openpilot.system.athena import athenad
from openpilot.system.manager.helpers import write_onroad_params
from openpilot.common.hardware import TICI
TIMEOUT_TOLERANCE = 20 # seconds
@@ -93,10 +92,10 @@ class TestAthenadPing:
@pytest.mark.skipif(not TICI, reason="only run on desk")
def test_offroad(self, subtests, mocker) -> None:
write_onroad_params(False, self.params)
self.params.put_bool("IsOffroad", True, block=True)
self.assertTimeout(60 + TIMEOUT_TOLERANCE, subtests, mocker) # based using TCP keepalive settings
@pytest.mark.skipif(not TICI, reason="only run on desk")
def test_onroad(self, subtests, mocker) -> None:
write_onroad_params(True, self.params)
self.params.put_bool("IsOffroad", False, block=True)
self.assertTimeout(21 + TIMEOUT_TOLERANCE, subtests, mocker)
-6
View File
@@ -44,12 +44,6 @@ def unblock_stdout() -> None:
exit_status = os.wait()[1] >> 8
os._exit(exit_status)
def write_onroad_params(started, params):
params.put_bool("IsOnroad", started, block=True)
params.put_bool("IsOffroad", not started, block=True)
def save_bootlog():
# copy current params
tmp = tempfile.mkdtemp()
+4 -4
View File
@@ -13,7 +13,7 @@ from openpilot.common.utils import atomic_write
from openpilot.common.params import Params, ParamKeyFlag
from openpilot.common.text_window import TextWindow
from openpilot.common.hardware import HARDWARE
from openpilot.system.manager.helpers import unblock_stdout, write_onroad_params, save_bootlog
from openpilot.system.manager.helpers import unblock_stdout, save_bootlog
from openpilot.system.manager.process import ensure_running
from openpilot.system.manager.process_config import managed_processes
from openpilot.system.athena.registration import register, UNREGISTERED_DONGLE_ID
@@ -121,7 +121,7 @@ def manager_thread() -> None:
sm = messaging.SubMaster(['deviceState', 'carParams', 'pandaStates'], poll='deviceState')
pm = messaging.PubMaster(['managerState'])
write_onroad_params(False, params)
params.put_bool("IsOffroad", True, block=True)
ensure_running(managed_processes.values(), False, params=params, CP=sm['carParams'], not_run=ignore)
started_prev = False
@@ -141,9 +141,9 @@ def manager_thread() -> None:
if ignition and not ignition_prev:
params.clear_all(ParamKeyFlag.CLEAR_ON_IGNITION_ON)
# update onroad params, which drives pandad's safety setter thread
# update offroad state for services that don't subscribe to deviceState
if started != started_prev:
write_onroad_params(started, params)
params.put_bool("IsOffroad", not started, block=True)
started_prev = started
ignition_prev = ignition
+2 -2
View File
@@ -26,9 +26,9 @@ if __name__ == "__main__":
# Set up params for pandad
params = Params()
params.remove("FirmwareQueryDone")
params.put_bool("IsOnroad", False, block=True)
params.put_bool("IsOffroad", True, block=True)
time.sleep(0.2) # thread is 10 Hz
params.put_bool("IsOnroad", True, block=True)
params.put_bool("IsOffroad", False, block=True)
obd_callback(params)(not args.no_obd)
+2 -2
View File
@@ -30,9 +30,9 @@ if __name__ == "__main__":
# Set up params for pandad
params = Params()
params.remove("FirmwareQueryDone")
params.put_bool("IsOnroad", False, block=True)
params.put_bool("IsOffroad", True, block=True)
time.sleep(0.2) # thread is 10 Hz
params.put_bool("IsOnroad", True, block=True)
params.put_bool("IsOffroad", False, block=True)
set_obd_multiplexing = obd_callback(params)
extra: Any = None