diff --git a/selfdrive/selfdrived/selfdrived.py b/selfdrive/selfdrived/selfdrived.py index e93a81f..10628f9 100755 --- a/selfdrive/selfdrived/selfdrived.py +++ b/selfdrive/selfdrived/selfdrived.py @@ -65,12 +65,18 @@ class SelfdriveD: self.sensor_packets = ["accelerometer", "gyroscope"] self.camera_packets = ["roadCameraState", "driverCameraState", "wideRoadCameraState"] + self.disable_dm = self.params.get_int("DisableDM") + # TODO: de-couple selfdrived with card/conflate on carState without introducing controls mismatches self.car_state_sock = messaging.sub_sock('carState', timeout=20) ignore = self.sensor_packets + self.gps_packets + ['alertDebug'] if SIMULATION: ignore += ['driverCameraState', 'managerState'] + elif self.disable_dm > 0: + self.camera_packets.remove("driverCameraState") + ignore += ['driverMonitoringState'] + if REPLAY: # no vipc in replay will make them ignored anyways ignore += ['roadCameraState', 'wideRoadCameraState'] @@ -274,7 +280,7 @@ class SelfdriveD: # All events here should at least have NO_ENTRY and SOFT_DISABLE. num_events = len(self.events) - not_running = {p.name for p in self.sm['managerState'].processes if not p.running and p.shouldBeRunning} + not_running = { p.name for p in self.sm['managerState'].processes if not p.running and p.shouldBeRunning } if self.sm.recv_frame['managerState'] and len(not_running): if not_running != self.not_running_prev: cloudlog.event("process_not_running", not_running=not_running, error=True) diff --git a/system/manager/process_config.py b/system/manager/process_config.py index d432dfa..eef509f 100644 --- a/system/manager/process_config.py +++ b/system/manager/process_config.py @@ -66,6 +66,9 @@ def or_(*fns): def and_(*fns): return lambda *args: operator.and_(*(fn(*args) for fn in fns)) +def enable_dm(started, params, CP: car.CarParams) -> bool: + return (started or params.get_bool("IsDriverViewEnabled")) and params.get_int("DisableDM") == 0 + procs = [ DaemonProcess("manage_athenad", "system.athena.manage_athenad", "AthenadPid"), @@ -78,7 +81,7 @@ procs = [ PythonProcess("timed", "system.timed", always_run, enabled=not PC), # TODO Make python process once TG allows opening QCOM from child proc - NativeProcess("dmonitoringmodeld", "selfdrive/modeld", ["./dmonitoringmodeld"], driverview, enabled=(WEBCAM or not PC)), + NativeProcess("dmonitoringmodeld", "selfdrive/modeld", ["./dmonitoringmodeld"], enable_dm, enabled=(WEBCAM or not PC)), NativeProcess("encoderd", "system/loggerd", ["./encoderd"], only_onroad), NativeProcess("stream_encoderd", "system/loggerd", ["./encoderd", "--stream"], notcar), NativeProcess("loggerd", "system/loggerd", ["./loggerd"], logging), @@ -100,7 +103,7 @@ procs = [ PythonProcess("selfdrived", "selfdrive.selfdrived.selfdrived", only_onroad), PythonProcess("card", "selfdrive.car.card", only_onroad), PythonProcess("deleter", "system.loggerd.deleter", always_run), - PythonProcess("dmonitoringd", "selfdrive.monitoring.dmonitoringd", driverview, enabled=(WEBCAM or not PC)), + PythonProcess("dmonitoringd", "selfdrive.monitoring.dmonitoringd", enable_dm, enabled=(WEBCAM or not PC)), PythonProcess("qcomgpsd", "system.qcomgpsd.qcomgpsd", qcomgps, enabled=TICI), PythonProcess("navd", "selfdrive.navd.navd", only_onroad), PythonProcess("pandad", "selfdrive.pandad.pandad", always_run),