diff --git a/selfdrive/manager/process.py b/selfdrive/manager/process.py index 8551e96f3c..2b5ef7b85d 100644 --- a/selfdrive/manager/process.py +++ b/selfdrive/manager/process.py @@ -69,7 +69,8 @@ class ManagerProcess(ABC): unkillable = False daemon = False sigkill = False - persistent = False + onroad = True + offroad = False driverview = False notcar = False proc: Optional[Process] = None @@ -183,12 +184,13 @@ class ManagerProcess(ABC): class NativeProcess(ManagerProcess): - def __init__(self, name, cwd, cmdline, enabled=True, persistent=False, driverview=False, notcar=False, unkillable=False, sigkill=False, watchdog_max_dt=None): + def __init__(self, name, cwd, cmdline, enabled=True, onroad=True, offroad=False, driverview=False, notcar=False, unkillable=False, sigkill=False, watchdog_max_dt=None): self.name = name self.cwd = cwd self.cmdline = cmdline self.enabled = enabled - self.persistent = persistent + self.onroad = onroad + self.offroad = offroad self.driverview = driverview self.notcar = notcar self.unkillable = unkillable @@ -215,11 +217,12 @@ class NativeProcess(ManagerProcess): class PythonProcess(ManagerProcess): - def __init__(self, name, module, enabled=True, persistent=False, driverview=False, notcar=False, unkillable=False, sigkill=False, watchdog_max_dt=None): + def __init__(self, name, module, enabled=True, onroad=True, offroad=False, driverview=False, notcar=False, unkillable=False, sigkill=False, watchdog_max_dt=None): self.name = name self.module = module self.enabled = enabled - self.persistent = persistent + self.onroad = onroad + self.offroad = offroad self.driverview = driverview self.notcar = notcar self.unkillable = unkillable @@ -254,7 +257,8 @@ class DaemonProcess(ManagerProcess): self.module = module self.param_name = param_name self.enabled = enabled - self.persistent = True + self.onroad = True + self.offroad = True def prepare(self) -> None: pass @@ -293,23 +297,23 @@ def ensure_running(procs: ValuesView[ManagerProcess], started: bool, driverview: not_run = [] for p in procs: - if p.name in not_run: - p.stop(block=False) - elif not p.enabled: - p.stop(block=False) - elif p.persistent: - p.start() - elif p.driverview and driverview: - p.start() - elif p.notcar: - if notcar: - p.start() - else: - p.stop(block=False) - elif started: + # Conditions that make a process run + run = any(( + p.offroad and not started, + p.onroad and started, + p.driverview and driverview, + p.notcar and notcar, + )) + + # Conditions that block a process from starting + run = run and not any(( + not p.enabled, + p.name in not_run, + )) + + if run: p.start() else: p.stop(block=False) p.check_watchdog(started) - diff --git a/selfdrive/manager/process_config.py b/selfdrive/manager/process_config.py index 43b22036dc..6568e1980e 100644 --- a/selfdrive/manager/process_config.py +++ b/selfdrive/manager/process_config.py @@ -14,32 +14,32 @@ procs = [ NativeProcess("logcatd", "selfdrive/logcatd", ["./logcatd"]), NativeProcess("loggerd", "selfdrive/loggerd", ["./loggerd"]), NativeProcess("modeld", "selfdrive/modeld", ["./modeld"]), - NativeProcess("navd", "selfdrive/ui/navd", ["./navd"], persistent=True), + NativeProcess("navd", "selfdrive/ui/navd", ["./navd"], offroad=True), NativeProcess("proclogd", "selfdrive/proclogd", ["./proclogd"]), NativeProcess("sensord", "selfdrive/sensord", ["./sensord"], enabled=not PC), NativeProcess("ubloxd", "selfdrive/locationd", ["./ubloxd"], enabled=(not PC or WEBCAM)), - NativeProcess("ui", "selfdrive/ui", ["./ui"], persistent=True, watchdog_max_dt=(5 if TICI else None)), - NativeProcess("soundd", "selfdrive/ui/soundd", ["./soundd"], persistent=True), + NativeProcess("ui", "selfdrive/ui", ["./ui"], offroad=True, watchdog_max_dt=(5 if TICI else None)), + NativeProcess("soundd", "selfdrive/ui/soundd", ["./soundd"], offroad=True), NativeProcess("locationd", "selfdrive/locationd", ["./locationd"]), NativeProcess("boardd", "selfdrive/boardd", ["./boardd"], enabled=False), PythonProcess("calibrationd", "selfdrive.locationd.calibrationd"), PythonProcess("controlsd", "selfdrive.controls.controlsd"), - PythonProcess("deleter", "selfdrive.loggerd.deleter", persistent=True), + PythonProcess("deleter", "selfdrive.loggerd.deleter", offroad=True), PythonProcess("dmonitoringd", "selfdrive.monitoring.dmonitoringd", enabled=(not PC or WEBCAM), driverview=True), - PythonProcess("logmessaged", "selfdrive.logmessaged", persistent=True), - PythonProcess("pandad", "selfdrive.boardd.pandad", persistent=True), + PythonProcess("logmessaged", "selfdrive.logmessaged", offroad=True), + PythonProcess("pandad", "selfdrive.boardd.pandad", offroad=True), PythonProcess("paramsd", "selfdrive.locationd.paramsd"), PythonProcess("plannerd", "selfdrive.controls.plannerd"), PythonProcess("radard", "selfdrive.controls.radard"), - PythonProcess("thermald", "selfdrive.thermald.thermald", persistent=True), - PythonProcess("timezoned", "selfdrive.timezoned", enabled=TICI, persistent=True), - PythonProcess("tombstoned", "selfdrive.tombstoned", enabled=not PC, persistent=True), - PythonProcess("updated", "selfdrive.updated", enabled=not PC, persistent=True), - PythonProcess("uploader", "selfdrive.loggerd.uploader", persistent=True), - PythonProcess("statsd", "selfdrive.statsd", persistent=True), + PythonProcess("thermald", "selfdrive.thermald.thermald", offroad=True), + PythonProcess("timezoned", "selfdrive.timezoned", enabled=TICI, offroad=True), + PythonProcess("tombstoned", "selfdrive.tombstoned", enabled=not PC, offroad=True), + PythonProcess("updated", "selfdrive.updated", enabled=not PC, offroad=True), + PythonProcess("uploader", "selfdrive.loggerd.uploader", offroad=True), + PythonProcess("statsd", "selfdrive.statsd", offroad=True), - NativeProcess("bridge", "cereal/messaging", ["./bridge"], notcar=True), - PythonProcess("webjoystick", "tools.joystick.web", notcar=True), + NativeProcess("bridge", "cereal/messaging", ["./bridge"], onroad=False, notcar=True), + PythonProcess("webjoystick", "tools.joystick.web", onroad=False, notcar=True), # Experimental PythonProcess("rawgpsd", "selfdrive.sensord.rawgps.rawgpsd", enabled=os.path.isfile("/persist/comma/use-quectel-rawgps")),