From ac5eb105f03dc468ecb4f16b02eda19a6c8eac7e Mon Sep 17 00:00:00 2001 From: FrogAi <91348155+FrogAi@users.noreply.github.com> Date: Fri, 12 Jan 2024 22:39:30 -0700 Subject: [PATCH] Fired the babysitter Added toggles to disable driver monitoring, the "Door Open", "Seatbelt Unlatched", and "System Overheated" alerts and all logging. --- common/params.cc | 6 +++++ selfdrive/car/interfaces.py | 8 +++++-- selfdrive/controls/controlsd.py | 6 +++++ .../assets/toggle_icons/icon_babysitter.png | Bin 0 -> 14357 bytes selfdrive/frogpilot/ui/control_settings.cc | 21 ++++++++++++++++-- selfdrive/manager/process_config.py | 21 ++++++++++++------ selfdrive/thermald/thermald.py | 4 ++++ selfdrive/ui/qt/onroad.cc | 3 ++- selfdrive/ui/qt/onroad.h | 1 + selfdrive/ui/ui.cc | 1 + selfdrive/ui/ui.h | 1 + 11 files changed, 60 insertions(+), 12 deletions(-) create mode 100644 selfdrive/frogpilot/assets/toggle_icons/icon_babysitter.png diff --git a/common/params.cc b/common/params.cc index be3a034..301d42a 100644 --- a/common/params.cc +++ b/common/params.cc @@ -247,6 +247,7 @@ std::unordered_map keys = { {"DisableOnroadUploads", PERSISTENT}, {"DriverCamera", PERSISTENT}, {"ExperimentalModeViaPress", PERSISTENT}, + {"FireTheBabysitter", PERSISTENT}, {"FrogPilotTogglesUpdated", PERSISTENT}, {"GasRegenCmd", PERSISTENT}, {"GoatScream", PERSISTENT}, @@ -255,6 +256,11 @@ std::unordered_map keys = { {"LeadInfo", PERSISTENT}, {"LongitudinalTune", PERSISTENT}, {"ModelUI", PERSISTENT}, + {"MuteDM", PERSISTENT}, + {"MuteDoor", PERSISTENT}, + {"MuteOverheated", PERSISTENT}, + {"MuteSeatbelt", PERSISTENT}, + {"NoLogging", PERSISTENT}, {"OfflineMode", PERSISTENT}, {"PathEdgeWidth", PERSISTENT}, {"PathWidth", PERSISTENT}, diff --git a/selfdrive/car/interfaces.py b/selfdrive/car/interfaces.py index ebecde4..7834a09 100644 --- a/selfdrive/car/interfaces.py +++ b/selfdrive/car/interfaces.py @@ -251,9 +251,9 @@ class CarInterfaceBase(ABC): enable_buttons=(ButtonType.accelCruise, ButtonType.decelCruise)): events = Events() - if cs_out.doorOpen: + if cs_out.doorOpen and not self.mute_door: events.add(EventName.doorOpen) - if cs_out.seatbeltUnlatched: + if cs_out.seatbeltUnlatched and not self.mute_seatbelt: events.add(EventName.seatbeltNotLatched) if cs_out.gearShifter != GearShifter.drive and (extra_gears is None or cs_out.gearShifter not in extra_gears): @@ -324,6 +324,10 @@ class CarInterfaceBase(ABC): if hasattr(self.CC, 'update_frogpilot_variables'): self.CC.update_frogpilot_variables(params) + fire_the_babysitter = params.get_bool("FireTheBabysitter") + self.mute_door = fire_the_babysitter and params.get_bool("MuteDoor") + self.mute_seatbelt = fire_the_babysitter and params.get_bool("MuteSeatbelt") + class RadarInterfaceBase(ABC): def __init__(self, CP): self.rcp = None diff --git a/selfdrive/controls/controlsd.py b/selfdrive/controls/controlsd.py index 6e25c4b..fea72a4 100644 --- a/selfdrive/controls/controlsd.py +++ b/selfdrive/controls/controlsd.py @@ -79,9 +79,15 @@ class Controls: self.params = Params() self.params_memory = Params("/dev/shm/params") + fire_the_babysitter = self.params.get_bool("FireTheBabysitter") + mute_dm = fire_the_babysitter and self.params.get_bool("MuteDM") + ignore = self.sensor_packets + ['testJoystick'] if SIMULATION: ignore += ['driverCameraState', 'managerState'] + if mute_dm: + ignore += ['driverMonitoringState'] + self.params.put_bool("DmModelInitialized", True) self.sm = messaging.SubMaster(['deviceState', 'pandaStates', 'peripheralState', 'modelV2', 'liveCalibration', 'driverMonitoringState', 'longitudinalPlan', 'lateralPlan', 'liveLocationKalman', 'managerState', 'liveParameters', 'radarState', 'liveTorqueParameters', diff --git a/selfdrive/frogpilot/assets/toggle_icons/icon_babysitter.png b/selfdrive/frogpilot/assets/toggle_icons/icon_babysitter.png new file mode 100644 index 0000000000000000000000000000000000000000..9789aebfef2aa2395064561be827dcd1693be5dd GIT binary patch literal 14357 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.find(key.c_str()) != fireTheBabysitterKeys.end()); + } + }); + toggle = fireTheBabysitterToggle; + } else if (param == "LateralTune") { FrogPilotParamManageControl *lateralTuneToggle = new FrogPilotParamManageControl(param, title, desc, icon, this); QObject::connect(lateralTuneToggle, &FrogPilotParamManageControl::manageButtonClicked, this, [this]() { @@ -178,7 +195,7 @@ FrogPilotControlsPanel::FrogPilotControlsPanel(SettingsWindow *parent) : FrogPil }); } - std::set rebootKeys = {"AlwaysOnLateral"}; + std::set rebootKeys = {"AlwaysOnLateral", "FireTheBabysitter", "MuteDM"}; for (const std::string &key : rebootKeys) { QObject::connect(toggles[key], &ToggleControl::toggleFlipped, [this]() { if (FrogPilotConfirmationDialog::toggle("Reboot required to take effect.", "Reboot Now", this)) { @@ -188,7 +205,7 @@ FrogPilotControlsPanel::FrogPilotControlsPanel(SettingsWindow *parent) : FrogPil } conditionalExperimentalKeys = {"CECurves", "CECurvesLead", "CESlowerLead", "CENavigation", "CEStopLights", "CESignal"}; - fireTheBabysitterKeys = {}; + fireTheBabysitterKeys = {"NoLogging", "MuteDM", "MuteDoor", "MuteOverheated", "MuteSeatbelt"}; laneChangeKeys = {}; lateralTuneKeys = {"AverageCurvature"}; longitudinalTuneKeys = {"AccelerationProfile", "AggressiveAcceleration"}; diff --git a/selfdrive/manager/process_config.py b/selfdrive/manager/process_config.py index 738fff1..c6bb087 100644 --- a/selfdrive/manager/process_config.py +++ b/selfdrive/manager/process_config.py @@ -45,23 +45,30 @@ def only_offroad(started, params, CP: car.CarParams) -> bool: # FrogPilot functions def allow_uploads(started, params, CP: car.CarParams) -> bool: + enable_logging = not (params.get_bool("FireTheBabysitter") and params.get_bool("NoLogging")) wifi_connected = HARDWARE.get_network_type() == WIFI and not started - return wifi_connected if params.get_bool("DisableOnroadUploads") else True + return wifi_connected if params.get_bool("DisableOnroadUploads") else enable_logging + +def enable_dm(started, params, CP: car.CarParams) -> bool: + return (started or params.get_bool("IsDriverViewEnabled")) and not (params.get_bool("FireTheBabysitter") and params.get_bool("MuteDM")) + +def enable_logging(started, params, CP: car.CarParams) -> bool: + return not (params.get_bool("FireTheBabysitter") and params.get_bool("NoLogging")) procs = [ DaemonProcess("manage_athenad", "selfdrive.athena.manage_athenad", "AthenadPid"), NativeProcess("camerad", "system/camerad", ["./camerad"], driverview), - NativeProcess("logcatd", "system/logcatd", ["./logcatd"], only_onroad), + NativeProcess("logcatd", "system/logcatd", ["./logcatd"], (enable_logging and only_onroad)), NativeProcess("proclogd", "system/proclogd", ["./proclogd"], only_onroad), - PythonProcess("logmessaged", "system.logmessaged", always_run), + PythonProcess("logmessaged", "system.logmessaged", enable_logging), PythonProcess("micd", "system.micd", iscar), PythonProcess("timezoned", "system.timezoned", always_run, enabled=not PC), - PythonProcess("dmonitoringmodeld", "selfdrive.modeld.dmonitoringmodeld", driverview, enabled=(not PC or WEBCAM)), + PythonProcess("dmonitoringmodeld", "selfdrive.modeld.dmonitoringmodeld", enable_dm, enabled=(not PC or WEBCAM)), NativeProcess("encoderd", "system/loggerd", ["./encoderd"], only_onroad), NativeProcess("stream_encoderd", "system/loggerd", ["./encoderd", "--stream"], notcar), - NativeProcess("loggerd", "system/loggerd", ["./loggerd"], logging), + NativeProcess("loggerd", "system/loggerd", ["./loggerd"], (enable_logging and logging)), NativeProcess("modeld", "selfdrive/modeld", ["./modeld"], only_onroad), NativeProcess("mapsd", "selfdrive/navd", ["./mapsd"], only_onroad), PythonProcess("navmodeld", "selfdrive.modeld.navmodeld", only_onroad), @@ -74,7 +81,7 @@ procs = [ PythonProcess("torqued", "selfdrive.locationd.torqued", only_onroad), PythonProcess("controlsd", "selfdrive.controls.controlsd", only_onroad), PythonProcess("deleter", "system.loggerd.deleter", always_run), - PythonProcess("dmonitoringd", "selfdrive.monitoring.dmonitoringd", driverview, enabled=(not PC or WEBCAM)), + PythonProcess("dmonitoringd", "selfdrive.monitoring.dmonitoringd", enable_dm, enabled=(not PC or WEBCAM)), PythonProcess("qcomgpsd", "system.qcomgpsd.qcomgpsd", qcomgps, enabled=TICI), PythonProcess("navd", "selfdrive.navd.navd", only_onroad), PythonProcess("pandad", "selfdrive.boardd.pandad", always_run), @@ -84,7 +91,7 @@ procs = [ PythonProcess("plannerd", "selfdrive.controls.plannerd", only_onroad), PythonProcess("radard", "selfdrive.controls.radard", only_onroad), PythonProcess("thermald", "selfdrive.thermald.thermald", always_run), - PythonProcess("tombstoned", "selfdrive.tombstoned", always_run, enabled=not PC), + PythonProcess("tombstoned", "selfdrive.tombstoned", enable_logging, enabled=not PC), PythonProcess("updated", "selfdrive.updated", only_offroad, enabled=not PC), PythonProcess("uploader", "system.loggerd.uploader", allow_uploads), PythonProcess("statsd", "selfdrive.statsd", always_run), diff --git a/selfdrive/thermald/thermald.py b/selfdrive/thermald/thermald.py index beb85f9..c439298 100755 --- a/selfdrive/thermald/thermald.py +++ b/selfdrive/thermald/thermald.py @@ -298,6 +298,10 @@ def thermald_thread(end_event, hw_queue) -> None: elif current_band.max_temp is not None and all_comp_temp > current_band.max_temp: thermal_status = list(THERMAL_BANDS.keys())[band_idx + 1] + if params.get_bool("FireTheBabysitter"): + if params.get_bool("MuteOverheated"): + thermal_status = ThermalStatus.green + # **** starting logic **** # Ensure date/time are valid diff --git a/selfdrive/ui/qt/onroad.cc b/selfdrive/ui/qt/onroad.cc index 0d34a4a..688fc7f 100644 --- a/selfdrive/ui/qt/onroad.cc +++ b/selfdrive/ui/qt/onroad.cc @@ -974,7 +974,7 @@ void AnnotatedCameraWidget::paintGL() { } // DMoji - if (!hideBottomIcons && (sm.rcv_frame("driverStateV2") > s->scene.started_frame)) { + if (!hideBottomIcons && (sm.rcv_frame("driverStateV2") > s->scene.started_frame) && !muteDM) { update_dmonitoring(s, sm["driverStateV2"].getDriverStateV2(), dm_fade_state, rightHandDM); drawDriverState(painter, s); } @@ -1058,6 +1058,7 @@ void AnnotatedCameraWidget::updateFrogPilotWidgets(QPainter &p) { laneWidthRight = scene.lane_width_right; leadInfo = scene.lead_info; mapOpen = scene.map_open; + muteDM = scene.mute_dm; obstacleDistance = scene.obstacle_distance; obstacleDistanceStock = scene.obstacle_distance_stock; showDriverCamera = scene.show_driver_camera; diff --git a/selfdrive/ui/qt/onroad.h b/selfdrive/ui/qt/onroad.h index af91aad..50c36d5 100644 --- a/selfdrive/ui/qt/onroad.h +++ b/selfdrive/ui/qt/onroad.h @@ -135,6 +135,7 @@ private: bool experimentalMode; bool leadInfo; bool mapOpen; + bool muteDM; bool showDriverCamera; bool turnSignalLeft; bool turnSignalRight; diff --git a/selfdrive/ui/ui.cc b/selfdrive/ui/ui.cc index f0e8e2e..1d3ded0 100644 --- a/selfdrive/ui/ui.cc +++ b/selfdrive/ui/ui.cc @@ -306,6 +306,7 @@ void ui_update_params(UIState *s) { scene.driver_camera = params.getBool("DriverCamera"); scene.experimental_mode_via_press = params.getBool("ExperimentalModeViaPress"); + scene.mute_dm = params.getBool("FireTheBabysitter") && params.getBool("MuteDM"); scene.screen_brightness = params.getInt("ScreenBrightness"); scene.wheel_icon = params.getInt("WheelIcon"); } diff --git a/selfdrive/ui/ui.h b/selfdrive/ui/ui.h index 7fc8764..bcbba67 100644 --- a/selfdrive/ui/ui.h +++ b/selfdrive/ui/ui.h @@ -186,6 +186,7 @@ typedef struct UIScene { bool lead_info; bool map_open; bool model_ui; + bool mute_dm; bool show_driver_camera; bool show_fps; bool turn_signal_left;