diff --git a/common/libcommon.a b/common/libcommon.a index 99afbdfd9..a9801ba37 100644 Binary files a/common/libcommon.a and b/common/libcommon.a differ diff --git a/common/params.cc b/common/params.cc index ca407851c..7f29388bf 100644 --- a/common/params.cc +++ b/common/params.cc @@ -309,6 +309,10 @@ int Params::getTuningLevel(const std::string &key) { return keys[key].tuning_level; } +ParamSettingsTier Params::getSettingsTier(const std::string &key) { + return keys[key].settings_tier; +} + std::optional Params::getStockValue(const std::string &key) { ParamKeyAttributes &attributes = keys[key]; if (attributes.stock_value) { diff --git a/common/params.h b/common/params.h index 13febfe5b..c51e99d46 100644 --- a/common/params.h +++ b/common/params.h @@ -33,6 +33,11 @@ enum ParamKeyType { BYTES = 6 }; +enum ParamSettingsTier { + SETTINGS_SIMPLE = 0, + SETTINGS_ADVANCED = 1, +}; + struct ParamKeyAttributes { uint32_t flags; ParamKeyType type; @@ -42,6 +47,9 @@ struct ParamKeyAttributes { std::optional stock_value = std::nullopt; int tuning_level = 0; + + // Controls settings-page visibility only. It does not gate the param's runtime behavior. + ParamSettingsTier settings_tier = SETTINGS_ADVANCED; }; class Params { @@ -112,6 +120,8 @@ public: int getTuningLevel(const std::string &key); + ParamSettingsTier getSettingsTier(const std::string &key); + std::optional getStockValue(const std::string &key); private: diff --git a/common/params.py b/common/params.py index 4b740354f..c6131b1ef 100644 --- a/common/params.py +++ b/common/params.py @@ -4,6 +4,27 @@ from enum import IntEnum, IntFlag from pathlib import Path import tempfile +SETTINGS_SIMPLE = 0 +SETTINGS_ADVANCED = 1 + + +def _load_settings_tiers() -> dict[str, int]: + params_keys = Path(__file__).with_name("params_keys.h") + if not params_keys.exists(): + return {} + + tiers = {} + for line in params_keys.read_text(encoding="utf-8", errors="ignore").splitlines(): + if not line.lstrip().startswith('{"'): + continue + parts = line.split('"') + if len(parts) >= 2: + tiers[parts[1]] = SETTINGS_SIMPLE if "SETTINGS_SIMPLE" in line else SETTINGS_ADVANCED + return tiers + + +_SETTINGS_TIERS = _load_settings_tiers() + try: from openpilot.common.params_pyx import Params as _Params, ParamKeyFlag, ParamKeyType, UnknownKeyName except Exception: @@ -180,6 +201,9 @@ except Exception: def get_tuning_level(self, key): return 0 + def get_settings_tier(self, key): + return _SETTINGS_TIERS.get(self.check_key(key), SETTINGS_ADVANCED) + else: assert _Params assert ParamKeyFlag @@ -187,6 +211,12 @@ else: assert UnknownKeyName class Params(_Params): + def get_settings_tier(self, key): + try: + return super().get_settings_tier(key) + except AttributeError: + return _SETTINGS_TIERS.get(self.check_key(key), SETTINGS_ADVANCED) + def get(self, key, block=False, return_default=False, encoding=None, default=None): try: value = super().get(key, block=block, return_default=return_default) diff --git a/common/params_keys.h b/common/params_keys.h index 7d2bd8819..c5f0f41a1 100644 --- a/common/params_keys.h +++ b/common/params_keys.h @@ -8,7 +8,7 @@ inline static std::unordered_map keys = { {"AccessToken", {CLEAR_ON_MANAGER_START | DONT_LOG, STRING}}, {"AdbEnabled", {PERSISTENT, BOOL}}, - {"AlwaysAllowUploads", {PERSISTENT, BOOL, "0"}}, + {"AlwaysAllowUploads", {PERSISTENT, BOOL, "0", std::nullopt, 0, SETTINGS_SIMPLE}}, {"AlwaysOnDM", {PERSISTENT, BOOL}}, {"ApiCache_Device", {PERSISTENT, STRING}}, {"AssistNowToken", {PERSISTENT, STRING}}, @@ -43,7 +43,7 @@ inline static std::unordered_map keys = { {"ExperimentalMode", {PERSISTENT, BOOL}}, {"ExperimentalModeConfirmed", {PERSISTENT, BOOL}}, {"PersistChillState", {PERSISTENT, BOOL, "0", "0", 1}}, - {"PersistExperimentalState", {PERSISTENT, BOOL, "0", "0", 1}}, + {"PersistExperimentalState", {PERSISTENT, BOOL, "0", "0", 1, SETTINGS_SIMPLE}}, {"PersistedCCStatus", {PERSISTENT, INT, "0", "0"}}, {"PersistedCEStatus", {PERSISTENT, INT, "0", "0"}}, {"FirmwareQueryDone", {CLEAR_ON_MANAGER_START | CLEAR_ON_ONROAD_TRANSITION, BOOL}}, @@ -56,7 +56,7 @@ inline static std::unordered_map keys = { {"GithubUsername", {PERSISTENT, STRING}}, {"GitRemote", {PERSISTENT, STRING}}, {"GsmApn", {PERSISTENT, STRING}}, - {"GsmMetered", {PERSISTENT, BOOL, "1"}}, + {"GsmMetered", {PERSISTENT, BOOL, "1", std::nullopt, 0, SETTINGS_SIMPLE}}, {"GsmRoaming", {PERSISTENT, BOOL}}, {"HardwareSerial", {PERSISTENT, STRING}}, {"HasAcceptedTerms", {PERSISTENT, STRING, "0"}}, @@ -71,7 +71,7 @@ inline static std::unordered_map keys = { {"IsMetric", {PERSISTENT, BOOL}}, {"IsOffroad", {CLEAR_ON_MANAGER_START, BOOL}}, {"IsOnroad", {PERSISTENT, BOOL}}, - {"IsRHD", {PERSISTENT, BOOL}}, + {"IsRHD", {PERSISTENT, BOOL, std::nullopt, std::nullopt, 0, SETTINGS_SIMPLE}}, {"IsRhdDetected", {PERSISTENT, BOOL}}, {"IsRHDOverride", {PERSISTENT, BOOL}}, {"IsReleaseBranch", {CLEAR_ON_MANAGER_START, BOOL}}, @@ -127,7 +127,7 @@ inline static std::unordered_map keys = { {"ShowDebugInfo", {PERSISTENT, BOOL}}, {"ShowAllToggles", {PERSISTENT, BOOL, "0", "0", 3}}, {"TryRaylibUI", {PERSISTENT, BOOL, "1"}}, - {"UseOldUI", {PERSISTENT, BOOL, "0"}}, + {"UseOldUI", {PERSISTENT, BOOL, "0", std::nullopt, 0, SETTINGS_SIMPLE}}, {"UsePrebuilt", {PERSISTENT, BOOL, "1"}}, {"RouteCount", {PERSISTENT, INT, "0"}}, {"SnoozeUpdate", {CLEAR_ON_MANAGER_START | CLEAR_ON_OFFROAD_TRANSITION, BOOL}}, @@ -151,12 +151,12 @@ inline static std::unordered_map keys = { {"Version", {PERSISTENT, STRING}}, // StarPilot variables - {"AccelerationPath", {PERSISTENT, BOOL, "1", "0", 2}}, - {"AccelerationProfile", {PERSISTENT, INT, "0", "0", 0}}, + {"AccelerationPath", {PERSISTENT, BOOL, "1", "0", 2, SETTINGS_SIMPLE}}, + {"AccelerationProfile", {PERSISTENT, INT, "0", "0", 0, SETTINGS_SIMPLE}}, {"AdjacentLeadsUI", {PERSISTENT, BOOL, "1", "0", 3}}, - {"AdjacentPath", {PERSISTENT, BOOL, "0", "0", 3}}, + {"AdjacentPath", {PERSISTENT, BOOL, "0", "0", 3, SETTINGS_SIMPLE}}, {"AdjacentPathMetrics", {PERSISTENT, BOOL, "0", "0", 3}}, - {"AdvancedCustomUI", {PERSISTENT, BOOL, "0", "0", 2}}, + {"AdvancedCustomUI", {PERSISTENT, BOOL, "0", "0", 2, SETTINGS_SIMPLE}}, {"AdvancedLateralTune", {PERSISTENT, BOOL, "1", "0", 2}}, {"AdvancedLongitudinalTune", {PERSISTENT, BOOL, "1", "0", 3}}, {"AggressiveFollow", {PERSISTENT, FLOAT, "1.25", "1.25", 2}}, @@ -166,9 +166,9 @@ inline static std::unordered_map keys = { {"AggressiveJerkDeceleration", {PERSISTENT, FLOAT, "50.0", "50.0", 3}}, {"AggressiveJerkSpeed", {PERSISTENT, FLOAT, "50.0", "50.0", 3}}, {"AggressiveJerkSpeedDecrease", {PERSISTENT, FLOAT, "50.0", "50.0", 3}}, - {"AlertVolumeControl", {PERSISTENT, BOOL, "0", "0", 2}}, + {"AlertVolumeControl", {PERSISTENT, BOOL, "0", "0", 2, SETTINGS_SIMPLE}}, {"AllowImpossibleAcceleration", {PERSISTENT, BOOL, "0", "0", 3}}, - {"AlwaysOnLateral", {PERSISTENT, BOOL, "1", "0", 0}}, + {"AlwaysOnLateral", {PERSISTENT, BOOL, "1", "0", 0, SETTINGS_SIMPLE}}, {"AlwaysOnLateralLKAS", {PERSISTENT, BOOL, "1", "0", 2}}, {"ApiCache_DriveStats", {PERSISTENT, JSON, "{}", "{}"}}, {"AutomaticallyDownloadModels", {PERSISTENT, BOOL, "1", "0", 1}}, @@ -181,30 +181,30 @@ inline static std::unordered_map keys = { {"BootLogo", {PERSISTENT, STRING, "starpilot", "stock", 0}}, {"BuildMetadata", {PERSISTENT, STRING, "", "", 0}}, {"BlindSpotMetrics", {PERSISTENT, BOOL, "1", "0", 3}}, - {"BlindSpotPath", {PERSISTENT, BOOL, "1", "0", 1}}, - {"BelowSteerSpeedVolume", {PERSISTENT, INT, "101", "101", 2}}, + {"BlindSpotPath", {PERSISTENT, BOOL, "1", "0", 1, SETTINGS_SIMPLE}}, + {"BelowSteerSpeedVolume", {PERSISTENT, INT, "101", "101", 2, SETTINGS_SIMPLE}}, {"BorderMetrics", {PERSISTENT, BOOL, "0", "0", 3}}, - {"BorderWidth", {PERSISTENT, FLOAT, "100.0", "100.0", 2}}, + {"BorderWidth", {PERSISTENT, FLOAT, "100.0", "100.0", 2, SETTINGS_SIMPLE}}, {"CalibratedLateralAcceleration", {PERSISTENT, FLOAT, "2.0", "2.0", 2}}, {"CalibrationProgress", {PERSISTENT, FLOAT, "0.0", "0.0", 3}}, {"CameraOffset", {PERSISTENT, FLOAT, "0.0", "0.0", 3}}, - {"CameraView", {PERSISTENT, INT, "3", "0", 2}}, + {"CameraView", {PERSISTENT, INT, "3", "0", 2, SETTINGS_SIMPLE}}, {"CancelDownloadMaps", {CLEAR_ON_MANAGER_START, BOOL, "0", "0"}}, {"DisableWideRoad", {PERSISTENT, BOOL, "0", "0", 3}}, {"CancelModelDownload", {CLEAR_ON_MANAGER_START, BOOL, "0", "0"}}, {"CancelThemeDownload", {CLEAR_ON_MANAGER_START, BOOL, "0", "0"}}, - {"CarMake", {PERSISTENT, STRING, "mock", "mock", 0}}, - {"CarModel", {PERSISTENT, STRING, "MOCK", "MOCK", 0}}, + {"CarMake", {PERSISTENT, STRING, "mock", "mock", 0, SETTINGS_SIMPLE}}, + {"CarModel", {PERSISTENT, STRING, "MOCK", "MOCK", 0, SETTINGS_SIMPLE}}, {"CarModelName", {PERSISTENT, STRING, "", "", 0}}, - {"CECurves", {PERSISTENT, BOOL, "0", "0", 1}}, + {"CECurves", {PERSISTENT, BOOL, "0", "0", 1, SETTINGS_SIMPLE}}, {"CECurvesLead", {PERSISTENT, BOOL, "0", "0", 1}}, - {"CELead", {PERSISTENT, BOOL, "1", "0", 1}}, - {"CEModelStopTime", {PERSISTENT, FLOAT, "7.0", "0.0", 2}}, + {"CELead", {PERSISTENT, BOOL, "1", "0", 1, SETTINGS_SIMPLE}}, + {"CEModelStopTime", {PERSISTENT, FLOAT, "7.0", "0.0", 2, SETTINGS_SIMPLE}}, {"CESignalLaneDetection", {PERSISTENT, BOOL, "1", "0", 2}}, - {"CESignalSpeed", {PERSISTENT, FLOAT, "0.0", "0.0", 2}}, - {"CESlowerLead", {PERSISTENT, BOOL, "1", "0", 1}}, - {"CESpeed", {PERSISTENT, FLOAT, "0.0", "0.0", 1}}, - {"CESpeedLead", {PERSISTENT, FLOAT, "0.0", "0.0", 1}}, + {"CESignalSpeed", {PERSISTENT, FLOAT, "0.0", "0.0", 2, SETTINGS_SIMPLE}}, + {"CESlowerLead", {PERSISTENT, BOOL, "1", "0", 1, SETTINGS_SIMPLE}}, + {"CESpeed", {PERSISTENT, FLOAT, "0.0", "0.0", 1, SETTINGS_SIMPLE}}, + {"CESpeedLead", {PERSISTENT, FLOAT, "0.0", "0.0", 1, SETTINGS_SIMPLE}}, {"CCMLead", {PERSISTENT, BOOL, "1", "0", 1}}, {"CCMLaunchAssist", {PERSISTENT, BOOL, "0", "0", 1}}, {"CCMSetSpeedMargin", {PERSISTENT, FLOAT, "3.0", "0.0", 1}}, @@ -212,19 +212,19 @@ inline static std::unordered_map keys = { {"CCMSpeedLead", {PERSISTENT, FLOAT, "35.0", "0.0", 1}}, {"CCStatus", {CLEAR_ON_OFFROAD_TRANSITION, INT, "0", "0"}}, {"CEStatus", {CLEAR_ON_OFFROAD_TRANSITION, INT, "0", "0"}}, - {"CEStopLights", {PERSISTENT, BOOL, "1", "0", 1}}, - {"CEStoppedLead", {PERSISTENT, BOOL, "0", "0", 1}}, - {"ClusterOffset", {PERSISTENT, FLOAT, "1.0", "1.0", 2}}, + {"CEStopLights", {PERSISTENT, BOOL, "1", "0", 1, SETTINGS_SIMPLE}}, + {"CEStoppedLead", {PERSISTENT, BOOL, "0", "0", 1, SETTINGS_SIMPLE}}, + {"ClusterOffset", {PERSISTENT, FLOAT, "1.0", "1.0", 2, SETTINGS_SIMPLE}}, {"ColorScheme", {PERSISTENT, STRING, "stock", "stock", 0}}, {"ColorToDownload", {CLEAR_ON_MANAGER_START, STRING, "", ""}}, {"BootLogoToDownload", {CLEAR_ON_MANAGER_START, STRING, "", ""}}, - {"Compass", {PERSISTENT, BOOL, "0", "0", 1}}, + {"Compass", {PERSISTENT, BOOL, "0", "0", 1, SETTINGS_SIMPLE}}, {"CommunityFavorites", {PERSISTENT, STRING, "", "", 1}}, {"ConditionalChill", {PERSISTENT, BOOL, "0", "0", 1}}, - {"ConditionalExperimental", {PERSISTENT, BOOL, "1", "0", 1}}, + {"ConditionalExperimental", {PERSISTENT, BOOL, "1", "0", 1, SETTINGS_SIMPLE}}, {"CurvatureData", {PERSISTENT | DONT_LOG, JSON, "{}", "{}"}}, - {"CurveSpeedController", {PERSISTENT, BOOL, "1", "0", 1}}, - {"CustomAlerts", {PERSISTENT, BOOL, "0", "0", 0}}, + {"CurveSpeedController", {PERSISTENT, BOOL, "1", "0", 1, SETTINGS_SIMPLE}}, + {"CustomAlerts", {PERSISTENT, BOOL, "0", "0", 0, SETTINGS_SIMPLE}}, {"CustomAccelProfile", {PERSISTENT, BOOL, "0", "0", 3}}, {"CustomAccelProfileInitialized", {PERSISTENT, BOOL, "0", "0", 3}}, {"CustomAccelProfile0MPH", {PERSISTENT, FLOAT, "3.0", "3.0", 3}}, @@ -234,10 +234,10 @@ inline static std::unordered_map keys = { {"CustomAccelProfile45MPH", {PERSISTENT, FLOAT, "1.0", "1.0", 3}}, {"CustomAccelProfile56MPH", {PERSISTENT, FLOAT, "0.8", "0.8", 3}}, {"CustomAccelProfile89MPH", {PERSISTENT, FLOAT, "0.6", "0.6", 3}}, - {"CustomCruise", {PERSISTENT, FLOAT, "1.0", "1.0", 2}}, - {"CustomCruiseLong", {PERSISTENT, FLOAT, "5.0", "5.0", 2}}, + {"CustomCruise", {PERSISTENT, FLOAT, "1.0", "1.0", 2, SETTINGS_SIMPLE}}, + {"CustomCruiseLong", {PERSISTENT, FLOAT, "5.0", "5.0", 2, SETTINGS_SIMPLE}}, {"CustomPersonalities", {PERSISTENT, BOOL, "0", "0", 2}}, - {"CancelButtonControl", {PERSISTENT, INT, "1", "0", 2}}, + {"CancelButtonControl", {PERSISTENT, INT, "1", "0", 2, SETTINGS_SIMPLE}}, {"CancelButtonControlsMigrated", {PERSISTENT, BOOL, "0", "0"}}, {"AOLLKASMigratedToButtonControl", {PERSISTENT, BOOL, "0", "0"}}, {"TrafficPersonalityProfile", {PERSISTENT, BOOL, "1", "1", 2}}, @@ -245,9 +245,9 @@ inline static std::unordered_map keys = { {"StandardPersonalityProfile", {PERSISTENT, BOOL, "1", "1", 2}}, {"RelaxedPersonalityProfile", {PERSISTENT, BOOL, "1", "1", 2}}, {"CustomThemes", {PERSISTENT, BOOL, "0", "0", 0}}, - {"CustomUI", {PERSISTENT, BOOL, "1", "0", 1}}, + {"CustomUI", {PERSISTENT, BOOL, "1", "0", 1, SETTINGS_SIMPLE}}, {"DebugMode", {CLEAR_ON_OFFROAD_TRANSITION, BOOL, "0", "0"}}, - {"DecelerationProfile", {PERSISTENT, INT, "1", "0", 2}}, + {"DecelerationProfile", {PERSISTENT, INT, "1", "0", 2, SETTINGS_SIMPLE}}, {"DeveloperMetrics", {PERSISTENT, BOOL, "1", "0", 3}}, {"DeveloperSidebar", {PERSISTENT, BOOL, "1", "0", 3}}, {"DeveloperSidebarMetric1", {PERSISTENT, INT, "1", "0", 3}}, @@ -258,14 +258,15 @@ inline static std::unordered_map keys = { {"DeveloperSidebarMetric6", {PERSISTENT, INT, "6", "0", 3}}, {"DeveloperSidebarMetric7", {PERSISTENT, INT, "7", "0", 3}}, {"DeveloperUI", {PERSISTENT, BOOL, "0", "0", 3}}, + {"GalaxyDeveloperMode", {PERSISTENT | DONT_LOG, BOOL, "0", "0", 0, SETTINGS_SIMPLE}}, {"DeveloperWidgets", {PERSISTENT, BOOL, "1", "0", 3}}, - {"DeviceManagement", {PERSISTENT, BOOL, "1", "0", 1}}, - {"DeviceShutdown", {PERSISTENT, INT, "9", "33", 1}}, - {"DisableOnroadUploads", {PERSISTENT, BOOL, "0", "0", 2}}, - {"DisableOpenpilotLongitudinal", {PERSISTENT, BOOL, "0", "0", 0}}, + {"DeviceManagement", {PERSISTENT, BOOL, "1", "0", 1, SETTINGS_SIMPLE}}, + {"DeviceShutdown", {PERSISTENT, INT, "9", "33", 1, SETTINGS_SIMPLE}}, + {"DisableOnroadUploads", {PERSISTENT, BOOL, "0", "0", 2, SETTINGS_SIMPLE}}, + {"DisableOpenpilotLongitudinal", {PERSISTENT, BOOL, "0", "0", 0, SETTINGS_SIMPLE}}, {"DiscordUsername", {PERSISTENT, STRING, "", "", 0}}, - {"DisengageVolume", {PERSISTENT, INT, "101", "101", 2}}, - {"DistanceButtonControl", {PERSISTENT, INT, "1", "0", 2}}, + {"DisengageVolume", {PERSISTENT, INT, "101", "101", 2, SETTINGS_SIMPLE}}, + {"DistanceButtonControl", {PERSISTENT, INT, "1", "0", 2, SETTINGS_SIMPLE}}, {"DistanceIconPack", {PERSISTENT, STRING, "stock", "stock", 0}}, {"DistanceIconToDownload", {CLEAR_ON_MANAGER_START, STRING, "", ""}}, {"DownloadableBootLogos", {PERSISTENT, STRING, "", ""}}, @@ -277,47 +278,47 @@ inline static std::unordered_map keys = { {"DownloadableWheels", {PERSISTENT, STRING, "", ""}}, {"DownloadAllModels", {CLEAR_ON_MANAGER_START, BOOL, "0", "0"}}, {"DownloadMaps", {CLEAR_ON_MANAGER_START, BOOL, "0", "0"}}, - {"DriverCamera", {PERSISTENT, BOOL, "0", "0", 1}}, + {"DriverCamera", {PERSISTENT, BOOL, "0", "0", 1, SETTINGS_SIMPLE}}, {"Model", {PERSISTENT, STRING, "sc2", "sc2", 1}}, {"ModelVersion", {PERSISTENT, STRING, "v11", "v11", 1}}, {"DrivingModel", {PERSISTENT, STRING, "sc2", "sc2", 1}}, {"DrivingModelName", {PERSISTENT, STRING, "South Carolina", "South Carolina", 1}}, {"DrivingModelVersion", {PERSISTENT, STRING, "v11", "v11", 1}}, - {"DynamicPathWidth", {PERSISTENT, BOOL, "0", "0", 2}}, - {"DynamicPedalsOnUI", {PERSISTENT, BOOL, "1", "0", 1}}, - {"EngageVolume", {PERSISTENT, INT, "101", "101", 2}}, + {"DynamicPathWidth", {PERSISTENT, BOOL, "0", "0", 2, SETTINGS_SIMPLE}}, + {"DynamicPedalsOnUI", {PERSISTENT, BOOL, "1", "0", 1, SETTINGS_SIMPLE}}, + {"EngageVolume", {PERSISTENT, INT, "101", "101", 2, SETTINGS_SIMPLE}}, {"EVTuning", {PERSISTENT, BOOL, "0", "0", 3}}, {"Fahrenheit", {PERSISTENT, BOOL, "0", "0", 3}}, {"FlashPanda", {CLEAR_ON_MANAGER_START, BOOL, "0", "0"}}, - {"GMDashSpoofOffsets", {PERSISTENT, BOOL, "0", "0", 2}}, - {"GMPedalLongitudinal", {PERSISTENT, BOOL, "1", "1", 2}}, - {"HKGRemoteStartBootsComma", {PERSISTENT, BOOL, "0", "0"}}, - {"IgnoreIgnitionLine", {PERSISTENT, BOOL, "0", "0"}}, - {"LongPitch", {PERSISTENT, BOOL, "1", "0", 2}}, - {"RemoteStartBootsComma", {PERSISTENT, BOOL, "0", "0"}}, - {"RemapCancelToDistance", {PERSISTENT, BOOL, "0", "0"}}, - {"NAPAdaptiveAccel", {PERSISTENT, BOOL, "1", "1"}}, + {"GMDashSpoofOffsets", {PERSISTENT, BOOL, "0", "0", 2, SETTINGS_SIMPLE}}, + {"GMPedalLongitudinal", {PERSISTENT, BOOL, "1", "1", 2, SETTINGS_SIMPLE}}, + {"HKGRemoteStartBootsComma", {PERSISTENT, BOOL, "0", "0", 0, SETTINGS_SIMPLE}}, + {"IgnoreIgnitionLine", {PERSISTENT, BOOL, "0", "0", 0, SETTINGS_SIMPLE}}, + {"LongPitch", {PERSISTENT, BOOL, "1", "0", 2, SETTINGS_SIMPLE}}, + {"RemoteStartBootsComma", {PERSISTENT, BOOL, "0", "0", 0, SETTINGS_SIMPLE}}, + {"RemapCancelToDistance", {PERSISTENT, BOOL, "0", "0", 0, SETTINGS_SIMPLE}}, + {"NAPAdaptiveAccel", {PERSISTENT, BOOL, "1", "1", 0, SETTINGS_SIMPLE}}, {"NAPFollowDistance", {PERSISTENT, INT, "4", "4"}}, {"NAPForcePreAP", {PERSISTENT, BOOL, "0", "0"}}, - {"NAPPedalEnabled", {PERSISTENT, BOOL, "0", "0"}}, - {"NAPPedalCanBus", {PERSISTENT, INT, "2", "2"}}, - {"NAPPedalCalibDone", {PERSISTENT, BOOL, "0", "0"}}, + {"NAPPedalEnabled", {PERSISTENT, BOOL, "0", "0", 0, SETTINGS_SIMPLE}}, + {"NAPPedalCanBus", {PERSISTENT, INT, "2", "2", 0, SETTINGS_SIMPLE}}, + {"NAPPedalCalibDone", {PERSISTENT, BOOL, "0", "0", 0, SETTINGS_SIMPLE}}, {"NAPPedalCalibMin", {PERSISTENT, FLOAT, "-3.0", "-3.0"}}, {"NAPPedalCalibMax", {PERSISTENT, FLOAT, "99.6", "99.6"}}, - {"NAPPedalCalibFactor", {PERSISTENT, FLOAT, "1.0", "1.0"}}, - {"NAPPedalCalibZero", {PERSISTENT, FLOAT, "0.0", "0.0"}}, + {"NAPPedalCalibFactor", {PERSISTENT, FLOAT, "1.0", "1.0", 0, SETTINGS_SIMPLE}}, + {"NAPPedalCalibZero", {PERSISTENT, FLOAT, "0.0", "0.0", 0, SETTINGS_SIMPLE}}, {"NAPPedalProfile", {PERSISTENT, INT, "4", "4"}}, - {"NAPRadarBehindNosecone", {PERSISTENT, BOOL, "0", "0"}}, - {"NAPRadarEnabled", {PERSISTENT, BOOL, "0", "0"}}, - {"NAPRadarOffset", {PERSISTENT, FLOAT, "0.0", "0.0"}}, + {"NAPRadarBehindNosecone", {PERSISTENT, BOOL, "0", "0", 0, SETTINGS_SIMPLE}}, + {"NAPRadarEnabled", {PERSISTENT, BOOL, "0", "0", 0, SETTINGS_SIMPLE}}, + {"NAPRadarOffset", {PERSISTENT, FLOAT, "0.0", "0.0", 0, SETTINGS_SIMPLE}}, {"ForceAutoTune", {PERSISTENT, BOOL, "0", "0", 3}}, {"ForceAutoTuneOff", {PERSISTENT, BOOL, "1", "0", 2}}, - {"ForceFingerprint", {PERSISTENT, BOOL, "0", "0", 2}}, + {"ForceFingerprint", {PERSISTENT, BOOL, "0", "0", 2, SETTINGS_SIMPLE}}, {"ForceOffroad", {CLEAR_ON_MANAGER_START, BOOL, "0", "0"}}, {"ForceOnroad", {CLEAR_ON_MANAGER_START, BOOL, "0", "0"}}, - {"ForceStops", {PERSISTENT, BOOL, "1", "0", 2}}, - {"ForceStopDistanceOffset", {PERSISTENT, INT, "0", "0", 2}}, - {"ForceStandstill", {PERSISTENT, BOOL, "0", "0", 2}}, + {"ForceStops", {PERSISTENT, BOOL, "1", "0", 2, SETTINGS_SIMPLE}}, + {"ForceStopDistanceOffset", {PERSISTENT, INT, "0", "0", 2, SETTINGS_SIMPLE}}, + {"ForceStandstill", {PERSISTENT, BOOL, "0", "0", 2, SETTINGS_SIMPLE}}, {"ForceTorqueController", {PERSISTENT, BOOL, "0", "0", 3}}, {"FLMActiveOverrides", {PERSISTENT, JSON, "{}", "{}", 2}}, {"FLMActiveProfileId", {PERSISTENT, STRING, "", "", 2}}, @@ -333,68 +334,67 @@ inline static std::unordered_map keys = { {"StarPilotStats", {PERSISTENT | DONT_LOG, JSON, "{}", "{}"}}, {"StarPilotTogglesUpdated", {CLEAR_ON_MANAGER_START, BOOL, "0", "0"}}, {"FrogsGoMoosTweak", {PERSISTENT, BOOL, "1", "0", 2}}, - {"GoatScream", {PERSISTENT, BOOL, "0", "0", 1}}, - {"GoatScreamCriticalAlerts", {PERSISTENT, BOOL, "0", "0", 1}}, - {"GreenLightAlert", {PERSISTENT, BOOL, "0", "0", 0}}, - {"HideAlerts", {PERSISTENT, BOOL, "0", "0", 2}}, - {"HideChangingLanesBanner", {PERSISTENT, BOOL, "0", "0", 2}}, - {"HideDistanceProfileBanner", {PERSISTENT, BOOL, "0", "0", 2}}, - {"HideTurningBanner", {PERSISTENT, BOOL, "0", "0", 2}}, - {"HideDMIcon", {PERSISTENT, BOOL, "0", "0", 2}}, + {"GoatScream", {PERSISTENT, BOOL, "0", "0", 1, SETTINGS_SIMPLE}}, + {"GoatScreamCriticalAlerts", {PERSISTENT, BOOL, "0", "0", 1, SETTINGS_SIMPLE}}, + {"GreenLightAlert", {PERSISTENT, BOOL, "0", "0", 0, SETTINGS_SIMPLE}}, + {"HideAlerts", {PERSISTENT, BOOL, "0", "0", 2, SETTINGS_SIMPLE}}, + {"HideChangingLanesBanner", {PERSISTENT, BOOL, "0", "0", 2, SETTINGS_SIMPLE}}, + {"HideDistanceProfileBanner", {PERSISTENT, BOOL, "0", "0", 2, SETTINGS_SIMPLE}}, + {"HideTurningBanner", {PERSISTENT, BOOL, "0", "0", 2, SETTINGS_SIMPLE}}, + {"HideDMIcon", {PERSISTENT, BOOL, "0", "0", 2, SETTINGS_SIMPLE}}, {"HideLeadMarker", {PERSISTENT, BOOL, "0", "0", 2}}, - {"HideMaxSpeed", {PERSISTENT, BOOL, "0", "0", 2}}, - {"HideSpeed", {PERSISTENT, BOOL, "0", "0", 2}}, - {"HideSpeedLimit", {PERSISTENT, BOOL, "0", "0", 2}}, - {"HideSteeringWheel", {PERSISTENT, BOOL, "0", "0", 2}}, - {"HigherBitrate", {PERSISTENT, BOOL, "0", "0", 2}}, - {"HolidayThemes", {PERSISTENT, BOOL, "1", "0", 0}}, - {"HumanAcceleration", {PERSISTENT, BOOL, "0", "0", 2}}, - {"HumanLaneChanges", {PERSISTENT, BOOL, "0", "0", 2}}, + {"HideMaxSpeed", {PERSISTENT, BOOL, "0", "0", 2, SETTINGS_SIMPLE}}, + {"HideSpeed", {PERSISTENT, BOOL, "0", "0", 2, SETTINGS_SIMPLE}}, + {"HideSpeedLimit", {PERSISTENT, BOOL, "0", "0", 2, SETTINGS_SIMPLE}}, + {"HideSteeringWheel", {PERSISTENT, BOOL, "0", "0", 2, SETTINGS_SIMPLE}}, + {"HigherBitrate", {PERSISTENT, BOOL, "0", "0", 2, SETTINGS_SIMPLE}}, + {"HolidayThemes", {PERSISTENT, BOOL, "1", "0", 0, SETTINGS_SIMPLE}}, + {"HumanLaneChanges", {PERSISTENT, BOOL, "0", "0", 2, SETTINGS_SIMPLE}}, {"IconPack", {PERSISTENT, STRING, "stock", "stock", 0}}, {"IconToDownload", {CLEAR_ON_MANAGER_START, STRING, "", ""}}, - {"IncreasedStoppedDistance", {PERSISTENT, FLOAT, "0.0", "0.0", 1}}, - {"IncreasedStoppedDistanceLowVisibility", {PERSISTENT, FLOAT, "0.0", "0.0", 2}}, - {"IncreasedStoppedDistanceRain", {PERSISTENT, FLOAT, "0.0", "0.0", 2}}, - {"IncreasedStoppedDistanceRainStorm", {PERSISTENT, FLOAT, "0.0", "0.0", 2}}, - {"IncreasedStoppedDistanceSnow", {PERSISTENT, FLOAT, "0.0", "0.0", 2}}, - {"RedneckCruise", {PERSISTENT, BOOL, "0", "0", 1}}, - {"IncreaseFollowingLowVisibility", {PERSISTENT, FLOAT, "0.0", "0.0", 2}}, - {"IncreaseFollowingRain", {PERSISTENT, FLOAT, "0.0", "0.0", 2}}, - {"IncreaseFollowingRainStorm", {PERSISTENT, FLOAT, "0.0", "0.0", 2}}, - {"IncreaseFollowingSnow", {PERSISTENT, FLOAT, "0.0", "0.0", 2}}, - {"IncreaseThermalLimits", {PERSISTENT, BOOL, "0", "0", 2}}, + {"IncreasedStoppedDistance", {PERSISTENT, FLOAT, "0.0", "0.0", 1, SETTINGS_SIMPLE}}, + {"IncreasedStoppedDistanceLowVisibility", {PERSISTENT, FLOAT, "0.0", "0.0", 2, SETTINGS_SIMPLE}}, + {"IncreasedStoppedDistanceRain", {PERSISTENT, FLOAT, "0.0", "0.0", 2, SETTINGS_SIMPLE}}, + {"IncreasedStoppedDistanceRainStorm", {PERSISTENT, FLOAT, "0.0", "0.0", 2, SETTINGS_SIMPLE}}, + {"IncreasedStoppedDistanceSnow", {PERSISTENT, FLOAT, "0.0", "0.0", 2, SETTINGS_SIMPLE}}, + {"RedneckCruise", {PERSISTENT, BOOL, "0", "0", 1, SETTINGS_SIMPLE}}, + {"IncreaseFollowingLowVisibility", {PERSISTENT, FLOAT, "0.0", "0.0", 2, SETTINGS_SIMPLE}}, + {"IncreaseFollowingRain", {PERSISTENT, FLOAT, "0.0", "0.0", 2, SETTINGS_SIMPLE}}, + {"IncreaseFollowingRainStorm", {PERSISTENT, FLOAT, "0.0", "0.0", 2, SETTINGS_SIMPLE}}, + {"IncreaseFollowingSnow", {PERSISTENT, FLOAT, "0.0", "0.0", 2, SETTINGS_SIMPLE}}, + {"IncreaseThermalLimits", {PERSISTENT, BOOL, "0", "0", 2, SETTINGS_SIMPLE}}, {"IssueReported", {CLEAR_ON_MANAGER_START, JSON, "{}", "{}"}}, {"KonikDongleId", {PERSISTENT, STRING, "", "", 0}}, {"KonikMinutes", {PERSISTENT, INT, "0", "0", 0}}, - {"LaneChanges", {PERSISTENT, BOOL, "1", "1", 0}}, - {"LaneChangeSmoothing", {PERSISTENT, INT, "10", "10", 1}}, - {"LaneChangeTime", {PERSISTENT, FLOAT, "1.0", "0.0", 1}}, - {"LaneDetectionWidth", {PERSISTENT, FLOAT, "0.0", "0.0", 1}}, - {"LaneLinesColor", {PERSISTENT, STRING, "", "", 2}}, - {"LaneLinesWidth", {PERSISTENT, FLOAT, "4.0", "2.0", 2}}, + {"LaneChanges", {PERSISTENT, BOOL, "1", "1", 0, SETTINGS_SIMPLE}}, + {"LaneChangeSmoothing", {PERSISTENT, INT, "10", "10", 1, SETTINGS_SIMPLE}}, + {"LaneChangeTime", {PERSISTENT, FLOAT, "1.0", "0.0", 1, SETTINGS_SIMPLE}}, + {"LaneDetectionWidth", {PERSISTENT, FLOAT, "0.0", "0.0", 1, SETTINGS_SIMPLE}}, + {"LaneLinesColor", {PERSISTENT, STRING, "", "", 2, SETTINGS_SIMPLE}}, + {"LaneLinesWidth", {PERSISTENT, FLOAT, "4.0", "2.0", 2, SETTINGS_SIMPLE}}, {"LastMapsUpdate", {PERSISTENT, STRING, "", ""}}, {"LateralTune", {PERSISTENT, BOOL, "1", "0", 1}}, - {"LeadDepartingAlert", {PERSISTENT, BOOL, "0", "0", 0}}, + {"LeadDepartingAlert", {PERSISTENT, BOOL, "0", "0", 0, SETTINGS_SIMPLE}}, {"LeadDetectionThreshold", {PERSISTENT, INT, "35", "50", 3}}, - {"LeadIndicator", {PERSISTENT, BOOL, "0", "0", 2}}, + {"LeadIndicator", {PERSISTENT, BOOL, "0", "0", 2, SETTINGS_SIMPLE}}, {"LeadInfo", {PERSISTENT, BOOL, "1", "0", 3}}, - {"LKASButtonControl", {PERSISTENT, INT, "5", "0", 2}}, + {"LKASButtonControl", {PERSISTENT, INT, "5", "0", 2, SETTINGS_SIMPLE}}, {"LockDoors", {PERSISTENT, BOOL, "1", "0", 0}}, {"LockDoorsTimer", {PERSISTENT, INT, "0", "0", 0}}, - {"LongCancelButtonControl", {PERSISTENT, INT, "5", "0", 2}}, - {"LongDistanceButtonControl", {PERSISTENT, INT, "5", "0", 2}}, - {"LongModeButtonControl", {PERSISTENT, INT, "0", "0", 2}}, - {"LongStarButtonControl", {PERSISTENT, INT, "0", "0", 2}}, + {"LongCancelButtonControl", {PERSISTENT, INT, "5", "0", 2, SETTINGS_SIMPLE}}, + {"LongDistanceButtonControl", {PERSISTENT, INT, "5", "0", 2, SETTINGS_SIMPLE}}, + {"LongModeButtonControl", {PERSISTENT, INT, "0", "0", 2, SETTINGS_SIMPLE}}, + {"LongStarButtonControl", {PERSISTENT, INT, "0", "0", 2, SETTINGS_SIMPLE}}, {"LongitudinalActuatorDelay", {PERSISTENT, FLOAT, "0.0", "0.0", 3}}, {"LongitudinalActuatorDelayStock", {PERSISTENT, FLOAT, "0.0", "0.0", 3}}, {"LateralManeuverStatus", {CLEAR_ON_MANAGER_START | CLEAR_ON_OFFROAD_TRANSITION, JSON, "{}", "{}"}}, {"LongitudinalManeuverPaddleMode", {PERSISTENT, STRING, "auto", "auto"}}, {"LongitudinalManeuverStatus", {CLEAR_ON_MANAGER_START | CLEAR_ON_OFFROAD_TRANSITION, JSON, "{}", "{}"}}, - {"LongitudinalTune", {PERSISTENT, BOOL, "1", "0", 0}}, - {"LoudBlindspotAlert", {PERSISTENT, BOOL, "0", "0", 0}}, - {"LoudBlindspotAlertWhenDisengaged", {PERSISTENT, BOOL, "0", "0", 0}}, - {"LowVoltageShutdown", {PERSISTENT, FLOAT, "11.8", "11.8", 3}}, - {"MainCruiseButtonControl", {PERSISTENT, INT, "0", "0", 2}}, + {"LongitudinalTune", {PERSISTENT, BOOL, "1", "0", 0, SETTINGS_SIMPLE}}, + {"LoudBlindspotAlert", {PERSISTENT, BOOL, "0", "0", 0, SETTINGS_SIMPLE}}, + {"LoudBlindspotAlertWhenDisengaged", {PERSISTENT, BOOL, "0", "0", 0, SETTINGS_SIMPLE}}, + {"LowVoltageShutdown", {PERSISTENT, FLOAT, "11.8", "11.8", 3, SETTINGS_SIMPLE}}, + {"MainCruiseButtonControl", {PERSISTENT, INT, "0", "0", 2, SETTINGS_SIMPLE}}, {"ManualUpdateInitiated", {CLEAR_ON_MANAGER_START, BOOL, "0", "0"}}, {"AMapKey1", {PERSISTENT | DONT_LOG, STRING, "", "", 0}}, {"AMapKey2", {PERSISTENT | DONT_LOG, STRING, "", "", 0}}, @@ -406,13 +406,13 @@ inline static std::unordered_map keys = { {"MapboxSecretKey", {PERSISTENT | DONT_LOG, STRING, "", "", 0}}, {"MapDeceleration", {PERSISTENT, BOOL, "0", "0", 1}}, {"MapdSettings", {PERSISTENT, JSON, "{}", "{}"}}, - {"MapGears", {PERSISTENT, BOOL, "0", "0", 2}}, + {"MapGears", {PERSISTENT, BOOL, "0", "0", 2, SETTINGS_SIMPLE}}, {"MapsSelected", {PERSISTENT, STRING, "", "", 0}}, {"MapSpeedLimit", {CLEAR_ON_MANAGER_START, FLOAT, "0.0", "0.0"}}, {"NavDesiresAllowed", {PERSISTENT, BOOL, "1", "0", 2}}, {"NavLongitudinalAllowed", {PERSISTENT, BOOL, "1", "0", 2}}, - {"ClearNavOnOffroad", {PERSISTENT, BOOL, "1", "1", 2}}, - {"ClearNavOnOffroadTimeoutMinutes", {PERSISTENT, INT, "0", "0", 2}}, + {"ClearNavOnOffroad", {PERSISTENT, BOOL, "1", "1", 2, SETTINGS_SIMPLE}}, + {"ClearNavOnOffroadTimeoutMinutes", {PERSISTENT, INT, "0", "0", 2, SETTINGS_SIMPLE}}, {"NavDestination", {PERSISTENT | CLEAR_ON_MANAGER_START, STRING, "", ""}}, {"NavInstructionCollapsed", {CLEAR_ON_MANAGER_START | CLEAR_ON_OFFROAD_TRANSITION, BOOL, "0", "0"}}, {"NavInstructionState", {CLEAR_ON_MANAGER_START | CLEAR_ON_OFFROAD_TRANSITION, JSON, "{}", "{}"}}, @@ -426,26 +426,26 @@ inline static std::unordered_map keys = { {"VisionSpeedLimitStream", {CLEAR_ON_MANAGER_START, STRING, "", ""}}, {"MaxDesiredAcceleration", {PERSISTENT, FLOAT, "4.0", "2.0", 2}}, {"MinimumBackupSize", {PERSISTENT, INT, "0", "0"}}, - {"MinimumLaneChangeSpeed", {PERSISTENT, FLOAT, "20.0", "20.0", 2}}, - {"ModeButtonControl", {PERSISTENT, INT, "0", "0", 2}}, + {"MinimumLaneChangeSpeed", {PERSISTENT, FLOAT, "20.0", "20.0", 2, SETTINGS_SIMPLE}}, + {"ModeButtonControl", {PERSISTENT, INT, "0", "0", 2, SETTINGS_SIMPLE}}, {"ModelDownloadProgress", {CLEAR_ON_MANAGER_START, STRING, "", ""}}, {"ModelDrivesAndScores", {PERSISTENT, JSON, "{}", "{}"}}, {"ModelReleasedDates", {PERSISTENT, STRING, "", "", 1}}, {"ModelRandomizer", {PERSISTENT, BOOL, "0", "0", 2}}, {"ModelSortMode", {PERSISTENT, STRING, "alphabetical", "alphabetical", 1}}, {"ModelToDownload", {CLEAR_ON_MANAGER_START, STRING, "", ""}}, - {"ModelUI", {PERSISTENT, BOOL, "1", "0", 2}}, + {"ModelUI", {PERSISTENT, BOOL, "1", "0", 2, SETTINGS_SIMPLE}}, {"ModelVersions", {PERSISTENT, STRING, "", "", 1}}, {"ModelManifestVersion", {PERSISTENT, STRING, "", "", 1}}, - {"NavigationUI", {PERSISTENT, BOOL, "1", "0", 1}}, + {"NavigationUI", {PERSISTENT, BOOL, "1", "0", 1, SETTINGS_SIMPLE}}, {"NNFF", {PERSISTENT, BOOL, "0", "0", 2}}, {"NNFFLite", {PERSISTENT, BOOL, "0", "0", 2}}, - {"NostalgiaMode", {PERSISTENT, BOOL, "0", "0", 2}}, + {"NostalgiaMode", {PERSISTENT, BOOL, "0", "0", 2, SETTINGS_SIMPLE}}, {"NNFFModelName", {CLEAR_ON_MANAGER_START, STRING, "", "", 0}}, - {"NoLogging", {PERSISTENT, BOOL, "0", "0", 2}}, - {"NoUploads", {PERSISTENT, BOOL, "0", "0", 2}}, - {"NudgelessLaneChange", {PERSISTENT, BOOL, "0", "0", 0}}, - {"NudgelessLaneChangeOnlyWhenEngaged", {PERSISTENT, BOOL, "0", "0", 1}}, + {"NoLogging", {PERSISTENT, BOOL, "0", "0", 2, SETTINGS_SIMPLE}}, + {"NoUploads", {PERSISTENT, BOOL, "0", "0", 2, SETTINGS_SIMPLE}}, + {"NudgelessLaneChange", {PERSISTENT, BOOL, "0", "0", 0, SETTINGS_SIMPLE}}, + {"NudgelessLaneChangeOnlyWhenEngaged", {PERSISTENT, BOOL, "0", "0", 1, SETTINGS_SIMPLE}}, {"NumericalTemp", {PERSISTENT, BOOL, "0", "0", 3}}, {"Offset1", {PERSISTENT, FLOAT, "5.0", "0.0", 0}}, {"Offset2", {PERSISTENT, FLOAT, "5.0", "0.0", 0}}, @@ -454,45 +454,45 @@ inline static std::unordered_map keys = { {"Offset5", {PERSISTENT, FLOAT, "10.0", "0.0", 0}}, {"Offset6", {PERSISTENT, FLOAT, "10.0", "0.0", 0}}, {"Offset7", {PERSISTENT, FLOAT, "10.0", "0.0", 0}}, - {"OneLaneChange", {PERSISTENT, BOOL, "1", "0", 2}}, - {"OnroadDistanceButton", {PERSISTENT, BOOL, "0", "0", 0}}, + {"OneLaneChange", {PERSISTENT, BOOL, "1", "0", 2, SETTINGS_SIMPLE}}, + {"OnroadDistanceButton", {PERSISTENT, BOOL, "0", "0", 0, SETTINGS_SIMPLE}}, {"OnroadDistanceButtonPressed", {CLEAR_ON_MANAGER_START, BOOL, "0", "0"}}, {"WheelButtonBookmarkCounter", {CLEAR_ON_MANAGER_START, INT, "0", "0"}}, {"openpilotMinutes", {PERSISTENT, INT, "0", "0", 0}}, {"OverpassRequests", {PERSISTENT, JSON, "{}", "{}"}}, - {"PathColor", {PERSISTENT, STRING, "", "", 2}}, - {"PathEdgesColor", {PERSISTENT, STRING, "", "", 2}}, - {"PathEdgeWidth", {PERSISTENT, FLOAT, "20.0", "0.0", 2}}, - {"PathWidth", {PERSISTENT, FLOAT, "6.1", "5.9", 2}}, - {"PauseAOLOnBrake", {PERSISTENT, BOOL, "0", "0", 1}}, - {"PauseLateralOnSignal", {PERSISTENT, BOOL, "0", "0", 1}}, - {"PauseLateralSpeed", {PERSISTENT, FLOAT, "0.0", "0.0", 1}}, - {"LateralResumeDelay", {PERSISTENT, FLOAT, "0.0", "0.0", 1}}, - {"PedalsOnUI", {PERSISTENT, BOOL, "0", "0", 1}}, + {"PathColor", {PERSISTENT, STRING, "", "", 2, SETTINGS_SIMPLE}}, + {"PathEdgesColor", {PERSISTENT, STRING, "", "", 2, SETTINGS_SIMPLE}}, + {"PathEdgeWidth", {PERSISTENT, FLOAT, "20.0", "0.0", 2, SETTINGS_SIMPLE}}, + {"PathWidth", {PERSISTENT, FLOAT, "6.1", "5.9", 2, SETTINGS_SIMPLE}}, + {"PauseAOLOnBrake", {PERSISTENT, BOOL, "0", "0", 1, SETTINGS_SIMPLE}}, + {"PauseLateralOnSignal", {PERSISTENT, BOOL, "0", "0", 1, SETTINGS_SIMPLE}}, + {"PauseLateralSpeed", {PERSISTENT, FLOAT, "0.0", "0.0", 1, SETTINGS_SIMPLE}}, + {"LateralResumeDelay", {PERSISTENT, FLOAT, "0.0", "0.0", 1, SETTINGS_SIMPLE}}, + {"PedalsOnUI", {PERSISTENT, BOOL, "0", "0", 1, SETTINGS_SIMPLE}}, {"GalaxyPaired", {PERSISTENT, BOOL, "0", "0", 0}}, {"GalaxyUploadPending", {PERSISTENT, BOOL, "0", "0", 0}}, {"PreferredSchedule", {PERSISTENT, INT, "2", "0", 0}}, {"PreviousSpeedLimit", {PERSISTENT, FLOAT, "0.0", "0.0"}}, - {"PromptDistractedVolume", {PERSISTENT, INT, "101", "101", 2}}, - {"PromptVolume", {PERSISTENT, INT, "101", "101", 2}}, - {"QOLLateral", {PERSISTENT, BOOL, "1", "0", 1}}, - {"QOLLongitudinal", {PERSISTENT, BOOL, "1", "0", 1}}, - {"QOLVisuals", {PERSISTENT, BOOL, "1", "0", 0}}, - {"RadarTakeoffs", {PERSISTENT, BOOL, "0", "0", 2}}, + {"PromptDistractedVolume", {PERSISTENT, INT, "101", "101", 2, SETTINGS_SIMPLE}}, + {"PromptVolume", {PERSISTENT, INT, "101", "101", 2, SETTINGS_SIMPLE}}, + {"QOLLateral", {PERSISTENT, BOOL, "1", "0", 1, SETTINGS_SIMPLE}}, + {"QOLLongitudinal", {PERSISTENT, BOOL, "1", "0", 1, SETTINGS_SIMPLE}}, + {"QOLVisuals", {PERSISTENT, BOOL, "1", "0", 0, SETTINGS_SIMPLE}}, + {"RadarTakeoffs", {PERSISTENT, BOOL, "0", "0", 2, SETTINGS_SIMPLE}}, {"RadarTracksUI", {PERSISTENT, BOOL, "0", "0", 3}}, - {"RainbowPath", {PERSISTENT, BOOL, "0", "0", 1}}, + {"RainbowPath", {PERSISTENT, BOOL, "0", "0", 1, SETTINGS_SIMPLE}}, {"RandomEvents", {PERSISTENT, BOOL, "0", "0", 1}}, {"RandomThemes", {PERSISTENT, BOOL, "0", "0", 1}}, {"RandomThemesHolidays", {PERSISTENT, BOOL, "0", "0", 1}}, - {"ReduceAccelerationLowVisibility", {PERSISTENT, INT, "0", "0", 2}}, - {"ReduceAccelerationRain", {PERSISTENT, INT, "0", "0", 2}}, - {"ReduceAccelerationRainStorm", {PERSISTENT, INT, "0", "0", 2}}, - {"ReduceAccelerationSnow", {PERSISTENT, INT, "0", "0", 2}}, - {"ReduceLateralAccelerationLowVisibility", {PERSISTENT, INT, "0", "0", 2}}, - {"ReduceLateralAccelerationRain", {PERSISTENT, INT, "0", "0", 2}}, - {"ReduceLateralAccelerationRainStorm", {PERSISTENT, INT, "0", "0", 2}}, - {"ReduceLateralAccelerationSnow", {PERSISTENT, INT, "0", "0", 2}}, - {"RefuseVolume", {PERSISTENT, INT, "101", "101", 2}}, + {"ReduceAccelerationLowVisibility", {PERSISTENT, INT, "0", "0", 2, SETTINGS_SIMPLE}}, + {"ReduceAccelerationRain", {PERSISTENT, INT, "0", "0", 2, SETTINGS_SIMPLE}}, + {"ReduceAccelerationRainStorm", {PERSISTENT, INT, "0", "0", 2, SETTINGS_SIMPLE}}, + {"ReduceAccelerationSnow", {PERSISTENT, INT, "0", "0", 2, SETTINGS_SIMPLE}}, + {"ReduceLateralAccelerationLowVisibility", {PERSISTENT, INT, "0", "0", 2, SETTINGS_SIMPLE}}, + {"ReduceLateralAccelerationRain", {PERSISTENT, INT, "0", "0", 2, SETTINGS_SIMPLE}}, + {"ReduceLateralAccelerationRainStorm", {PERSISTENT, INT, "0", "0", 2, SETTINGS_SIMPLE}}, + {"ReduceLateralAccelerationSnow", {PERSISTENT, INT, "0", "0", 2, SETTINGS_SIMPLE}}, + {"RefuseVolume", {PERSISTENT, INT, "101", "101", 2, SETTINGS_SIMPLE}}, {"RelaxedFollow", {PERSISTENT, FLOAT, "1.6", "1.6", 2}}, {"RelaxedFollowHigh", {PERSISTENT, FLOAT, "1.4", "1.4", 2}}, {"RelaxedJerkAcceleration", {PERSISTENT, FLOAT, "100.0", "100.0", 3}}, @@ -502,31 +502,31 @@ inline static std::unordered_map keys = { {"RelaxedJerkSpeedDecrease", {PERSISTENT, FLOAT, "100.0", "100.0", 3}}, {"ReverseCruise", {PERSISTENT, BOOL, "0", "0", 1}}, {"RecoveryPower", {PERSISTENT, FLOAT, "1.0", "1.0", 2}}, - {"RoadEdgesWidth", {PERSISTENT, FLOAT, "2.0", "2.0", 2}}, - {"RoadNameUI", {PERSISTENT, BOOL, "1", "0", 1}}, - {"RotatingWheel", {PERSISTENT, BOOL, "1", "0", 1}}, - {"ScreenBrightness", {PERSISTENT, INT, "101", "101", 2}}, - {"ScreenBrightnessOnroad", {PERSISTENT, INT, "101", "101", 2}}, - {"ScreenManagement", {PERSISTENT, BOOL, "1", "0", 1}}, - {"ScreenRecorder", {PERSISTENT, BOOL, "1", "0", 2}}, - {"ScreenTimeout", {PERSISTENT, INT, "30", "30", 2}}, - {"ScreenTimeoutOnroad", {PERSISTENT, INT, "30", "10", 2}}, + {"RoadEdgesWidth", {PERSISTENT, FLOAT, "2.0", "2.0", 2, SETTINGS_SIMPLE}}, + {"RoadNameUI", {PERSISTENT, BOOL, "1", "0", 1, SETTINGS_SIMPLE}}, + {"RotatingWheel", {PERSISTENT, BOOL, "1", "0", 1, SETTINGS_SIMPLE}}, + {"ScreenBrightness", {PERSISTENT, INT, "101", "101", 2, SETTINGS_SIMPLE}}, + {"ScreenBrightnessOnroad", {PERSISTENT, INT, "101", "101", 2, SETTINGS_SIMPLE}}, + {"ScreenManagement", {PERSISTENT, BOOL, "1", "0", 1, SETTINGS_SIMPLE}}, + {"ScreenRecorder", {PERSISTENT, BOOL, "1", "0", 2, SETTINGS_SIMPLE}}, + {"ScreenTimeout", {PERSISTENT, INT, "30", "30", 2, SETTINGS_SIMPLE}}, + {"ScreenTimeoutOnroad", {PERSISTENT, INT, "30", "10", 2, SETTINGS_SIMPLE}}, {"SecOCKeys", {PERSISTENT | DONT_LOG, STRING, "", "", 0}}, {"SafeMode", {PERSISTENT, BOOL, "0", "0", 0}}, {"SafeModeBackup", {PERSISTENT, JSON, "{}", "{}"}}, {"SetSpeedLimit", {PERSISTENT, BOOL, "0", "0", 1}}, - {"SetSpeedOffset", {PERSISTENT, FLOAT, "0.0", "0.0", 2}}, - {"ShowCEMStatus", {PERSISTENT, BOOL, "1", "0", 2}}, + {"SetSpeedOffset", {PERSISTENT, FLOAT, "0.0", "0.0", 2, SETTINGS_SIMPLE}}, + {"ShowCEMStatus", {PERSISTENT, BOOL, "1", "0", 2, SETTINGS_SIMPLE}}, {"ShowCCMStatus", {PERSISTENT, BOOL, "0", "0", 2}}, {"ShowCPU", {PERSISTENT, BOOL, "0", "0", 3}}, - {"ShowCSCStatus", {PERSISTENT, BOOL, "1", "0", 2}}, + {"ShowCSCStatus", {PERSISTENT, BOOL, "1", "0", 2, SETTINGS_SIMPLE}}, {"ShowGPU", {PERSISTENT, BOOL, "0", "0", 3}}, {"ShowIP", {PERSISTENT, BOOL, "0", "0", 3}}, {"ShowMemoryUsage", {PERSISTENT, BOOL, "0", "0", 3}}, - {"ShowModeStatusBanner", {PERSISTENT, BOOL, "1", "0", 2}}, + {"ShowModeStatusBanner", {PERSISTENT, BOOL, "1", "0", 2, SETTINGS_SIMPLE}}, {"ShownToggleDescriptions", {PERSISTENT, JSON, "{}", "{}"}}, {"ShowSLCOffset", {PERSISTENT, BOOL, "1", "0", 0}}, - {"ShowSpeedLimits", {PERSISTENT, BOOL, "1", "0", 1}}, + {"ShowSpeedLimits", {PERSISTENT, BOOL, "1", "0", 1, SETTINGS_SIMPLE}}, {"ShowSteering", {PERSISTENT, BOOL, "0", "0", 3}}, {"ShowStoppingPoint", {PERSISTENT, BOOL, "1", "0", 3}}, {"ShowStoppingPointMetrics", {PERSISTENT, BOOL, "1", "0", 3}}, @@ -537,7 +537,7 @@ inline static std::unordered_map keys = { {"SignalAnimation", {PERSISTENT, STRING, "stock", "stock", 0}}, {"SignalMetrics", {PERSISTENT, BOOL, "0", "0", 3}}, {"SignalToDownload", {CLEAR_ON_MANAGER_START, STRING, "", ""}}, - {"SimpleMode", {PERSISTENT, BOOL, "0", "0", 0}}, + {"SimpleMode", {PERSISTENT, BOOL, "0", "0", 0, SETTINGS_SIMPLE}}, {"SLCAbbreviatedSources", {PERSISTENT, BOOL, "0", "0", 3}}, {"SLCActiveSourcesOnly", {PERSISTENT, BOOL, "0", "0", 3}}, {"SLCConfirmation", {PERSISTENT, BOOL, "0", "0", 0}}, @@ -546,18 +546,18 @@ inline static std::unordered_map keys = { {"SLCFallback", {PERSISTENT, INT, "2", "0", 1}}, {"SLCLookaheadHigher", {PERSISTENT, INT, "0", "0", 2}}, {"SLCLookaheadLower", {PERSISTENT, INT, "0", "0", 2}}, - {"SLCMapboxFiller", {PERSISTENT, BOOL, "1", "0", 1}}, + {"SLCMapboxFiller", {PERSISTENT, BOOL, "1", "0", 1, SETTINGS_SIMPLE}}, {"SLCOverride", {PERSISTENT, INT, "1", "0", 1}}, {"SLCPriority", {PERSISTENT, STRING, "", "", 2}}, {"SLCPriority1", {PERSISTENT, STRING, "Vision", "Map Data", 2}}, {"SLCPriority2", {PERSISTENT, STRING, "Map Data", "Dashboard", 2}}, - {"SNGHack", {PERSISTENT, BOOL, "1", "0", 2}}, + {"SNGHack", {PERSISTENT, BOOL, "1", "0", 2, SETTINGS_SIMPLE}}, {"SoundPack", {PERSISTENT, STRING, "stock", "stock", 0}}, {"SoundToDownload", {CLEAR_ON_MANAGER_START, STRING, "", ""}}, {"SLCAdoptSpeedLimit", {CLEAR_ON_MANAGER_START, BOOL, "0", "0"}}, {"SLCForceCruiseSpeed", {CLEAR_ON_MANAGER_START, FLOAT, "0.0", "0.0"}}, {"SpeedLimitAccepted", {CLEAR_ON_MANAGER_START, BOOL, "0", "0"}}, - {"SpeedLimitChangedAlert", {PERSISTENT, BOOL, "0", "0", 0}}, + {"SpeedLimitChangedAlert", {PERSISTENT, BOOL, "0", "0", 0, SETTINGS_SIMPLE}}, {"SpeedLimitController", {PERSISTENT, BOOL, "0", "0", 0}}, {"SpeedLimitFiller", {PERSISTENT, BOOL, "0", "0", 0}}, {"SpeedLimits", {PERSISTENT | DONT_LOG, JSON, "[]", "[]"}}, @@ -574,12 +574,12 @@ inline static std::unordered_map keys = { {"StandardJerkDeceleration", {PERSISTENT, FLOAT, "100.0", "100.0", 3}}, {"StandardJerkSpeed", {PERSISTENT, FLOAT, "100.0", "100.0", 3}}, {"StandardJerkSpeedDecrease", {PERSISTENT, FLOAT, "100.0", "100.0", 3}}, - {"StandbyMode", {PERSISTENT, BOOL, "0", "0", 1}}, + {"StandbyMode", {PERSISTENT, BOOL, "0", "0", 1, SETTINGS_SIMPLE}}, {"StartAccel", {PERSISTENT, FLOAT, "0.0", "0.0", 3}}, {"StartAccelStock", {PERSISTENT, FLOAT, "0.0", "0.0", 3}}, {"StartupMessageBottom", {PERSISTENT, STRING, "Always keep hands on wheel and eyes on road", "Always keep hands on wheel and eyes on road", 0}}, {"StartupMessageTop", {PERSISTENT, STRING, "Be ready to take over at any time", "Be ready to take over at any time", 0}}, - {"StaticPedalsOnUI", {PERSISTENT, BOOL, "0", "0", 1}}, + {"StaticPedalsOnUI", {PERSISTENT, BOOL, "0", "0", 1, SETTINGS_SIMPLE}}, {"SteerDelay", {PERSISTENT, FLOAT, "0.0", "0.0", 3}}, {"SteerDelayModeMigrated", {PERSISTENT, BOOL}}, {"SteerDelayStock", {PERSISTENT, FLOAT, "0.0", "0.0", 3}}, @@ -594,20 +594,20 @@ inline static std::unordered_map keys = { {"SteerRatio", {PERSISTENT, FLOAT, "0.0", "0.0", 3}}, {"SteerRatioStock", {PERSISTENT, FLOAT, "0.0", "0.0", 3}}, {"EnableTorqueBarWidget", {PERSISTENT, BOOL, "1", "0", 0}}, - {"StockConfidenceBallWidget", {PERSISTENT, BOOL, "0", "0", 0}}, + {"StockConfidenceBallWidget", {PERSISTENT, BOOL, "0", "0", 0, SETTINGS_SIMPLE}}, {"StockDongleId", {PERSISTENT, STRING, "", ""}}, {"StopAccel", {PERSISTENT, FLOAT, "0.0", "0.0", 3}}, {"StopAccelStock", {PERSISTENT, FLOAT, "0.0", "0.0", 3}}, - {"StoppedTimer", {PERSISTENT, BOOL, "0", "0", 1}}, + {"StoppedTimer", {PERSISTENT, BOOL, "0", "0", 1, SETTINGS_SIMPLE}}, {"StoppingDecelRate", {PERSISTENT, FLOAT, "0.0", "0.0", 3}}, {"StoppingDecelRateStock", {PERSISTENT, FLOAT, "0.0", "0.0", 3}}, - {"StarButtonControl", {PERSISTENT, INT, "0", "0", 2}}, - {"SwitchbackModeCooldown", {PERSISTENT, INT, "5", "0", 2}}, + {"StarButtonControl", {PERSISTENT, INT, "0", "0", 2, SETTINGS_SIMPLE}}, + {"SwitchbackModeCooldown", {PERSISTENT, INT, "5", "0", 2, SETTINGS_SIMPLE}}, {"SwitchbackModeEnabled", {CLEAR_ON_OFFROAD_TRANSITION, BOOL, "0", "0"}}, - {"SubaruSNG", {PERSISTENT, BOOL, "1", "0", 2}}, - {"SubaruSNGManualParkingBrake", {PERSISTENT, BOOL, "0", "0", 2}}, + {"SubaruSNG", {PERSISTENT, BOOL, "1", "0", 2, SETTINGS_SIMPLE}}, + {"SubaruSNGManualParkingBrake", {PERSISTENT, BOOL, "0", "0", 2, SETTINGS_SIMPLE}}, {"TacoTune", {PERSISTENT, BOOL, "0", "0", 2}}, - {"TeslaCoopSteering", {PERSISTENT, BOOL, "0", "0", 2}}, + {"TeslaCoopSteering", {PERSISTENT, BOOL, "0", "0", 2, SETTINGS_SIMPLE}}, {"TestAlert", {CLEAR_ON_MANAGER_START, STRING, "", ""}}, {"TetheringEnabled", {PERSISTENT, INT, "0", "0", 0}}, {"ThemeDownloadProgress", {CLEAR_ON_MANAGER_START, STRING, "", ""}}, @@ -634,29 +634,29 @@ inline static std::unordered_map keys = { {"UpdateWheelImage", {CLEAR_ON_MANAGER_START, BOOL, "0", "0"}}, {"UseActiveTheme", {CLEAR_ON_MANAGER_START, BOOL, "0", "0"}}, {"UseAutoSteerDelay", {PERSISTENT, BOOL, "1", "1", 3}}, - {"UseKonikServer", {PERSISTENT, BOOL, "0", "0", 2}}, + {"UseKonikServer", {PERSISTENT, BOOL, "0", "0", 2, SETTINGS_SIMPLE}}, {"UseSI", {PERSISTENT, BOOL, "1", "1", 3}}, {"UserFavorites", {PERSISTENT, STRING, "", "", 1}}, - {"UseVienna", {PERSISTENT, BOOL, "0", "0", 1}}, + {"UseVienna", {PERSISTENT, BOOL, "0", "0", 1, SETTINGS_SIMPLE}}, {"VEgoStarting", {PERSISTENT, FLOAT, "0.0", "0.0", 3}}, {"VEgoStartingStock", {PERSISTENT, FLOAT, "0.0", "0.0", 3}}, {"VEgoStopping", {PERSISTENT, FLOAT, "0.0", "0.0", 3}}, {"VEgoStoppingStock", {PERSISTENT, FLOAT, "0.0", "0.0", 3}}, - {"VeryLongCancelButtonControl", {PERSISTENT, INT, "6", "0", 2}}, - {"VeryLongDistanceButtonControl", {PERSISTENT, INT, "6", "0", 2}}, - {"VeryLongModeButtonControl", {PERSISTENT, INT, "0", "0", 2}}, - {"VeryLongStarButtonControl", {PERSISTENT, INT, "0", "0", 2}}, - {"VoltSNG", {PERSISTENT, BOOL, "0", "0", 2}}, - {"JeepBrakeHold", {PERSISTENT, BOOL, "0", "0", 2}}, - {"GMAutoHold", {PERSISTENT, BOOL, "0", "0", 2}}, - {"VoltOnePedalMode", {PERSISTENT, BOOL, "0", "0", 2}}, - {"ToyotaAutoHold", {PERSISTENT, BOOL, "0", "0", 2}}, - {"WarningImmediateVolume", {PERSISTENT, INT, "101", "101", 2}}, - {"WarningSoftVolume", {PERSISTENT, INT, "101", "101", 2}}, - {"WeatherPresets", {PERSISTENT, BOOL, "0", "0", 2}}, + {"VeryLongCancelButtonControl", {PERSISTENT, INT, "6", "0", 2, SETTINGS_SIMPLE}}, + {"VeryLongDistanceButtonControl", {PERSISTENT, INT, "6", "0", 2, SETTINGS_SIMPLE}}, + {"VeryLongModeButtonControl", {PERSISTENT, INT, "0", "0", 2, SETTINGS_SIMPLE}}, + {"VeryLongStarButtonControl", {PERSISTENT, INT, "0", "0", 2, SETTINGS_SIMPLE}}, + {"VoltSNG", {PERSISTENT, BOOL, "0", "0", 2, SETTINGS_SIMPLE}}, + {"JeepBrakeHold", {PERSISTENT, BOOL, "0", "0", 2, SETTINGS_SIMPLE}}, + {"GMAutoHold", {PERSISTENT, BOOL, "0", "0", 2, SETTINGS_SIMPLE}}, + {"VoltOnePedalMode", {PERSISTENT, BOOL, "0", "0", 2, SETTINGS_SIMPLE}}, + {"ToyotaAutoHold", {PERSISTENT, BOOL, "0", "0", 2, SETTINGS_SIMPLE}}, + {"WarningImmediateVolume", {PERSISTENT, INT, "101", "101", 2, SETTINGS_SIMPLE}}, + {"WarningSoftVolume", {PERSISTENT, INT, "101", "101", 2, SETTINGS_SIMPLE}}, + {"WeatherPresets", {PERSISTENT, BOOL, "0", "0", 2, SETTINGS_SIMPLE}}, {"WeatherToken", {PERSISTENT | DONT_LOG, STRING, "", "", 2}}, {"WheelControls", {PERSISTENT, STRING, "", "", 2}}, {"WheelIcon", {PERSISTENT, STRING, "stock", "stock", 0}}, - {"WheelSpeed", {PERSISTENT, BOOL, "0", "0", 2}}, + {"WheelSpeed", {PERSISTENT, BOOL, "0", "0", 2, SETTINGS_SIMPLE}}, {"WheelToDownload", {CLEAR_ON_MANAGER_START, STRING, "", ""}}, }; diff --git a/common/params_pyx.pyx b/common/params_pyx.pyx index 9767b61e3..e9d5a678d 100644 --- a/common/params_pyx.pyx +++ b/common/params_pyx.pyx @@ -32,6 +32,10 @@ cdef extern from "common/params.h": JSON BYTES + cdef enum ParamSettingsTier: + SETTINGS_SIMPLE + SETTINGS_ADVANCED + cdef cppclass c_Params "Params": c_Params(string, bool) except + nogil string get(string, bool) nogil @@ -55,6 +59,8 @@ cdef extern from "common/params.h": int getTuningLevel(string) nogil + ParamSettingsTier getSettingsTier(string) nogil + PYTHON_2_CPP = { (str, STRING): lambda v: v, (builtins.bool, BOOL): lambda v: "1" if v else "0", @@ -255,3 +261,6 @@ cdef class Params: cdef string k = self.check_key(key) cdef optional[int] level = self.p.getTuningLevel(k) return level.value() if level.has_value() else 0 + + def get_settings_tier(self, key): + return self.p.getSettingsTier(self.check_key(key)) diff --git a/common/params_pyx.so b/common/params_pyx.so index c7d54ecb3..87c20d11c 100755 Binary files a/common/params_pyx.so and b/common/params_pyx.so differ diff --git a/common/tests/test_params.cc b/common/tests/test_params.cc index f8d6c79f5..364de5d58 100644 --- a/common/tests/test_params.cc +++ b/common/tests/test_params.cc @@ -25,3 +25,13 @@ TEST_CASE("params_nonblocking_put") { REQUIRE(p.get(name) == "1"); } } + +TEST_CASE("settings_tier_is_independent_from_tuning_level") { + Params params; + + REQUIRE(params.getSettingsTier("AlwaysOnLateral") == SETTINGS_SIMPLE); + REQUIRE(params.getTuningLevel("AlwaysOnLateral") == 0); + REQUIRE(params.getSettingsTier("HumanLaneChanges") == SETTINGS_SIMPLE); + REQUIRE(params.getTuningLevel("HumanLaneChanges") == 2); + REQUIRE(params.getSettingsTier("AdvancedLateralTune") == SETTINGS_ADVANCED); +} diff --git a/selfdrive/controls/lib/longcontrol.py b/selfdrive/controls/lib/longcontrol.py index 8575c842c..07e3a88b0 100644 --- a/selfdrive/controls/lib/longcontrol.py +++ b/selfdrive/controls/lib/longcontrol.py @@ -419,9 +419,7 @@ class LongControl: self.reset(preserve_stop_release=True) elif self.long_control_state == LongCtrlState.starting: - if starpilot_toggles.human_acceleration: - output_accel = a_target - elif getattr(starpilot_toggles, "custom_accel_profile", False): + if getattr(starpilot_toggles, "custom_accel_profile", False): output_accel = clip(a_target, 0.0, starpilot_toggles.startAccel) else: output_accel = starpilot_toggles.startAccel diff --git a/selfdrive/controls/tests/test_longcontrol.py b/selfdrive/controls/tests/test_longcontrol.py index 789320a49..92c60aab5 100644 --- a/selfdrive/controls/tests/test_longcontrol.py +++ b/selfdrive/controls/tests/test_longcontrol.py @@ -15,7 +15,6 @@ from openpilot.selfdrive.controls.lib.longcontrol import ( def make_toggles(**overrides): defaults = { "custom_accel_profile": False, - "human_acceleration": False, "startAccel": 1.5, "stopAccel": -0.5, "stoppingDecelRate": 0.8, diff --git a/selfdrive/controls/tests/test_starpilot_acceleration.py b/selfdrive/controls/tests/test_starpilot_acceleration.py index 3bdfb2009..4bcb97249 100644 --- a/selfdrive/controls/tests/test_starpilot_acceleration.py +++ b/selfdrive/controls/tests/test_starpilot_acceleration.py @@ -36,7 +36,6 @@ def make_toggles(**overrides): "custom_accel_profile_values": [], "ev_tuning": True, "truck_tuning": False, - "human_acceleration": False, "map_acceleration": False, "map_deceleration": False, "set_speed_limit": True, diff --git a/selfdrive/ui/layouts/settings/starpilot/longitudinal.py b/selfdrive/ui/layouts/settings/starpilot/longitudinal.py index 7f66fc89b..a567b040a 100644 --- a/selfdrive/ui/layouts/settings/starpilot/longitudinal.py +++ b/selfdrive/ui/layouts/settings/starpilot/longitudinal.py @@ -466,9 +466,6 @@ class StarPilotLongitudinalLayout(_SettingsPage): def _advanced_enabled(self) -> bool: return self._params.get_bool("AdvancedLongitudinalTune") - def _using_human_acceleration(self) -> bool: - return self._params.get_bool("LongitudinalTune") and self._params.get_bool("HumanAcceleration") - def _show_stop_tuning_values(self) -> bool: return self._advanced_enabled() and not (starpilot_state.car_state.isToyota and self._params.get_bool("FrogsGoMoosTweak")) @@ -553,7 +550,7 @@ class StarPilotLongitudinalLayout(_SettingsPage): subtitle=tr_noop("Extra acceleration when moving away from a stop."), get_value=lambda: f"{self._params.get_float('StartAccel'):.2f}m/s", on_click=lambda: self._show_slider("StartAccel", 0.0, 4.0, step=0.01, unit="m/s", value_type="float"), - visible=lambda: adv() and not self._using_human_acceleration()), + visible=adv), SettingRow("StopAccel", "value", tr_noop("Stop Acceleration"), subtitle=tr_noop("Brake force to hold the vehicle at a complete stop."), get_value=lambda: f"{self._params.get_float('StopAccel'):.2f}m/s", diff --git a/selfdrive/ui/translations/main_uk.ts b/selfdrive/ui/translations/main_uk.ts index 1bb0a985c..9d1978abc 100644 --- a/selfdrive/ui/translations/main_uk.ts +++ b/selfdrive/ui/translations/main_uk.ts @@ -1650,10 +1650,6 @@ Deceleration Profile Профіль вповільн. - - Human-Like Acceleration - Людьське приск. - "Taco Bell Run" Turn Speed Hack «Taco Bell Run» — хак поворотів diff --git a/starpilot/common/safe_mode.py b/starpilot/common/safe_mode.py index 442fb30a5..3598adde0 100644 --- a/starpilot/common/safe_mode.py +++ b/starpilot/common/safe_mode.py @@ -72,7 +72,6 @@ SAFE_MODE_MANAGED_KEYS = ( "VEgoStopping", "AccelerationProfile", "DecelerationProfile", - "HumanAcceleration", "HumanLaneChanges", "LeadDetectionThreshold", "RecoveryPower", diff --git a/starpilot/common/starpilot_variables.py b/starpilot/common/starpilot_variables.py index 5b57aa726..f88c0a784 100644 --- a/starpilot/common/starpilot_variables.py +++ b/starpilot/common/starpilot_variables.py @@ -1180,7 +1180,6 @@ class StarPilotVariables: ] else: toggle.custom_accel_profile_values = [custom_accel_defaults[key] for key in CUSTOM_ACCEL_PROFILE_PARAM_KEYS] - toggle.human_acceleration = self.get_value("HumanAcceleration", condition=longitudinal_tuning) toggle.human_lane_changes = has_radar and self.get_value("HumanLaneChanges", condition=longitudinal_tuning) toggle.nav_longitudinal_allowed = toggle.openpilot_longitudinal and self.get_value("NavLongitudinalAllowed", condition=longitudinal_tuning) # Keep lead detection sensitivity normalized even when longitudinal tuning is disabled. diff --git a/starpilot/controls/lib/starpilot_acceleration.py b/starpilot/controls/lib/starpilot_acceleration.py index e5039b96e..206071f06 100644 --- a/starpilot/controls/lib/starpilot_acceleration.py +++ b/starpilot/controls/lib/starpilot_acceleration.py @@ -16,7 +16,6 @@ from openpilot.starpilot.common.accel_profile import ( normalize_deceleration_profile, ) from openpilot.starpilot.controls.lib.starpilot_vcruise import get_active_slc_control_target -from openpilot.starpilot.common.starpilot_variables import CITY_SPEED_LIMIT def cubic_interp(x, xp, fp): """Cubic interpolation using NumPy's native operations for speed.""" @@ -89,12 +88,6 @@ def get_max_accel_custom(v_ego, custom_curve, acceleration_profile, ev_tuning=Tr curve_values = coerce_custom_accel_profile_values(custom_curve, acceleration_profile, ev_tuning, truck_tuning) return interpolate_accel_profile(v_ego, curve_values) -def get_max_accel_low_speeds(max_accel, v_cruise): - return float(akima_interp(v_cruise, [0., CITY_SPEED_LIMIT / 2, CITY_SPEED_LIMIT], [max_accel / 4, max_accel / 2, max_accel])) - -def get_max_accel_ramp_off(max_accel, v_cruise, v_ego): - return float(akima_interp(v_cruise - v_ego, [0., 1., 5., 10.], [0., 0.5, 1.0, max_accel])) - def get_max_allowed_accel(v_ego, ev_tuning=True, truck_tuning=False): return float(get_profile_max_allowed_accel(v_ego, ev_tuning, truck_tuning)) @@ -173,10 +166,6 @@ class StarPilotAcceleration: else: self.max_accel = get_max_accel_standard(v_ego, ev_tuning, truck_tuning) - if starpilot_toggles.human_acceleration: - self.max_accel = min(get_max_accel_low_speeds(self.max_accel, self.starpilot_planner.v_cruise), self.max_accel) - self.max_accel = min(get_max_accel_ramp_off(self.max_accel, self.starpilot_planner.v_cruise, v_ego), self.max_accel) - if self.starpilot_planner.starpilot_weather.weather_id != 0: self.max_accel -= self.max_accel * self.starpilot_planner.starpilot_weather.reduce_acceleration diff --git a/starpilot/system/the_galaxy/assets/components/tools/device_settings.js b/starpilot/system/the_galaxy/assets/components/tools/device_settings.js index fde49549b..1e7dceaf0 100644 --- a/starpilot/system/the_galaxy/assets/components/tools/device_settings.js +++ b/starpilot/system/the_galaxy/assets/components/tools/device_settings.js @@ -8,6 +8,39 @@ const COLOR_UI_DEFAULTS = { PathColor: "#30ff9c", } const FAVORITE_OPTION_COLLATOR = new Intl.Collator(undefined, { numeric: true, sensitivity: "base" }) +const GALAXY_DEVELOPER_MODE_KEY = "GalaxyDeveloperMode" +const HIDDEN_SECTION_NAMES = new Set(["Model & Customization"]) +const HIDDEN_SETTING_KEYS = new Set(["DisableWideRoad", "HumanAcceleration", "ReverseCruise"]) +const GM_MAKES = ["Buick", "Cadillac", "Chevrolet", "GMC", "Holden"] +const HKG_MAKES = ["Genesis", "Hyundai", "Kia"] +const VEHICLE_SETTING_MAKES = { + TeslaCoopSteering: ["Tesla"], + NAPRadarEnabled: ["Tesla"], + NAPRadarBehindNosecone: ["Tesla"], + NAPRadarOffset: ["Tesla"], + NAPPedalEnabled: ["Tesla"], + NAPPedalCanBus: ["Tesla"], + NAPAdaptiveAccel: ["Tesla"], + NAPPedalCalibDone: ["Tesla"], + NAPPedalCalibFactor: ["Tesla"], + NAPPedalCalibZero: ["Tesla"], + GMPedalLongitudinal: GM_MAKES, + GMDashSpoofOffsets: GM_MAKES, + IgnoreIgnitionLine: GM_MAKES, + LongPitch: GM_MAKES, + RemoteStartBootsComma: GM_MAKES, + HKGRemoteStartBootsComma: HKG_MAKES, + VoltSNG: ["Chevrolet", "Holden"], + GMAutoHold: ["Chevrolet", "Holden"], + VoltOnePedalMode: ["Chevrolet", "Holden"], + RemapCancelToDistance: ["Chevrolet", "Holden"], + JeepBrakeHold: ["Jeep"], + SubaruSNG: ["Subaru"], + SubaruSNGManualParkingBrake: ["Subaru"], + ClusterOffset: ["Lexus", "Toyota"], + SNGHack: ["Lexus", "Toyota"], + ToyotaAutoHold: ["Lexus", "Toyota"], +} // Plain variables — scheduling/routing flags that must NOT be reactive let syncScheduled = false @@ -54,11 +87,34 @@ function slugifySectionName(name) { .replace(/^-+|-+$/g, "") } +function normalizeVehicleMake(value) { + return String(value || "").trim().toLowerCase() +} + +function isVehicleSettingVisible(section, param) { + if (section.name !== "Vehicle") return true + const allowedMakes = VEHICLE_SETTING_MAKES[param.key] + if (!allowedMakes) return true + const selectedMake = normalizeVehicleMake(state.values.CarMake) + return allowedMakes.some(make => normalizeVehicleMake(make) === selectedMake) +} + +function isSettingVisible(section, param) { + // This policy controls Galaxy rendering only; hidden params retain their stored values. + if (HIDDEN_SETTING_KEYS.has(param.key) || !isVehicleSettingVisible(section, param)) return false + if (state.values[GALAXY_DEVELOPER_MODE_KEY]) return true + return section.name === "Favorites" || param.settings_tier === "simple" +} + function getSectionsWithSlug() { - return state.layout.map(section => ({ - ...section, - slug: slugifySectionName(section.name), - })) + return state.layout + .filter(section => !HIDDEN_SECTION_NAMES.has(section.name)) + .map(section => ({ + ...section, + params: (section.params || []).filter(param => isSettingVisible(section, param)), + slug: slugifySectionName(section.name), + })) + .filter(section => section.params.length > 0) } function isGroupParam(param) { @@ -317,7 +373,7 @@ async function fetchLayoutAndParams() { state.loadingValues = true try { - const layoutRes = await fetch("/assets/components/tools/device_settings_layout.json?v=favorite-slots-5", { cache: "no-store" }) + const layoutRes = await fetch("/assets/components/tools/device_settings_layout.json?v=settings-tier-1", { cache: "no-store" }) const rawLayoutData = await layoutRes.json() const layoutData = rawLayoutData diff --git a/starpilot/system/the_galaxy/assets/components/tools/device_settings_layout.json b/starpilot/system/the_galaxy/assets/components/tools/device_settings_layout.json index da78cf05d..26209cd78 100644 --- a/starpilot/system/the_galaxy/assets/components/tools/device_settings_layout.json +++ b/starpilot/system/the_galaxy/assets/components/tools/device_settings_layout.json @@ -8,7 +8,8 @@ "label": "Favorite Slots", "description": "Configure up to three favorite toggles for on-road buttons and steering-wheel bindings.", "data_type": "json", - "ui_type": "favorites" + "ui_type": "favorites", + "settings_tier": "advanced" } ] }, @@ -22,7 +23,8 @@ "description": "Advanced steering control changes to fine-tune how openpilot drives.", "data_type": "bool", "ui_type": "toggle", - "is_parent_toggle": true + "is_parent_toggle": true, + "settings_tier": "advanced" }, { "key": "UseAutoSteerDelay", @@ -30,7 +32,8 @@ "description": "Automatically learn the full steering delay. The manual actuator delay is ignored while enabled.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "AdvancedLateralTune" + "parent_key": "AdvancedLateralTune", + "settings_tier": "advanced" }, { "key": "SteerDelay", @@ -44,7 +47,8 @@ "precision": 2, "disabled_when_key_true": "UseAutoSteerDelay", "disabled_reason": "Auto-learned delay is enabled.", - "parent_key": "AdvancedLateralTune" + "parent_key": "AdvancedLateralTune", + "settings_tier": "advanced" }, { "key": "SteerFriction", @@ -56,7 +60,8 @@ "max": 1.0, "step": 0.01, "precision": 2, - "parent_key": "AdvancedLateralTune" + "parent_key": "AdvancedLateralTune", + "settings_tier": "advanced" }, { "key": "SteerKP", @@ -66,7 +71,8 @@ "ui_type": "numeric", "step": 0.01, "precision": 2, - "parent_key": "AdvancedLateralTune" + "parent_key": "AdvancedLateralTune", + "settings_tier": "advanced" }, { "key": "SteerLatAccel", @@ -76,7 +82,8 @@ "ui_type": "numeric", "step": 0.01, "precision": 2, - "parent_key": "AdvancedLateralTune" + "parent_key": "AdvancedLateralTune", + "settings_tier": "advanced" }, { "key": "SteerRatio", @@ -86,7 +93,8 @@ "ui_type": "numeric", "step": 0.01, "precision": 2, - "parent_key": "AdvancedLateralTune" + "parent_key": "AdvancedLateralTune", + "settings_tier": "advanced" }, { "key": "ForceAutoTune", @@ -94,7 +102,8 @@ "description": "Force-enable openpilot's live auto-tuning for \"Friction\" and \"Lateral Acceleration\".", "data_type": "bool", "ui_type": "toggle", - "parent_key": "AdvancedLateralTune" + "parent_key": "AdvancedLateralTune", + "settings_tier": "advanced" }, { "key": "ForceAutoTuneOff", @@ -102,7 +111,8 @@ "description": "Force-disable openpilot's live auto-tuning for \"Friction\" and \"Lateral Acceleration\" and use the set value instead.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "AdvancedLateralTune" + "parent_key": "AdvancedLateralTune", + "settings_tier": "advanced" }, { "key": "ForceTorqueController", @@ -110,7 +120,8 @@ "description": "Use torque-based steering control instead of angle-based control for smoother lane keeping, especially in curves.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "AdvancedLateralTune" + "parent_key": "AdvancedLateralTune", + "settings_tier": "advanced" }, { "key": "AlwaysOnLateral", @@ -118,7 +129,8 @@ "description": "openpilot's steering remains active even when the accelerator or brake pedals are pressed.", "data_type": "bool", "ui_type": "toggle", - "is_parent_toggle": true + "is_parent_toggle": true, + "settings_tier": "simple" }, { "key": "PauseAOLOnBrake", @@ -129,7 +141,8 @@ "min": 0.0, "max": 99.0, "step": 1.0, - "parent_key": "AlwaysOnLateral" + "parent_key": "AlwaysOnLateral", + "settings_tier": "simple" }, { "key": "LaneChanges", @@ -137,7 +150,8 @@ "description": "Allow openpilot to change lanes.", "data_type": "bool", "ui_type": "toggle", - "is_parent_toggle": true + "is_parent_toggle": true, + "settings_tier": "simple" }, { "key": "NudgelessLaneChange", @@ -145,7 +159,8 @@ "description": "When the turn signal is on, openpilot will automatically change lanes. No steering-wheel nudge required!", "data_type": "bool", "ui_type": "toggle", - "parent_key": "LaneChanges" + "parent_key": "LaneChanges", + "settings_tier": "simple" }, { "key": "NudgelessLaneChangeOnlyWhenEngaged", @@ -153,7 +168,8 @@ "description": "Require a steering-wheel nudge for lane changes while using Always On Lateral without full engagement.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "LaneChanges" + "parent_key": "LaneChanges", + "settings_tier": "simple" }, { "key": "LaneChangeTime", @@ -164,7 +180,8 @@ "min": 0.0, "max": 5.0, "step": 0.1, - "parent_key": "LaneChanges" + "parent_key": "LaneChanges", + "settings_tier": "simple" }, { "key": "MinimumLaneChangeSpeed", @@ -175,7 +192,8 @@ "min": 0.0, "max": 99.0, "step": 1.0, - "parent_key": "LaneChanges" + "parent_key": "LaneChanges", + "settings_tier": "simple" }, { "key": "LaneDetectionWidth", @@ -186,7 +204,8 @@ "min": 0.0, "max": 15.0, "step": 0.1, - "parent_key": "LaneChanges" + "parent_key": "LaneChanges", + "settings_tier": "simple" }, { "key": "OneLaneChange", @@ -194,7 +213,8 @@ "description": "Limit automatic lane changes to one per turn-signal activation.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "LaneChanges" + "parent_key": "LaneChanges", + "settings_tier": "simple" }, { "key": "LaneChangeSmoothing", @@ -205,7 +225,8 @@ "min": 1.0, "max": 10.0, "step": 1.0, - "parent_key": "LaneChanges" + "parent_key": "LaneChanges", + "settings_tier": "simple" }, { "key": "LateralTune", @@ -213,7 +234,8 @@ "description": "Miscellaneous steering control changes to fine-tune how openpilot drives.", "data_type": "bool", "ui_type": "toggle", - "is_parent_toggle": true + "is_parent_toggle": true, + "settings_tier": "advanced" }, { "key": "TurnDesires", @@ -221,7 +243,8 @@ "description": "While driving below the minimum lane change speed with an active turn signal, instruct openpilot to turn left/right.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "LateralTune" + "parent_key": "LateralTune", + "settings_tier": "advanced" }, { "key": "NavDesiresAllowed", @@ -229,7 +252,8 @@ "description": "Allow an active navigation route to request keep-left, keep-right, and low-speed turn desires.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "LateralTune" + "parent_key": "LateralTune", + "settings_tier": "advanced" }, { "key": "NNFF", @@ -237,7 +261,8 @@ "description": "Twilsonco's \"Neural Network FeedForward\" controller. Uses a trained neural network model to predict steering torque based on vehicle speed, roll, and past/future planned path data for smoother, model-based steering.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "LateralTune" + "parent_key": "LateralTune", + "settings_tier": "advanced" }, { "key": "NNFFLite", @@ -245,7 +270,8 @@ "description": "A lightweight version of Twilsonco's \"Neural Network FeedForward\" controller. Uses the \"look-ahead\" planned lateral jerk logic from the full model to help smoothen steering adjustments in curves, but does not use the full neural network for torque calculation.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "LateralTune" + "parent_key": "LateralTune", + "settings_tier": "advanced" }, { "key": "QOLLateral", @@ -253,7 +279,8 @@ "description": "Steering control changes to fine-tune how openpilot drives.", "data_type": "bool", "ui_type": "toggle", - "is_parent_toggle": true + "is_parent_toggle": true, + "settings_tier": "simple" }, { "key": "PauseLateralSpeed", @@ -264,7 +291,8 @@ "min": 0.0, "max": 99.0, "step": 1.0, - "parent_key": "QOLLateral" + "parent_key": "QOLLateral", + "settings_tier": "simple" }, { "key": "PauseLateralOnSignal", @@ -272,7 +300,8 @@ "description": "Only pause steering when the turn signal is active.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "QOLLateral" + "parent_key": "QOLLateral", + "settings_tier": "simple" }, { "key": "LateralResumeDelay", @@ -283,7 +312,8 @@ "min": 0.0, "max": 5.0, "step": 0.1, - "parent_key": "QOLLateral" + "parent_key": "QOLLateral", + "settings_tier": "simple" } ] }, @@ -297,7 +327,8 @@ "description": "Advanced acceleration and braking control changes to fine-tune how openpilot drives.", "data_type": "bool", "ui_type": "toggle", - "is_parent_toggle": true + "is_parent_toggle": true, + "settings_tier": "advanced" }, { "key": "EVTuning", @@ -305,7 +336,8 @@ "description": "Use acceleration profiles tuned for EVs. Defaults to the vehicle's detected powertrain type but can be overridden if the automatic choice doesn't match.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "AdvancedLongitudinalTune" + "parent_key": "AdvancedLongitudinalTune", + "settings_tier": "advanced" }, { "key": "TruckTuning", @@ -313,7 +345,8 @@ "description": "Use aggressive acceleration profiles tuned for trucks. Intended for heavy vehicles that need stronger throttle.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "AdvancedLongitudinalTune" + "parent_key": "AdvancedLongitudinalTune", + "settings_tier": "advanced" }, { "key": "TrailerLoad", @@ -324,7 +357,8 @@ "min": 0, "max": 15000, "step": 500, - "parent_key": "AdvancedLongitudinalTune" + "parent_key": "AdvancedLongitudinalTune", + "settings_tier": "advanced" }, { "key": "CustomAccelProfile", @@ -333,7 +367,8 @@ "data_type": "bool", "ui_type": "toggle", "is_parent_toggle": true, - "parent_key": "AdvancedLongitudinalTune" + "parent_key": "AdvancedLongitudinalTune", + "settings_tier": "advanced" }, { "key": "CustomAccelProfile0MPH", @@ -345,7 +380,8 @@ "max": 6.0, "step": 0.01, "precision": 2, - "parent_key": "CustomAccelProfile" + "parent_key": "CustomAccelProfile", + "settings_tier": "advanced" }, { "key": "CustomAccelProfile11MPH", @@ -357,7 +393,8 @@ "max": 6.0, "step": 0.01, "precision": 2, - "parent_key": "CustomAccelProfile" + "parent_key": "CustomAccelProfile", + "settings_tier": "advanced" }, { "key": "CustomAccelProfile22MPH", @@ -369,7 +406,8 @@ "max": 6.0, "step": 0.01, "precision": 2, - "parent_key": "CustomAccelProfile" + "parent_key": "CustomAccelProfile", + "settings_tier": "advanced" }, { "key": "CustomAccelProfile34MPH", @@ -381,7 +419,8 @@ "max": 6.0, "step": 0.01, "precision": 2, - "parent_key": "CustomAccelProfile" + "parent_key": "CustomAccelProfile", + "settings_tier": "advanced" }, { "key": "CustomAccelProfile45MPH", @@ -393,7 +432,8 @@ "max": 6.0, "step": 0.01, "precision": 2, - "parent_key": "CustomAccelProfile" + "parent_key": "CustomAccelProfile", + "settings_tier": "advanced" }, { "key": "CustomAccelProfile56MPH", @@ -405,7 +445,8 @@ "max": 6.0, "step": 0.01, "precision": 2, - "parent_key": "CustomAccelProfile" + "parent_key": "CustomAccelProfile", + "settings_tier": "advanced" }, { "key": "CustomAccelProfile89MPH", @@ -417,7 +458,8 @@ "max": 6.0, "step": 0.01, "precision": 2, - "parent_key": "CustomAccelProfile" + "parent_key": "CustomAccelProfile", + "settings_tier": "advanced" }, { "key": "LongitudinalActuatorDelay", @@ -429,7 +471,8 @@ "max": 1.0, "step": 0.01, "precision": 2, - "parent_key": "AdvancedLongitudinalTune" + "parent_key": "AdvancedLongitudinalTune", + "settings_tier": "advanced" }, { "key": "MaxDesiredAcceleration", @@ -440,7 +483,8 @@ "min": 0.1, "max": 4.0, "step": 0.1, - "parent_key": "AdvancedLongitudinalTune" + "parent_key": "AdvancedLongitudinalTune", + "settings_tier": "advanced" }, { "key": "StartAccel", @@ -452,7 +496,8 @@ "max": 4.0, "step": 0.01, "precision": 2, - "parent_key": "AdvancedLongitudinalTune" + "parent_key": "AdvancedLongitudinalTune", + "settings_tier": "advanced" }, { "key": "VEgoStarting", @@ -464,7 +509,8 @@ "max": 1.0, "step": 0.01, "precision": 2, - "parent_key": "AdvancedLongitudinalTune" + "parent_key": "AdvancedLongitudinalTune", + "settings_tier": "advanced" }, { "key": "StopAccel", @@ -476,7 +522,8 @@ "max": 0.0, "step": 0.01, "precision": 2, - "parent_key": "AdvancedLongitudinalTune" + "parent_key": "AdvancedLongitudinalTune", + "settings_tier": "advanced" }, { "key": "StoppingDecelRate", @@ -488,7 +535,8 @@ "max": 1.0, "step": 0.001, "precision": 2, - "parent_key": "AdvancedLongitudinalTune" + "parent_key": "AdvancedLongitudinalTune", + "settings_tier": "advanced" }, { "key": "VEgoStopping", @@ -500,7 +548,8 @@ "max": 1.0, "step": 0.01, "precision": 2, - "parent_key": "AdvancedLongitudinalTune" + "parent_key": "AdvancedLongitudinalTune", + "settings_tier": "advanced" }, { "key": "ConditionalExperimental", @@ -508,7 +557,8 @@ "description": "Automatically switch to \"Experimental Mode\" when set conditions are met. Allows the model to handle challenging situations with smarter decision making.", "data_type": "bool", "ui_type": "toggle", - "is_parent_toggle": true + "is_parent_toggle": true, + "settings_tier": "simple" }, { "key": "PersistExperimentalState", @@ -516,7 +566,8 @@ "description": "Keep your manual Conditional Experimental override through reboots until you manually clear it.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "ConditionalExperimental" + "parent_key": "ConditionalExperimental", + "settings_tier": "simple" }, { "key": "CESpeed", @@ -527,7 +578,8 @@ "min": 0.0, "max": 99.0, "step": 1.0, - "parent_key": "ConditionalExperimental" + "parent_key": "ConditionalExperimental", + "settings_tier": "simple" }, { "key": "CESpeedLead", @@ -538,7 +590,8 @@ "min": 0.0, "max": 99.0, "step": 1.0, - "parent_key": "ConditionalExperimental" + "parent_key": "ConditionalExperimental", + "settings_tier": "simple" }, { "key": "CECurves", @@ -546,7 +599,8 @@ "description": "Switch to \"Experimental Mode\" when a curve is detected to allow the model to set an appropriate speed for the curve.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "ConditionalExperimental" + "parent_key": "ConditionalExperimental", + "settings_tier": "simple" }, { "key": "CEStopLights", @@ -554,7 +608,8 @@ "description": "Switch to \"Experimental Mode\" whenever the driving model \"detects\" a red light or stop sign.\n\nDisclaimer: openpilot does not explicitly detect traffic lights or stop signs. In \"Experimental Mode\", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!", "data_type": "bool", "ui_type": "toggle", - "parent_key": "ConditionalExperimental" + "parent_key": "ConditionalExperimental", + "settings_tier": "simple" }, { "key": "CELead", @@ -563,7 +618,8 @@ "data_type": "bool", "ui_type": "toggle", "parent_key": "ConditionalExperimental", - "is_parent_toggle": true + "is_parent_toggle": true, + "settings_tier": "simple" }, { "key": "CESlowerLead", @@ -571,7 +627,8 @@ "description": "Switch to \"Experimental Mode\" when a slower lead vehicle is detected ahead.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "CELead" + "parent_key": "CELead", + "settings_tier": "simple" }, { "key": "CEStoppedLead", @@ -579,7 +636,8 @@ "description": "Switch to \"Experimental Mode\" when a stopped lead vehicle is detected ahead.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "CELead" + "parent_key": "CELead", + "settings_tier": "simple" }, { "key": "CEModelStopTime", @@ -589,7 +647,8 @@ "ui_type": "numeric", "min": 0.0, "max": 9.0, - "parent_key": "ConditionalExperimental" + "parent_key": "ConditionalExperimental", + "settings_tier": "simple" }, { "key": "CESignalSpeed", @@ -600,7 +659,8 @@ "min": 0.0, "max": 99.0, "step": 1.0, - "parent_key": "ConditionalExperimental" + "parent_key": "ConditionalExperimental", + "settings_tier": "simple" }, { "key": "ShowCEMStatus", @@ -608,7 +668,8 @@ "description": "Show which condition triggered \"Experimental Mode\" on the driving screen.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "ConditionalExperimental" + "parent_key": "ConditionalExperimental", + "settings_tier": "simple" }, { "key": "CurveSpeedController", @@ -616,7 +677,8 @@ "description": "Automatically slow down for upcoming curves using data learned from your driving style, adapting to curves as you would.", "data_type": "bool", "ui_type": "toggle", - "is_parent_toggle": true + "is_parent_toggle": true, + "settings_tier": "simple" }, { "key": "ShowCSCStatus", @@ -624,7 +686,8 @@ "description": "Show the \"Curve Speed Controller\" target speed on the driving screen.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "CurveSpeedController" + "parent_key": "CurveSpeedController", + "settings_tier": "simple" }, { "key": "ResetCurveData", @@ -634,7 +697,8 @@ "action_label": "Reset", "action_endpoint": "/api/curve_speed_controller/reset", "confirm_message": "Reset all learned Curve Speed Controller data? Training will restart from the default value.", - "parent_key": "CurveSpeedController" + "parent_key": "CurveSpeedController", + "settings_tier": "simple" }, { "key": "CustomPersonalities", @@ -642,7 +706,8 @@ "description": "Customize the \"Driving Personalities\" to better match your driving style.", "data_type": "bool", "ui_type": "toggle", - "is_parent_toggle": true + "is_parent_toggle": true, + "settings_tier": "advanced" }, { "key": "TrafficPersonalityProfile", @@ -651,7 +716,8 @@ "data_type": "bool", "ui_type": "toggle", "parent_key": "CustomPersonalities", - "is_parent_toggle": true + "is_parent_toggle": true, + "settings_tier": "advanced" }, { "key": "AggressivePersonalityProfile", @@ -660,7 +726,8 @@ "data_type": "bool", "ui_type": "toggle", "parent_key": "CustomPersonalities", - "is_parent_toggle": true + "is_parent_toggle": true, + "settings_tier": "advanced" }, { "key": "StandardPersonalityProfile", @@ -669,7 +736,8 @@ "data_type": "bool", "ui_type": "toggle", "parent_key": "CustomPersonalities", - "is_parent_toggle": true + "is_parent_toggle": true, + "settings_tier": "advanced" }, { "key": "RelaxedPersonalityProfile", @@ -678,7 +746,8 @@ "data_type": "bool", "ui_type": "toggle", "parent_key": "CustomPersonalities", - "is_parent_toggle": true + "is_parent_toggle": true, + "settings_tier": "advanced" }, { "key": "TrafficFollow", @@ -689,7 +758,8 @@ "min": 0.5, "max": 3.0, "step": 0.01, - "parent_key": "TrafficPersonalityProfile" + "parent_key": "TrafficPersonalityProfile", + "settings_tier": "advanced" }, { "key": "TrafficJerkAcceleration", @@ -700,7 +770,8 @@ "min": 0.5, "max": 3.0, "step": 0.01, - "parent_key": "TrafficPersonalityProfile" + "parent_key": "TrafficPersonalityProfile", + "settings_tier": "advanced" }, { "key": "TrafficJerkDeceleration", @@ -711,7 +782,8 @@ "min": 0.5, "max": 3.0, "step": 0.01, - "parent_key": "TrafficPersonalityProfile" + "parent_key": "TrafficPersonalityProfile", + "settings_tier": "advanced" }, { "key": "TrafficJerkDanger", @@ -722,7 +794,8 @@ "min": 0.5, "max": 3.0, "step": 0.01, - "parent_key": "TrafficPersonalityProfile" + "parent_key": "TrafficPersonalityProfile", + "settings_tier": "advanced" }, { "key": "TrafficJerkSpeedDecrease", @@ -733,7 +806,8 @@ "min": 0.5, "max": 3.0, "step": 0.01, - "parent_key": "TrafficPersonalityProfile" + "parent_key": "TrafficPersonalityProfile", + "settings_tier": "advanced" }, { "key": "TrafficJerkSpeed", @@ -744,7 +818,8 @@ "min": 0.5, "max": 3.0, "step": 0.01, - "parent_key": "TrafficPersonalityProfile" + "parent_key": "TrafficPersonalityProfile", + "settings_tier": "advanced" }, { "key": "AggressiveFollow", @@ -755,7 +830,8 @@ "min": 0.5, "max": 3.0, "step": 0.01, - "parent_key": "AggressivePersonalityProfile" + "parent_key": "AggressivePersonalityProfile", + "settings_tier": "advanced" }, { "key": "AggressiveFollowHigh", @@ -766,7 +842,8 @@ "min": 0.5, "max": 3.0, "step": 0.01, - "parent_key": "AggressivePersonalityProfile" + "parent_key": "AggressivePersonalityProfile", + "settings_tier": "advanced" }, { "key": "AggressiveJerkAcceleration", @@ -777,7 +854,8 @@ "min": 0.5, "max": 3.0, "step": 0.01, - "parent_key": "AggressivePersonalityProfile" + "parent_key": "AggressivePersonalityProfile", + "settings_tier": "advanced" }, { "key": "AggressiveJerkDeceleration", @@ -788,7 +866,8 @@ "min": 0.5, "max": 3.0, "step": 0.01, - "parent_key": "AggressivePersonalityProfile" + "parent_key": "AggressivePersonalityProfile", + "settings_tier": "advanced" }, { "key": "AggressiveJerkDanger", @@ -799,7 +878,8 @@ "min": 0.5, "max": 3.0, "step": 0.01, - "parent_key": "AggressivePersonalityProfile" + "parent_key": "AggressivePersonalityProfile", + "settings_tier": "advanced" }, { "key": "AggressiveJerkSpeedDecrease", @@ -810,7 +890,8 @@ "min": 0.5, "max": 3.0, "step": 0.01, - "parent_key": "AggressivePersonalityProfile" + "parent_key": "AggressivePersonalityProfile", + "settings_tier": "advanced" }, { "key": "AggressiveJerkSpeed", @@ -821,7 +902,8 @@ "min": 0.5, "max": 3.0, "step": 0.01, - "parent_key": "AggressivePersonalityProfile" + "parent_key": "AggressivePersonalityProfile", + "settings_tier": "advanced" }, { "key": "StandardFollow", @@ -832,7 +914,8 @@ "min": 0.5, "max": 3.0, "step": 0.01, - "parent_key": "StandardPersonalityProfile" + "parent_key": "StandardPersonalityProfile", + "settings_tier": "advanced" }, { "key": "StandardFollowHigh", @@ -843,7 +926,8 @@ "min": 0.5, "max": 3.0, "step": 0.01, - "parent_key": "StandardPersonalityProfile" + "parent_key": "StandardPersonalityProfile", + "settings_tier": "advanced" }, { "key": "StandardJerkAcceleration", @@ -854,7 +938,8 @@ "min": 0.5, "max": 3.0, "step": 0.01, - "parent_key": "StandardPersonalityProfile" + "parent_key": "StandardPersonalityProfile", + "settings_tier": "advanced" }, { "key": "StandardJerkDeceleration", @@ -865,7 +950,8 @@ "min": 0.5, "max": 3.0, "step": 0.01, - "parent_key": "StandardPersonalityProfile" + "parent_key": "StandardPersonalityProfile", + "settings_tier": "advanced" }, { "key": "StandardJerkDanger", @@ -876,7 +962,8 @@ "min": 0.5, "max": 3.0, "step": 0.01, - "parent_key": "StandardPersonalityProfile" + "parent_key": "StandardPersonalityProfile", + "settings_tier": "advanced" }, { "key": "StandardJerkSpeedDecrease", @@ -887,7 +974,8 @@ "min": 0.5, "max": 3.0, "step": 0.01, - "parent_key": "StandardPersonalityProfile" + "parent_key": "StandardPersonalityProfile", + "settings_tier": "advanced" }, { "key": "StandardJerkSpeed", @@ -898,7 +986,8 @@ "min": 0.5, "max": 3.0, "step": 0.01, - "parent_key": "StandardPersonalityProfile" + "parent_key": "StandardPersonalityProfile", + "settings_tier": "advanced" }, { "key": "RelaxedFollow", @@ -909,7 +998,8 @@ "min": 0.5, "max": 3.0, "step": 0.01, - "parent_key": "RelaxedPersonalityProfile" + "parent_key": "RelaxedPersonalityProfile", + "settings_tier": "advanced" }, { "key": "RelaxedFollowHigh", @@ -920,7 +1010,8 @@ "min": 0.5, "max": 3.0, "step": 0.01, - "parent_key": "RelaxedPersonalityProfile" + "parent_key": "RelaxedPersonalityProfile", + "settings_tier": "advanced" }, { "key": "RelaxedJerkAcceleration", @@ -931,7 +1022,8 @@ "min": 0.5, "max": 3.0, "step": 0.01, - "parent_key": "RelaxedPersonalityProfile" + "parent_key": "RelaxedPersonalityProfile", + "settings_tier": "advanced" }, { "key": "RelaxedJerkDeceleration", @@ -942,7 +1034,8 @@ "min": 0.5, "max": 3.0, "step": 0.01, - "parent_key": "RelaxedPersonalityProfile" + "parent_key": "RelaxedPersonalityProfile", + "settings_tier": "advanced" }, { "key": "RelaxedJerkDanger", @@ -953,7 +1046,8 @@ "min": 0.5, "max": 3.0, "step": 0.01, - "parent_key": "RelaxedPersonalityProfile" + "parent_key": "RelaxedPersonalityProfile", + "settings_tier": "advanced" }, { "key": "RelaxedJerkSpeedDecrease", @@ -964,7 +1058,8 @@ "min": 0.5, "max": 3.0, "step": 0.01, - "parent_key": "RelaxedPersonalityProfile" + "parent_key": "RelaxedPersonalityProfile", + "settings_tier": "advanced" }, { "key": "RelaxedJerkSpeed", @@ -975,7 +1070,8 @@ "min": 0.5, "max": 3.0, "step": 0.01, - "parent_key": "RelaxedPersonalityProfile" + "parent_key": "RelaxedPersonalityProfile", + "settings_tier": "advanced" }, { "key": "LongitudinalTune", @@ -983,7 +1079,8 @@ "description": "Acceleration and braking control changes to fine-tune how openpilot drives.", "data_type": "bool", "ui_type": "toggle", - "is_parent_toggle": true + "is_parent_toggle": true, + "settings_tier": "simple" }, { "key": "AccelerationProfile", @@ -1009,7 +1106,8 @@ "label": "Sport+" } ], - "parent_key": "LongitudinalTune" + "parent_key": "LongitudinalTune", + "settings_tier": "simple" }, { "key": "DecelerationProfile", @@ -1031,15 +1129,8 @@ "label": "Sport" } ], - "parent_key": "LongitudinalTune" - }, - { - "key": "HumanAcceleration", - "label": "Human-Like Acceleration", - "description": "Acceleration that mimics human behavior by easing the throttle at low speeds and adding extra power when taking off from a stop.", - "data_type": "bool", - "ui_type": "toggle", - "parent_key": "LongitudinalTune" + "parent_key": "LongitudinalTune", + "settings_tier": "simple" }, { "key": "HumanLaneChanges", @@ -1047,7 +1138,8 @@ "description": "Lane-change behavior that mimics human drivers by anticipating and tracking adjacent vehicles during lane changes.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "LongitudinalTune" + "parent_key": "LongitudinalTune", + "settings_tier": "simple" }, { "key": "LeadDetectionThreshold", @@ -1057,7 +1149,8 @@ "ui_type": "numeric", "min": 25.0, "max": 50.0, - "parent_key": "LongitudinalTune" + "parent_key": "LongitudinalTune", + "settings_tier": "advanced" }, { "key": "TacoTune", @@ -1065,7 +1158,8 @@ "description": "The turn-speed hack from comma's 2022 \"Taco Bell Run\". Designed to slow down for left and right turns.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "LongitudinalTune" + "parent_key": "LongitudinalTune", + "settings_tier": "advanced" }, { "key": "NavLongitudinalAllowed", @@ -1073,7 +1167,8 @@ "description": "Allow an active navigation route to reduce cruise speed for upcoming turns, ramps, and roundabouts.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "LongitudinalTune" + "parent_key": "LongitudinalTune", + "settings_tier": "advanced" }, { "key": "QOLLongitudinal", @@ -1081,7 +1176,8 @@ "description": "Miscellaneous acceleration and braking control changes to fine-tune how openpilot drives.", "data_type": "bool", "ui_type": "toggle", - "is_parent_toggle": true + "is_parent_toggle": true, + "settings_tier": "simple" }, { "key": "CustomCruise", @@ -1091,7 +1187,8 @@ "ui_type": "numeric", "min": 1.0, "max": 99.0, - "parent_key": "QOLLongitudinal" + "parent_key": "QOLLongitudinal", + "settings_tier": "simple" }, { "key": "CustomCruiseLong", @@ -1101,7 +1198,8 @@ "ui_type": "numeric", "min": 1.0, "max": 99.0, - "parent_key": "QOLLongitudinal" + "parent_key": "QOLLongitudinal", + "settings_tier": "simple" }, { "key": "ForceStops", @@ -1109,7 +1207,8 @@ "description": "Force openpilot to stop whenever the driving model \"detects\" a red light or stop sign.\n\nDisclaimer: openpilot does not explicitly detect traffic lights or stop signs. In \"Experimental Mode\", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!", "data_type": "bool", "ui_type": "toggle", - "parent_key": "QOLLongitudinal" + "parent_key": "QOLLongitudinal", + "settings_tier": "simple" }, { "key": "ForceStopDistanceOffset", @@ -1119,7 +1218,8 @@ "ui_type": "numeric", "min": -20.0, "max": 20.0, - "parent_key": "QOLLongitudinal" + "parent_key": "QOLLongitudinal", + "settings_tier": "simple" }, { "key": "ForceStandstill", @@ -1127,7 +1227,8 @@ "description": "Keep openpilot in the standstill state until you press the gas pedal or the Resume/+ cruise button.\n\nThis applies to any engaged stop, not just red lights or stop signs.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "QOLLongitudinal" + "parent_key": "QOLLongitudinal", + "settings_tier": "simple" }, { "key": "RadarTakeoffs", @@ -1135,7 +1236,8 @@ "description": "Turns on/off using radar data to track leads at standstill, making following/takeoffs more responsive once leads move.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "QOLLongitudinal" + "parent_key": "QOLLongitudinal", + "settings_tier": "simple" }, { "key": "IncreasedStoppedDistance", @@ -1145,7 +1247,8 @@ "ui_type": "numeric", "min": 0.0, "max": 10.0, - "parent_key": "QOLLongitudinal" + "parent_key": "QOLLongitudinal", + "settings_tier": "simple" }, { "key": "MapGears", @@ -1153,7 +1256,8 @@ "description": "Map the Acceleration or Deceleration profiles to the vehicle's \"Eco\" and \"Sport\" gear modes.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "QOLLongitudinal" + "parent_key": "QOLLongitudinal", + "settings_tier": "simple" }, { "key": "SetSpeedOffset", @@ -1163,7 +1267,8 @@ "ui_type": "numeric", "min": 0.0, "max": 99.0, - "parent_key": "QOLLongitudinal" + "parent_key": "QOLLongitudinal", + "settings_tier": "simple" }, { "key": "RedneckCruise", @@ -1171,15 +1276,8 @@ "description": "On supported Hyundai stock-long cars, use RES/SET button presses to match the cluster set speed to StarPilot's target.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "QOLLongitudinal" - }, - { - "key": "ReverseCruise", - "label": "Reverse Cruise Increase", - "description": "Reverse the cruise control button behavior so a short press increases the set speed by 5 instead of 1.", - "data_type": "bool", - "ui_type": "toggle", - "parent_key": "QOLLongitudinal" + "parent_key": "QOLLongitudinal", + "settings_tier": "simple" }, { "key": "WeatherPresets", @@ -1187,7 +1285,8 @@ "description": "Automatically adjust driving behavior based on real-time weather. Helps maintain comfort and safety in low visibility, rain, or snow.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "QOLLongitudinal" + "parent_key": "QOLLongitudinal", + "settings_tier": "simple" }, { "key": "LowVisibilityOffsets", @@ -1195,7 +1294,8 @@ "description": "Customise settings for driving in low visibility situations", "ui_type": "group", "is_parent_toggle": true, - "parent_key": "WeatherPresets" + "parent_key": "WeatherPresets", + "settings_tier": "simple" }, { "key": "IncreaseFollowingLowVisibility", @@ -1206,7 +1306,8 @@ "min": 0.0, "max": 3.0, "step": 0.01, - "parent_key": "LowVisibilityOffsets" + "parent_key": "LowVisibilityOffsets", + "settings_tier": "simple" }, { "key": "IncreasedStoppedDistanceLowVisibility", @@ -1216,7 +1317,8 @@ "ui_type": "numeric", "min": 0.0, "max": 10.0, - "parent_key": "LowVisibilityOffsets" + "parent_key": "LowVisibilityOffsets", + "settings_tier": "simple" }, { "key": "ReduceAccelerationLowVisibility", @@ -1227,7 +1329,8 @@ "min": 0.0, "max": 99.0, "step": 1.0, - "parent_key": "LowVisibilityOffsets" + "parent_key": "LowVisibilityOffsets", + "settings_tier": "simple" }, { "key": "ReduceLateralAccelerationLowVisibility", @@ -1238,7 +1341,8 @@ "min": 0.0, "max": 99.0, "step": 1.0, - "parent_key": "LowVisibilityOffsets" + "parent_key": "LowVisibilityOffsets", + "settings_tier": "simple" }, { "key": "RainOffsets", @@ -1246,7 +1350,8 @@ "description": "Customise settings for driving in light & medium rain", "ui_type": "group", "is_parent_toggle": true, - "parent_key": "WeatherPresets" + "parent_key": "WeatherPresets", + "settings_tier": "simple" }, { "key": "IncreaseFollowingRain", @@ -1257,7 +1362,8 @@ "min": 0.0, "max": 3.0, "step": 0.01, - "parent_key": "RainOffsets" + "parent_key": "RainOffsets", + "settings_tier": "simple" }, { "key": "IncreasedStoppedDistanceRain", @@ -1267,7 +1373,8 @@ "ui_type": "numeric", "min": 0.0, "max": 10.0, - "parent_key": "RainOffsets" + "parent_key": "RainOffsets", + "settings_tier": "simple" }, { "key": "ReduceAccelerationRain", @@ -1278,7 +1385,8 @@ "min": 0.0, "max": 99.0, "step": 1.0, - "parent_key": "RainOffsets" + "parent_key": "RainOffsets", + "settings_tier": "simple" }, { "key": "ReduceLateralAccelerationRain", @@ -1289,7 +1397,8 @@ "min": 0.0, "max": 99.0, "step": 1.0, - "parent_key": "RainOffsets" + "parent_key": "RainOffsets", + "settings_tier": "simple" }, { "key": "RainStormOffsets", @@ -1297,7 +1406,8 @@ "description": "Customise settings for driving in heavy rain", "ui_type": "group", "is_parent_toggle": true, - "parent_key": "WeatherPresets" + "parent_key": "WeatherPresets", + "settings_tier": "simple" }, { "key": "IncreaseFollowingRainStorm", @@ -1308,7 +1418,8 @@ "min": 0.0, "max": 3.0, "step": 0.01, - "parent_key": "RainStormOffsets" + "parent_key": "RainStormOffsets", + "settings_tier": "simple" }, { "key": "IncreasedStoppedDistanceRainStorm", @@ -1318,7 +1429,8 @@ "ui_type": "numeric", "min": 0.0, "max": 10.0, - "parent_key": "RainStormOffsets" + "parent_key": "RainStormOffsets", + "settings_tier": "simple" }, { "key": "ReduceAccelerationRainStorm", @@ -1329,7 +1441,8 @@ "min": 0.0, "max": 99.0, "step": 1.0, - "parent_key": "RainStormOffsets" + "parent_key": "RainStormOffsets", + "settings_tier": "simple" }, { "key": "ReduceLateralAccelerationRainStorm", @@ -1340,7 +1453,8 @@ "min": 0.0, "max": 99.0, "step": 1.0, - "parent_key": "RainStormOffsets" + "parent_key": "RainStormOffsets", + "settings_tier": "simple" }, { "key": "SnowOffsets", @@ -1348,7 +1462,8 @@ "description": "Customise settings for driving in snow", "ui_type": "group", "is_parent_toggle": true, - "parent_key": "WeatherPresets" + "parent_key": "WeatherPresets", + "settings_tier": "simple" }, { "key": "IncreaseFollowingSnow", @@ -1359,7 +1474,8 @@ "min": 0.0, "max": 3.0, "step": 0.01, - "parent_key": "SnowOffsets" + "parent_key": "SnowOffsets", + "settings_tier": "simple" }, { "key": "IncreasedStoppedDistanceSnow", @@ -1369,7 +1485,8 @@ "ui_type": "numeric", "min": 0.0, "max": 10.0, - "parent_key": "SnowOffsets" + "parent_key": "SnowOffsets", + "settings_tier": "simple" }, { "key": "ReduceAccelerationSnow", @@ -1380,7 +1497,8 @@ "min": 0.0, "max": 99.0, "step": 1.0, - "parent_key": "SnowOffsets" + "parent_key": "SnowOffsets", + "settings_tier": "simple" }, { "key": "ReduceLateralAccelerationSnow", @@ -1391,7 +1509,8 @@ "min": 0.0, "max": 99.0, "step": 1.0, - "parent_key": "SnowOffsets" + "parent_key": "SnowOffsets", + "settings_tier": "simple" }, { "key": "SpeedLimitController", @@ -1399,7 +1518,8 @@ "description": "Limit openpilot's maximum driving speed to the current speed limit obtained from downloaded maps, Mapbox, the dashboard, or vision-detected signs.", "data_type": "bool", "ui_type": "toggle", - "is_parent_toggle": true + "is_parent_toggle": true, + "settings_tier": "advanced" }, { "key": "VisionSpeedLimitDetection", @@ -1407,7 +1527,8 @@ "description": "Use the road camera to detect speed limit signs for SLC and speed limit filling.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "SpeedLimitController" + "parent_key": "SpeedLimitController", + "settings_tier": "advanced" }, { "key": "VisionSpeedLimitAutoBookmark", @@ -1415,7 +1536,8 @@ "description": "Automatically save confirmed vision-detected speed limit signs into the speed-limit debug session so they can be imported into the training set later.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "VisionSpeedLimitDetection" + "parent_key": "VisionSpeedLimitDetection", + "settings_tier": "advanced" }, { "key": "VisionSpeedLimitTrainingCollector", @@ -1423,7 +1545,8 @@ "description": "Save lower-threshold vision sign candidates into the debug session for later training import without showing or applying them live. Leave this on if you want to help improve the model.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "VisionSpeedLimitDetection" + "parent_key": "VisionSpeedLimitDetection", + "settings_tier": "advanced" }, { "key": "VisionSpeedLimitAutoPreserveSegment", @@ -1431,7 +1554,8 @@ "description": "Also send a real bookmark for confirmed auto-bookmarks so loggerd preserves the route segment. Leave this off unless you specifically want the extra storage usage.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "VisionSpeedLimitAutoBookmark" + "parent_key": "VisionSpeedLimitAutoBookmark", + "settings_tier": "advanced" }, { "key": "SLCConfirmation", @@ -1439,7 +1563,8 @@ "description": "Ask before changing to a new speed limit. To accept, tap the flashing on-screen widget or press the Cruise Increase button. To deny, press the Cruise Decrease button or ignore the prompt for 30 seconds.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "SpeedLimitController" + "parent_key": "SpeedLimitController", + "settings_tier": "advanced" }, { "key": "SLCConfirmationLower", @@ -1447,7 +1572,8 @@ "description": "Require confirmation before applying a newly detected lower speed limit.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "SLCConfirmation" + "parent_key": "SLCConfirmation", + "settings_tier": "advanced" }, { "key": "SLCConfirmationHigher", @@ -1455,7 +1581,8 @@ "description": "Require confirmation before applying a newly detected higher speed limit.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "SLCConfirmation" + "parent_key": "SLCConfirmation", + "settings_tier": "advanced" }, { "key": "SLCLookaheadHigher", @@ -1465,7 +1592,8 @@ "ui_type": "numeric", "min": 0.0, "max": 30.0, - "parent_key": "SpeedLimitController" + "parent_key": "SpeedLimitController", + "settings_tier": "advanced" }, { "key": "SLCLookaheadLower", @@ -1475,7 +1603,8 @@ "ui_type": "numeric", "min": 0.0, "max": 30.0, - "parent_key": "SpeedLimitController" + "parent_key": "SpeedLimitController", + "settings_tier": "advanced" }, { "key": "SetSpeedLimit", @@ -1483,7 +1612,8 @@ "description": "When openpilot is first enabled, automatically set the max speed to the current posted limit.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "SpeedLimitController" + "parent_key": "SpeedLimitController", + "settings_tier": "advanced" }, { "key": "SLCFallback", @@ -1505,7 +1635,8 @@ "label": "Previous Limit" } ], - "parent_key": "SpeedLimitController" + "parent_key": "SpeedLimitController", + "settings_tier": "advanced" }, { "key": "SLCOverride", @@ -1527,7 +1658,8 @@ "label": "Max Set Speed" } ], - "parent_key": "SpeedLimitController" + "parent_key": "SpeedLimitController", + "settings_tier": "advanced" }, { "key": "SLCMapboxFiller", @@ -1535,7 +1667,8 @@ "description": "Use Mapbox speed-limit data when no other source is available.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "SpeedLimitController" + "parent_key": "SpeedLimitController", + "settings_tier": "advanced" }, { "key": "SLCPriority1", @@ -1565,7 +1698,8 @@ "label": "Lowest" } ], - "parent_key": "SpeedLimitController" + "parent_key": "SpeedLimitController", + "settings_tier": "advanced" }, { "key": "SLCPriority2", @@ -1591,7 +1725,8 @@ "label": "Vision" } ], - "parent_key": "SpeedLimitController" + "parent_key": "SpeedLimitController", + "settings_tier": "advanced" }, { "key": "Offset1", @@ -1601,7 +1736,8 @@ "ui_type": "numeric", "min": -99.0, "max": 99.0, - "parent_key": "SpeedLimitController" + "parent_key": "SpeedLimitController", + "settings_tier": "advanced" }, { "key": "Offset2", @@ -1611,7 +1747,8 @@ "ui_type": "numeric", "min": -99.0, "max": 99.0, - "parent_key": "SpeedLimitController" + "parent_key": "SpeedLimitController", + "settings_tier": "advanced" }, { "key": "Offset3", @@ -1621,7 +1758,8 @@ "ui_type": "numeric", "min": -99.0, "max": 99.0, - "parent_key": "SpeedLimitController" + "parent_key": "SpeedLimitController", + "settings_tier": "advanced" }, { "key": "Offset4", @@ -1631,7 +1769,8 @@ "ui_type": "numeric", "min": -99.0, "max": 99.0, - "parent_key": "SpeedLimitController" + "parent_key": "SpeedLimitController", + "settings_tier": "advanced" }, { "key": "Offset5", @@ -1641,7 +1780,8 @@ "ui_type": "numeric", "min": -99.0, "max": 99.0, - "parent_key": "SpeedLimitController" + "parent_key": "SpeedLimitController", + "settings_tier": "advanced" }, { "key": "Offset6", @@ -1651,7 +1791,8 @@ "ui_type": "numeric", "min": -99.0, "max": 99.0, - "parent_key": "SpeedLimitController" + "parent_key": "SpeedLimitController", + "settings_tier": "advanced" }, { "key": "Offset7", @@ -1661,7 +1802,8 @@ "ui_type": "numeric", "min": -99.0, "max": 99.0, - "parent_key": "SpeedLimitController" + "parent_key": "SpeedLimitController", + "settings_tier": "advanced" }, { "key": "ShowSLCOffset", @@ -1669,7 +1811,8 @@ "description": "Show the current offset from the posted limit on the driving screen.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "SpeedLimitController" + "parent_key": "SpeedLimitController", + "settings_tier": "advanced" }, { "key": "SpeedLimitSources", @@ -1677,7 +1820,8 @@ "description": "Display the speed-limit sources and their current values on the driving screen.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "SpeedLimitController" + "parent_key": "SpeedLimitController", + "settings_tier": "advanced" }, { "key": "ConditionalChill", @@ -1685,7 +1829,8 @@ "description": "Keep \"Experimental Mode\" on by default, but temporarily switch to \"Chill Mode\" in simple cruising scenes where speed holding is usually better.", "data_type": "bool", "ui_type": "toggle", - "is_parent_toggle": true + "is_parent_toggle": true, + "settings_tier": "advanced" }, { "key": "PersistChillState", @@ -1693,7 +1838,8 @@ "description": "Keep your manual Conditional Chill override through reboots until you manually clear it.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "ConditionalChill" + "parent_key": "ConditionalChill", + "settings_tier": "advanced" }, { "key": "CCMSpeed", @@ -1704,7 +1850,8 @@ "min": 0.0, "max": 99.0, "step": 1.0, - "parent_key": "ConditionalChill" + "parent_key": "ConditionalChill", + "settings_tier": "advanced" }, { "key": "CCMSpeedLead", @@ -1715,7 +1862,8 @@ "min": 0.0, "max": 99.0, "step": 1.0, - "parent_key": "ConditionalChill" + "parent_key": "ConditionalChill", + "settings_tier": "advanced" }, { "key": "CCMLead", @@ -1723,7 +1871,8 @@ "description": "Switch to \"Chill Mode\" when following a steady, well-tracked lead vehicle at cruising speeds.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "ConditionalChill" + "parent_key": "ConditionalChill", + "settings_tier": "advanced" }, { "key": "CCMLaunchAssist", @@ -1731,7 +1880,8 @@ "description": "Temporarily switch to \"Chill Mode\" when starting from a stop if planner is already allowing throttle. Useful if your car launches too slowly from lights or stop signs.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "ConditionalChill" + "parent_key": "ConditionalChill", + "settings_tier": "advanced" }, { "key": "CCMSetSpeedMargin", @@ -1742,7 +1892,8 @@ "min": 0.0, "max": 15.0, "step": 1.0, - "parent_key": "ConditionalChill" + "parent_key": "ConditionalChill", + "settings_tier": "advanced" }, { "key": "ShowCCMStatus", @@ -1750,7 +1901,8 @@ "description": "Show which condition triggered \"Chill Mode\" on the driving screen.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "ConditionalChill" + "parent_key": "ConditionalChill", + "settings_tier": "advanced" }, { "key": "SLCAbbreviatedSources", @@ -1758,7 +1910,8 @@ "description": "Render the speed-limit sources as compact text labels (e.g. \"Dash-45\", \"MapD-30\") without icons.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "SpeedLimitController" + "parent_key": "SpeedLimitController", + "settings_tier": "advanced" }, { "key": "SLCActiveSourcesOnly", @@ -1766,7 +1919,8 @@ "description": "Hide source rows that have no current speed limit reading. Works with both abbreviated and full display.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "SpeedLimitController" + "parent_key": "SpeedLimitController", + "settings_tier": "advanced" } ] }, @@ -1780,7 +1934,8 @@ "description": "Advanced visual changes to fine-tune how the driving screen looks.", "data_type": "bool", "ui_type": "toggle", - "is_parent_toggle": true + "is_parent_toggle": true, + "settings_tier": "simple" }, { "key": "HideSpeed", @@ -1788,14 +1943,16 @@ "description": "Hide the current speed from the driving screen.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "AdvancedCustomUI" + "parent_key": "AdvancedCustomUI", + "settings_tier": "simple" }, { "key": "LeadIndicator", "label": "Lead Indicator", "description": "Show the lead-vehicle marker on the driving screen.", "data_type": "bool", - "ui_type": "toggle" + "ui_type": "toggle", + "settings_tier": "simple" }, { "key": "HideMaxSpeed", @@ -1803,7 +1960,8 @@ "description": "Hide the max speed from the driving screen.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "AdvancedCustomUI" + "parent_key": "AdvancedCustomUI", + "settings_tier": "simple" }, { "key": "HideAlerts", @@ -1811,7 +1969,8 @@ "description": "Hide non-critical alerts from the driving screen.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "AdvancedCustomUI" + "parent_key": "AdvancedCustomUI", + "settings_tier": "simple" }, { "key": "HideSpeedLimit", @@ -1819,7 +1978,8 @@ "description": "Hide posted speed limits from the driving screen.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "AdvancedCustomUI" + "parent_key": "AdvancedCustomUI", + "settings_tier": "simple" }, { "key": "HideSteeringWheel", @@ -1827,7 +1987,8 @@ "description": "Hide the steering-wheel button from the top-right of the driving screen.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "AdvancedCustomUI" + "parent_key": "AdvancedCustomUI", + "settings_tier": "simple" }, { "key": "WheelSpeed", @@ -1835,14 +1996,16 @@ "description": "Use the vehicle's wheel speed instead of the cluster speed. This is purely a visual change and doesn't impact how openpilot drives!", "data_type": "bool", "ui_type": "toggle", - "parent_key": "AdvancedCustomUI" + "parent_key": "AdvancedCustomUI", + "settings_tier": "simple" }, { "key": "HolidayThemes", "label": "Holiday Themes", "description": "Automatically apply seasonal theme assets during holiday windows. Turn this off to keep your normal theme year-round.", "data_type": "bool", - "ui_type": "toggle" + "ui_type": "toggle", + "settings_tier": "simple" }, { "key": "CustomUI", @@ -1850,7 +2013,8 @@ "description": "Custom StarPilot widgets for the driving screen.", "data_type": "bool", "ui_type": "toggle", - "is_parent_toggle": true + "is_parent_toggle": true, + "settings_tier": "simple" }, { "key": "AccelerationPath", @@ -1858,7 +2022,8 @@ "description": "Color the driving path by planned acceleration and braking.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "CustomUI" + "parent_key": "CustomUI", + "settings_tier": "simple" }, { "key": "RainbowPath", @@ -1866,7 +2031,8 @@ "description": "Color the driving path like a rainbow road.\n\nOn the Python UIs this overrides acceleration and braking path coloring.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "CustomUI" + "parent_key": "CustomUI", + "settings_tier": "simple" }, { "key": "ShowModeStatusBanner", @@ -1874,7 +2040,8 @@ "description": "Show a popup banner when the Python driving UIs switch into chill, experimental, switchback, or override mode.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "CustomUI" + "parent_key": "CustomUI", + "settings_tier": "simple" }, { "key": "AdjacentPath", @@ -1882,7 +2049,8 @@ "description": "Show the driving paths for the left and right lanes.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "CustomUI" + "parent_key": "CustomUI", + "settings_tier": "simple" }, { "key": "BlindSpotPath", @@ -1890,7 +2058,8 @@ "description": "Show a red path when a vehicle is in that lane's blind spot.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "CustomUI" + "parent_key": "CustomUI", + "settings_tier": "simple" }, { "key": "Compass", @@ -1898,7 +2067,8 @@ "description": "Show the current driving direction with a simple on-screen compass.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "CustomUI" + "parent_key": "CustomUI", + "settings_tier": "simple" }, { "key": "OnroadDistanceButton", @@ -1906,7 +2076,8 @@ "description": "Control and view the current driving personality via a driving screen widget.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "CustomUI" + "parent_key": "CustomUI", + "settings_tier": "simple" }, { "key": "PedalsOnUI", @@ -1915,7 +2086,8 @@ "data_type": "bool", "ui_type": "toggle", "is_parent_toggle": true, - "parent_key": "CustomUI" + "parent_key": "CustomUI", + "settings_tier": "simple" }, { "key": "DynamicPedalsOnUI", @@ -1923,7 +2095,8 @@ "description": "Fade the gas and brake indicators based on how much openpilot is accelerating or braking.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "PedalsOnUI" + "parent_key": "PedalsOnUI", + "settings_tier": "simple" }, { "key": "StaticPedalsOnUI", @@ -1931,7 +2104,8 @@ "description": "Show full-strength gas and brake indicators when active, and dim them when inactive.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "PedalsOnUI" + "parent_key": "PedalsOnUI", + "settings_tier": "simple" }, { "key": "RotatingWheel", @@ -1939,7 +2113,8 @@ "description": "Rotate the driving screen wheel with the physical steering wheel.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "CustomUI" + "parent_key": "CustomUI", + "settings_tier": "simple" }, { "key": "ModelUI", @@ -1947,7 +2122,8 @@ "description": "Model visualizations for the driving path, lane lines, path edges, and road edges.", "data_type": "bool", "ui_type": "toggle", - "is_parent_toggle": true + "is_parent_toggle": true, + "settings_tier": "simple" }, { "key": "DynamicPathWidth", @@ -1955,7 +2131,8 @@ "description": "Change the path width based on engagement.\n\nFully Engaged: 100%\nAlways On Lateral: 75%\nDisengaged: 50%", "data_type": "bool", "ui_type": "toggle", - "parent_key": "ModelUI" + "parent_key": "ModelUI", + "settings_tier": "simple" }, { "key": "LaneLinesWidth", @@ -1965,7 +2142,8 @@ "ui_type": "numeric", "min": 0.0, "max": 24.0, - "parent_key": "ModelUI" + "parent_key": "ModelUI", + "settings_tier": "simple" }, { "key": "LaneLinesColor", @@ -1974,7 +2152,8 @@ "data_type": "string", "ui_type": "color", "default_color": "#00FF00", - "parent_key": "ModelUI" + "parent_key": "ModelUI", + "settings_tier": "simple" }, { "key": "BorderWidth", @@ -1985,7 +2164,8 @@ "min": 25.0, "max": 250.0, "step": 5.0, - "parent_key": "ModelUI" + "parent_key": "ModelUI", + "settings_tier": "simple" }, { "key": "PathEdgeWidth", @@ -1995,7 +2175,8 @@ "ui_type": "numeric", "min": 0.0, "max": 100.0, - "parent_key": "ModelUI" + "parent_key": "ModelUI", + "settings_tier": "simple" }, { "key": "PathEdgesColor", @@ -2004,7 +2185,8 @@ "data_type": "string", "ui_type": "color", "default_color": "#00FF00", - "parent_key": "ModelUI" + "parent_key": "ModelUI", + "settings_tier": "simple" }, { "key": "PathWidth", @@ -2015,7 +2197,8 @@ "min": 0.0, "max": 10.0, "step": 0.1, - "parent_key": "ModelUI" + "parent_key": "ModelUI", + "settings_tier": "simple" }, { "key": "PathColor", @@ -2024,7 +2207,8 @@ "data_type": "string", "ui_type": "color", "default_color": "#30FF9C", - "parent_key": "ModelUI" + "parent_key": "ModelUI", + "settings_tier": "simple" }, { "key": "RoadEdgesWidth", @@ -2034,7 +2218,8 @@ "ui_type": "numeric", "min": 0.0, "max": 24.0, - "parent_key": "ModelUI" + "parent_key": "ModelUI", + "settings_tier": "simple" }, { "key": "NavigationUI", @@ -2042,14 +2227,16 @@ "description": "Speed limits, and other navigation widgets.", "data_type": "bool", "ui_type": "toggle", - "is_parent_toggle": true + "is_parent_toggle": true, + "settings_tier": "simple" }, { "key": "ClearNavOnOffroad", "label": "Clear Route When Offroad", "description": "Clear the active navigation destination when the device goes offroad.", "data_type": "bool", - "ui_type": "toggle" + "ui_type": "toggle", + "settings_tier": "simple" }, { "key": "ClearNavOnOffroadTimeoutMinutes", @@ -2060,7 +2247,8 @@ "min": 0, "max": 180, "step": 1, - "parent_key": "ClearNavOnOffroad" + "parent_key": "ClearNavOnOffroad", + "settings_tier": "simple" }, { "key": "RoadNameUI", @@ -2068,7 +2256,8 @@ "description": "Display the road name at the bottom of the driving screen using data from \"OpenStreetMap (OSM)\".", "data_type": "bool", "ui_type": "toggle", - "parent_key": "NavigationUI" + "parent_key": "NavigationUI", + "settings_tier": "simple" }, { "key": "ShowSpeedLimits", @@ -2076,7 +2265,8 @@ "description": "Show speed limits in the top-left corner of the driving screen. Uses data from the car's dashboard (if supported) and \"OpenStreetMap (OSM)\".", "data_type": "bool", "ui_type": "toggle", - "parent_key": "NavigationUI" + "parent_key": "NavigationUI", + "settings_tier": "simple" }, { "key": "SLCMapboxFiller", @@ -2084,7 +2274,8 @@ "description": "Use Mapbox speed-limit data when no other source is available.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "NavigationUI" + "parent_key": "NavigationUI", + "settings_tier": "simple" }, { "key": "UseVienna", @@ -2092,7 +2283,8 @@ "description": "Show Vienna-style (EU) speed-limit signs instead of MUTCD (US).", "data_type": "bool", "ui_type": "toggle", - "parent_key": "NavigationUI" + "parent_key": "NavigationUI", + "settings_tier": "simple" }, { "key": "QOLVisuals", @@ -2100,7 +2292,8 @@ "description": "Miscellaneous visual changes to fine-tune how the driving screen looks.", "data_type": "bool", "ui_type": "toggle", - "is_parent_toggle": true + "is_parent_toggle": true, + "settings_tier": "simple" }, { "key": "CameraView", @@ -2126,7 +2319,8 @@ "label": "Wide" } ], - "parent_key": "QOLVisuals" + "parent_key": "QOLVisuals", + "settings_tier": "simple" }, { "key": "DriverCamera", @@ -2134,7 +2328,8 @@ "description": "Show the driver camera feed when the vehicle is in reverse.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "QOLVisuals" + "parent_key": "QOLVisuals", + "settings_tier": "simple" }, { "key": "StoppedTimer", @@ -2142,7 +2337,8 @@ "description": "Show a timer when stopped in place of the current speed to indicate how long the vehicle has been stopped.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "QOLVisuals" + "parent_key": "QOLVisuals", + "settings_tier": "simple" }, { "key": "StockConfidenceBallWidget", @@ -2150,7 +2346,8 @@ "description": "Use the original moving confidence ball on the small comma 4 UI instead of the fixed confidence, CEM/CCM, and personality sidebar.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "QOLVisuals" + "parent_key": "QOLVisuals", + "settings_tier": "simple" }, { "key": "SimpleMode", @@ -2158,7 +2355,8 @@ "description": "Use a more stock-like presentation by hiding most branch-specific UI, theme, sound, and alert styling. This only changes presentation and does not change driving behavior.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "QOLVisuals" + "parent_key": "QOLVisuals", + "settings_tier": "simple" }, { "key": "HideChangingLanesBanner", @@ -2166,7 +2364,8 @@ "description": "Hide the 'Changing Lanes' banner from the driving screen.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "AdvancedCustomUI" + "parent_key": "AdvancedCustomUI", + "settings_tier": "simple" }, { "key": "HideDistanceProfileBanner", @@ -2174,7 +2373,8 @@ "description": "Hide the driving personality banner when changing distance profiles.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "AdvancedCustomUI" + "parent_key": "AdvancedCustomUI", + "settings_tier": "simple" }, { "key": "HideDMIcon", @@ -2182,7 +2382,8 @@ "description": "Hide the driver monitoring icon from the driving screen.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "AdvancedCustomUI" + "parent_key": "AdvancedCustomUI", + "settings_tier": "simple" }, { "key": "HideTurningBanner", @@ -2190,14 +2391,8 @@ "description": "Hide the 'Turning Left/Right' banner from the driving screen.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "AdvancedCustomUI" - }, - { - "key": "DisableWideRoad", - "label": "Disable Wide Road Camera", - "description": "Only enable this if the wide camera is broken or for development!\n\nDisabling the wide camera may degrade driving performance and cause instability.\n\nRequires a reboot to take effect.", - "data_type": "bool", - "ui_type": "toggle" + "parent_key": "AdvancedCustomUI", + "settings_tier": "simple" } ] }, @@ -2211,7 +2406,8 @@ "description": "Set how loud each type of openpilot alert is to keep routine prompts from becoming distracting.", "data_type": "bool", "ui_type": "toggle", - "is_parent_toggle": true + "is_parent_toggle": true, + "settings_tier": "simple" }, { "key": "SwitchbackModeCooldown", @@ -2222,7 +2418,8 @@ "min": 0.0, "max": 30.0, "step": 1.0, - "parent_key": "AlertVolumeControl" + "parent_key": "AlertVolumeControl", + "settings_tier": "simple" }, { "key": "BelowSteerSpeedVolume", @@ -2233,7 +2430,8 @@ "min": 0.0, "max": 101.0, "step": 1.0, - "parent_key": "AlertVolumeControl" + "parent_key": "AlertVolumeControl", + "settings_tier": "simple" }, { "key": "DisengageVolume", @@ -2244,7 +2442,8 @@ "min": 0.0, "max": 101.0, "step": 1.0, - "parent_key": "AlertVolumeControl" + "parent_key": "AlertVolumeControl", + "settings_tier": "simple" }, { "key": "EngageVolume", @@ -2255,7 +2454,8 @@ "min": 0.0, "max": 101.0, "step": 1.0, - "parent_key": "AlertVolumeControl" + "parent_key": "AlertVolumeControl", + "settings_tier": "simple" }, { "key": "PromptVolume", @@ -2266,7 +2466,8 @@ "min": 0.0, "max": 101.0, "step": 1.0, - "parent_key": "AlertVolumeControl" + "parent_key": "AlertVolumeControl", + "settings_tier": "simple" }, { "key": "PromptDistractedVolume", @@ -2277,7 +2478,8 @@ "min": 0.0, "max": 101.0, "step": 1.0, - "parent_key": "AlertVolumeControl" + "parent_key": "AlertVolumeControl", + "settings_tier": "simple" }, { "key": "RefuseVolume", @@ -2288,7 +2490,8 @@ "min": 0.0, "max": 101.0, "step": 1.0, - "parent_key": "AlertVolumeControl" + "parent_key": "AlertVolumeControl", + "settings_tier": "simple" }, { "key": "WarningSoftVolume", @@ -2299,7 +2502,8 @@ "min": 25.0, "max": 101.0, "step": 1.0, - "parent_key": "AlertVolumeControl" + "parent_key": "AlertVolumeControl", + "settings_tier": "simple" }, { "key": "WarningImmediateVolume", @@ -2310,7 +2514,8 @@ "min": 25.0, "max": 101.0, "step": 1.0, - "parent_key": "AlertVolumeControl" + "parent_key": "AlertVolumeControl", + "settings_tier": "simple" }, { "key": "CustomAlerts", @@ -2318,7 +2523,8 @@ "description": "Optional StarPilot alerts that highlight driving events in a more noticeable way.", "data_type": "bool", "ui_type": "toggle", - "is_parent_toggle": true + "is_parent_toggle": true, + "settings_tier": "simple" }, { "key": "GoatScream", @@ -2326,7 +2532,8 @@ "description": "Play the infamous \"Goat Scream\" when the steering controller reaches its limit. Based on the \"Turn Exceeds Steering Limit\" event.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "CustomAlerts" + "parent_key": "CustomAlerts", + "settings_tier": "simple" }, { "key": "GoatScreamCriticalAlerts", @@ -2334,7 +2541,8 @@ "description": "Play the infamous \"Goat Scream\" for full-screen critical alerts that require immediate takeover.\n\nExamples include: \"TAKE CONTROL IMMEDIATELY\" and \"Stock AEB: Risk of Collision\".", "data_type": "bool", "ui_type": "toggle", - "parent_key": "CustomAlerts" + "parent_key": "CustomAlerts", + "settings_tier": "simple" }, { "key": "GreenLightAlert", @@ -2342,7 +2550,8 @@ "description": "Play an alert when the model predicts a red light has turned green.\n\nDisclaimer: openpilot does not explicitly detect traffic lights. This alert is based on end-to-end model predictions from camera input and may trigger even when the light has not changed.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "CustomAlerts" + "parent_key": "CustomAlerts", + "settings_tier": "simple" }, { "key": "LeadDepartingAlert", @@ -2350,7 +2559,8 @@ "description": "Play an alert when the lead vehicle departs from a stop.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "CustomAlerts" + "parent_key": "CustomAlerts", + "settings_tier": "simple" }, { "key": "LoudBlindspotAlert", @@ -2358,7 +2568,8 @@ "description": "Play a louder alert if a vehicle is in the blind spot when attempting to change lanes. Based on the \"Car Detected in Blindspot\" event.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "CustomAlerts" + "parent_key": "CustomAlerts", + "settings_tier": "simple" }, { "key": "LoudBlindspotAlertWhenDisengaged", @@ -2366,7 +2577,8 @@ "description": "Play the loud blind spot alert while lateral control is off or paused. Useful when steering pauses on turn signal, since the lane-change state machine is inactive then.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "CustomAlerts" + "parent_key": "CustomAlerts", + "settings_tier": "simple" }, { "key": "SpeedLimitChangedAlert", @@ -2374,7 +2586,8 @@ "description": "Play an alert when the posted speed limit changes.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "CustomAlerts" + "parent_key": "CustomAlerts", + "settings_tier": "simple" } ] }, @@ -2388,7 +2601,8 @@ "description": "Select your car make.", "data_type": "string", "ui_type": "dropdown", - "options_endpoint": "/api/fingerprints/makes" + "options_endpoint": "/api/fingerprints/makes", + "settings_tier": "simple" }, { "key": "CarModel", @@ -2396,35 +2610,40 @@ "description": "Choose the fingerprint platform to use when automatic detection is disabled.", "data_type": "string", "ui_type": "dropdown", - "options_endpoint": "/api/fingerprints/models?make={CarMake}" + "options_endpoint": "/api/fingerprints/models?make={CarMake}", + "settings_tier": "simple" }, { "key": "ForceFingerprint", "label": "Disable Automatic Fingerprint Detection", "description": "Force the selected fingerprint and prevent it from changing automatically.", "data_type": "bool", - "ui_type": "toggle" + "ui_type": "toggle", + "settings_tier": "simple" }, { "key": "IsRHD", "label": "Right Hand Driving", "description": "Use right-hand-drive driver monitoring. This follows the auto-detected side until changed manually.", "data_type": "bool", - "ui_type": "toggle" + "ui_type": "toggle", + "settings_tier": "simple" }, { "key": "DisableOpenpilotLongitudinal", "label": "Disable openpilot Longitudinal", "description": "Use the vehicle's stock longitudinal control instead of openpilot longitudinal control. This can stop openpilot from sending cruise-control acceleration and braking commands on supported vehicles.", "data_type": "bool", - "ui_type": "toggle" + "ui_type": "toggle", + "settings_tier": "simple" }, { "key": "TeslaCoopSteering", "label": "Tesla Model 3 Cooperative Steering", "description": "For Tesla Model 3 only. Converts light driver steering input into bounded steering-wheel rotation while lateral control remains active. Change while parked.", "data_type": "bool", - "ui_type": "toggle" + "ui_type": "toggle", + "settings_tier": "simple" }, { "key": "NAPRadarEnabled", @@ -2432,7 +2651,8 @@ "description": "Use the stock Bosch radar path on pre-Autopilot Teslas.", "data_type": "bool", "ui_type": "toggle", - "is_parent_toggle": true + "is_parent_toggle": true, + "settings_tier": "simple" }, { "key": "NAPRadarBehindNosecone", @@ -2440,7 +2660,8 @@ "description": "Enable this if the Bosch radar is mounted behind the nosecone instead of being exposed.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "NAPRadarEnabled" + "parent_key": "NAPRadarEnabled", + "settings_tier": "simple" }, { "key": "NAPRadarOffset", @@ -2452,7 +2673,8 @@ "max": 2.0, "step": 0.01, "precision": 2, - "parent_key": "NAPRadarEnabled" + "parent_key": "NAPRadarEnabled", + "settings_tier": "simple" }, { "key": "NAPPedalEnabled", @@ -2460,7 +2682,8 @@ "description": "Use a comma pedal interceptor for acceleration and regenerative braking on pre-Autopilot Teslas.", "data_type": "bool", "ui_type": "toggle", - "is_parent_toggle": true + "is_parent_toggle": true, + "settings_tier": "simple" }, { "key": "NAPPedalCanBus", @@ -2478,7 +2701,8 @@ "value": 2, "label": "CAN 2" } - ] + ], + "settings_tier": "simple" }, { "key": "NAPAdaptiveAccel", @@ -2486,7 +2710,8 @@ "description": "Reduce maximum acceleration as you close in on a lead vehicle when Tesla pedal-long is active.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "NAPPedalEnabled" + "parent_key": "NAPPedalEnabled", + "settings_tier": "simple" }, { "key": "NAPPedalCalibDone", @@ -2494,7 +2719,8 @@ "description": "Enable only after entering valid Tesla pedal calibration values. Pedal-long stays inactive until this is on.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "NAPPedalEnabled" + "parent_key": "NAPPedalEnabled", + "settings_tier": "simple" }, { "key": "NAPPedalCalibFactor", @@ -2506,7 +2732,8 @@ "max": 10.0, "step": 0.01, "precision": 2, - "parent_key": "NAPPedalEnabled" + "parent_key": "NAPPedalEnabled", + "settings_tier": "simple" }, { "key": "NAPPedalCalibZero", @@ -2518,91 +2745,104 @@ "max": 50.0, "step": 0.01, "precision": 2, - "parent_key": "NAPPedalEnabled" + "parent_key": "NAPPedalEnabled", + "settings_tier": "simple" }, { "key": "GMPedalLongitudinal", "label": "Use Pedal For Longitudinal", "description": "Use the pedal interceptor for full longitudinal control on supported GM vehicles.", "data_type": "bool", - "ui_type": "toggle" + "ui_type": "toggle", + "settings_tier": "simple" }, { "key": "GMDashSpoofOffsets", "label": "Apply Offsets To Dash Spoof", "description": "On GM pedal-long cars, add the configured set-speed offset to the spoofed dash set speed so it matches the on-screen set speed.", "data_type": "bool", - "ui_type": "toggle" + "ui_type": "toggle", + "settings_tier": "simple" }, { "key": "IgnoreIgnitionLine", "label": "Use CAN Ignition Only", "description": "Use Panda firmware that ignores the physical ignition line and starts from CAN ignition only.\n\nRequires a Panda flash. Use this only on vehicles with reliable CAN ignition when the harness box reports false ignition.", "data_type": "bool", - "ui_type": "toggle" + "ui_type": "toggle", + "settings_tier": "simple" }, { "key": "LongPitch", "label": "Smooth Pedal Response on Hills", "description": "Smoothen acceleration and braking when driving downhill/uphill.", "data_type": "bool", - "ui_type": "toggle" + "ui_type": "toggle", + "settings_tier": "simple" }, { "key": "RemoteStartBootsComma", "label": "Remote Start Boots Comma (GM)", "description": "Use the remote-start GM panda firmware at boot.\n\nRequired for GM remote-start startup signal behavior.", "data_type": "bool", - "ui_type": "toggle" + "ui_type": "toggle", + "settings_tier": "simple" }, { "key": "HKGRemoteStartBootsComma", "label": "Remote Start Boots Comma (HKG)", "description": "Use the remote-climate Hyundai/Kia/Genesis CAN-FD panda firmware at boot.\n\nRequired for EV remote-climate startup signal behavior.", "data_type": "bool", - "ui_type": "toggle" + "ui_type": "toggle", + "settings_tier": "simple" }, { "key": "VoltSNG", "label": "Stop-and-Go Hack", "description": "Force stop-and-go on the 2017 Chevy Volt.", "data_type": "bool", - "ui_type": "toggle" + "ui_type": "toggle", + "settings_tier": "simple" }, { "key": "GMAutoHold", "label": "Volt Auto Hold", "description": "Hold the car at a stop on supported non-CC-only Chevy Volts until the gas pedal is pressed.", "data_type": "bool", - "ui_type": "toggle" + "ui_type": "toggle", + "settings_tier": "simple" }, { "key": "VoltOnePedalMode", "label": "Volt One Pedal Mode", "description": "On supported Chevy Volts in L / single-pedal mode, blend friction braking so the car can slow to a stop and hold without using the brake pedal.", "data_type": "bool", - "ui_type": "toggle" + "ui_type": "toggle", + "settings_tier": "simple" }, { "key": "JeepBrakeHold", "label": "Jeep Brake Hold", "description": "Hold the brakes after Jeep ACC times out at a stop, then send resume when traffic moves again.", "data_type": "bool", - "ui_type": "toggle" + "ui_type": "toggle", + "settings_tier": "simple" }, { "key": "SubaruSNG", "label": "Stop and Go", "description": "Stop and go for supported Subaru vehicles.", "data_type": "bool", - "ui_type": "toggle" + "ui_type": "toggle", + "settings_tier": "simple" }, { "key": "SubaruSNGManualParkingBrake", "label": "Stop and Go for Manual Parking Brake", "description": "Use the manual-parking-brake Subaru stop-and-go strategy. Enable this for supported Subaru Global models with a manual handbrake. Keep it off on models with an electric parking brake.", "data_type": "bool", - "ui_type": "toggle" + "ui_type": "toggle", + "settings_tier": "simple" }, { "key": "ClusterOffset", @@ -2612,28 +2852,32 @@ "ui_type": "numeric", "min": 1.0, "max": 1.05, - "step": 0.001 + "step": 0.001, + "settings_tier": "simple" }, { "key": "SNGHack", "label": "Stop-and-Go Hack", "description": "Force stop-and-go on Lexus/Toyota vehicles without stock stop-and-go functionality.", "data_type": "bool", - "ui_type": "toggle" + "ui_type": "toggle", + "settings_tier": "simple" }, { "key": "ToyotaAutoHold", "label": "Toyota Auto Hold", "description": "Hold the brakes at a stop on supported Toyota/Lexus TSS2 vehicles when cruise main is available and cruise is not active.", "data_type": "bool", - "ui_type": "toggle" + "ui_type": "toggle", + "settings_tier": "simple" }, { "key": "RemapCancelToDistance", "label": "Remap Cancel Button", "description": "On pedal-interceptor Bolts, treat the steering-wheel CANCEL button as an extra mappable button.", "data_type": "bool", - "ui_type": "toggle" + "ui_type": "toggle", + "settings_tier": "simple" } ] }, @@ -2646,14 +2890,16 @@ "label": "Remap Cancel Button", "description": "On pedal-interceptor Bolts, treat the steering-wheel CANCEL button as an extra mappable button.", "data_type": "bool", - "ui_type": "toggle" + "ui_type": "toggle", + "settings_tier": "simple" }, { "key": "NostalgiaMode", "label": "Nostalgia Mode", "description": "Use the left paddle to pause openpilot acceleration and braking while Always On Lateral stays active on supported Hyundai CAN-FD cars.", "data_type": "bool", - "ui_type": "toggle" + "ui_type": "toggle", + "settings_tier": "simple" }, { "key": "CancelButtonControl", @@ -2710,7 +2956,8 @@ "value": 13, "label": "Favorite #3" } - ] + ], + "settings_tier": "simple" }, { "key": "DistanceButtonControl", @@ -2767,7 +3014,8 @@ "value": 13, "label": "Favorite #3" } - ] + ], + "settings_tier": "simple" }, { "key": "LongCancelButtonControl", @@ -2824,7 +3072,8 @@ "value": 13, "label": "Favorite #3" } - ] + ], + "settings_tier": "simple" }, { "key": "LongDistanceButtonControl", @@ -2881,7 +3130,8 @@ "value": 13, "label": "Favorite #3" } - ] + ], + "settings_tier": "simple" }, { "key": "VeryLongCancelButtonControl", @@ -2938,7 +3188,8 @@ "value": 13, "label": "Favorite #3" } - ] + ], + "settings_tier": "simple" }, { "key": "VeryLongDistanceButtonControl", @@ -2995,7 +3246,8 @@ "value": 13, "label": "Favorite #3" } - ] + ], + "settings_tier": "simple" }, { "key": "LKASButtonControl", @@ -3056,7 +3308,8 @@ "value": 13, "label": "Favorite #3" } - ] + ], + "settings_tier": "simple" }, { "key": "MainCruiseButtonControl", @@ -3089,7 +3342,8 @@ "value": 13, "label": "Favorite #3" } - ] + ], + "settings_tier": "simple" }, { "key": "ModeButtonControl", @@ -3146,7 +3400,8 @@ "value": 13, "label": "Favorite #3" } - ] + ], + "settings_tier": "simple" }, { "key": "LongModeButtonControl", @@ -3203,7 +3458,8 @@ "value": 13, "label": "Favorite #3" } - ] + ], + "settings_tier": "simple" }, { "key": "VeryLongModeButtonControl", @@ -3260,7 +3516,8 @@ "value": 13, "label": "Favorite #3" } - ] + ], + "settings_tier": "simple" }, { "key": "StarButtonControl", @@ -3317,7 +3574,8 @@ "value": 13, "label": "Favorite #3" } - ] + ], + "settings_tier": "simple" }, { "key": "LongStarButtonControl", @@ -3374,7 +3632,8 @@ "value": 13, "label": "Favorite #3" } - ] + ], + "settings_tier": "simple" }, { "key": "VeryLongStarButtonControl", @@ -3431,7 +3690,8 @@ "value": 13, "label": "Favorite #3" } - ] + ], + "settings_tier": "simple" } ] }, @@ -3445,7 +3705,8 @@ "description": "Settings that control how the device runs, powers off, and manages driving data.", "data_type": "bool", "ui_type": "toggle", - "is_parent_toggle": true + "is_parent_toggle": true, + "settings_tier": "simple" }, { "key": "DeviceShutdown", @@ -3455,7 +3716,8 @@ "ui_type": "numeric", "min": 0.0, "max": 33.0, - "parent_key": "DeviceManagement" + "parent_key": "DeviceManagement", + "settings_tier": "simple" }, { "key": "NoLogging", @@ -3463,7 +3725,8 @@ "description": "WARNING: This will prevent your drives from being recorded and all data will be unobtainable!\n\nPrevent the device from saving driving data.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "DeviceManagement" + "parent_key": "DeviceManagement", + "settings_tier": "simple" }, { "key": "NoUploads", @@ -3471,7 +3734,8 @@ "description": "WARNING: This will prevent your drives from being uploaded to comma connect which will impact debugging and official support from comma!\n\nPrevent the device from uploading driving data.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "DeviceManagement" + "parent_key": "DeviceManagement", + "settings_tier": "simple" }, { "key": "DisableOnroadUploads", @@ -3479,7 +3743,8 @@ "description": "When \"Disable Uploads\" is enabled, allow uploads only while parked (offroad).", "data_type": "bool", "ui_type": "toggle", - "parent_key": "NoUploads" + "parent_key": "NoUploads", + "settings_tier": "simple" }, { "key": "AlwaysAllowUploads", @@ -3487,7 +3752,8 @@ "description": "Override upload blocks and always keep uploader enabled. Advanced use only.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "NoUploads" + "parent_key": "NoUploads", + "settings_tier": "simple" }, { "key": "HigherBitrate", @@ -3495,7 +3761,8 @@ "description": "Save drive footage in higher video quality.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "DeviceManagement" + "parent_key": "DeviceManagement", + "settings_tier": "simple" }, { "key": "GsmMetered", @@ -3503,7 +3770,8 @@ "description": "Prevent large uploads on cellular. Turn this off to allow full/unfiltered uploads over mobile data.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "DeviceManagement" + "parent_key": "DeviceManagement", + "settings_tier": "simple" }, { "key": "LowVoltageShutdown", @@ -3514,7 +3782,8 @@ "min": 11.8, "max": 12.5, "step": 0.1, - "parent_key": "DeviceManagement" + "parent_key": "DeviceManagement", + "settings_tier": "simple" }, { "key": "IncreaseThermalLimits", @@ -3522,7 +3791,8 @@ "description": "WARNING: Running at higher temperatures may damage your device!\n\nAllow the device to run at higher temperatures before throttling or shutting down. Use only if you understand the risks!", "data_type": "bool", "ui_type": "toggle", - "parent_key": "DeviceManagement" + "parent_key": "DeviceManagement", + "settings_tier": "simple" }, { "key": "UseKonikServer", @@ -3530,7 +3800,8 @@ "description": "Upload driving data to \"stable.konik.ai\" instead of \"connect.comma.ai\".", "data_type": "bool", "ui_type": "toggle", - "parent_key": "DeviceManagement" + "parent_key": "DeviceManagement", + "settings_tier": "simple" }, { "key": "ScreenManagement", @@ -3538,7 +3809,8 @@ "description": "Settings that control screen brightness, screen recording, and timeout duration.", "data_type": "bool", "ui_type": "toggle", - "is_parent_toggle": true + "is_parent_toggle": true, + "settings_tier": "simple" }, { "key": "ScreenBrightness", @@ -3547,7 +3819,8 @@ "data_type": "int", "ui_type": "numeric", "step": 1.0, - "parent_key": "ScreenManagement" + "parent_key": "ScreenManagement", + "settings_tier": "simple" }, { "key": "ScreenBrightnessOnroad", @@ -3556,7 +3829,8 @@ "data_type": "int", "ui_type": "numeric", "step": 1.0, - "parent_key": "ScreenManagement" + "parent_key": "ScreenManagement", + "settings_tier": "simple" }, { "key": "ScreenRecorder", @@ -3564,7 +3838,8 @@ "description": "Add a button to the driving screen to record the display.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "ScreenManagement" + "parent_key": "ScreenManagement", + "settings_tier": "simple" }, { "key": "ScreenTimeout", @@ -3575,7 +3850,8 @@ "min": 5.0, "max": 60.0, "step": 5.0, - "parent_key": "ScreenManagement" + "parent_key": "ScreenManagement", + "settings_tier": "simple" }, { "key": "ScreenTimeoutOnroad", @@ -3586,7 +3862,8 @@ "min": 5.0, "max": 60.0, "step": 5.0, - "parent_key": "ScreenManagement" + "parent_key": "ScreenManagement", + "settings_tier": "simple" }, { "key": "StandbyMode", @@ -3594,53 +3871,8 @@ "description": "Turn the screen off while driving and automatically wake it up for alerts or engagement state changes.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "ScreenManagement" - }, - { - "key": "DisableWideRoad", - "label": "Disable Wide Road Camera", - "description": "WARNING: Only use this if the wide camera is malfunctioning or for development purposes. This may cause instability!\n\nRequires a reboot to take effect.", - "data_type": "bool", - "ui_type": "toggle", - "parent_key": "DeviceManagement" - } - ] - }, - { - "name": "Model & Customization", - "icon": "bi-cpu", - "params": [ - { - "key": "AutomaticallyDownloadModels", - "label": "Automatically Download New Models", - "description": "Automatically download new driving models as they become available.", - "data_type": "bool", - "ui_type": "toggle" - }, - { - "key": "ModelRandomizer", - "label": "Model Randomizer", - "description": "Driving models are chosen at random each drive and feedback prompts are used to find the model that best suits your needs.", - "data_type": "bool", - "ui_type": "toggle" - }, - { - "key": "RecoveryPower", - "label": "Recovery Power", - "description": "Adjust the strength of planplus lane recovery corrections (0.5 to 2.0).", - "data_type": "float", - "ui_type": "numeric", - "min": 0.5, - "max": 2.0, - "step": 0.1 - }, - { - "key": "DrivingModel", - "label": "Select Driving Model", - "description": "Select the active driving model.", - "data_type": "string", - "ui_type": "dropdown", - "options_endpoint": "/api/models/installed" + "parent_key": "ScreenManagement", + "settings_tier": "simple" } ] }, @@ -3654,7 +3886,8 @@ "description": "Detailed information about openpilot's internal operations.", "data_type": "bool", "ui_type": "toggle", - "is_parent_toggle": true + "is_parent_toggle": true, + "settings_tier": "advanced" }, { "key": "DeveloperMetrics", @@ -3663,7 +3896,8 @@ "data_type": "bool", "ui_type": "toggle", "is_parent_toggle": true, - "parent_key": "DeveloperUI" + "parent_key": "DeveloperUI", + "settings_tier": "advanced" }, { "key": "FPSCounter", @@ -3671,7 +3905,8 @@ "description": "Show the frames per second at the bottom of the driving screen.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "DeveloperMetrics" + "parent_key": "DeveloperMetrics", + "settings_tier": "advanced" }, { "key": "ShowCPU", @@ -3679,7 +3914,8 @@ "description": "Show CPU usage in the driving screen developer metrics.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "DeveloperMetrics" + "parent_key": "DeveloperMetrics", + "settings_tier": "advanced" }, { "key": "ShowGPU", @@ -3687,7 +3923,8 @@ "description": "Show GPU usage in the driving screen developer metrics.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "DeveloperMetrics" + "parent_key": "DeveloperMetrics", + "settings_tier": "advanced" }, { "key": "NumericalTemp", @@ -3695,7 +3932,8 @@ "description": "Show numerical device temperature in the driving screen developer metrics.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "DeveloperMetrics" + "parent_key": "DeveloperMetrics", + "settings_tier": "advanced" }, { "key": "ShowMemoryUsage", @@ -3703,21 +3941,24 @@ "description": "Show memory usage in the driving screen developer metrics.", "data_type": "bool", "ui_type": "toggle", - "parent_key": "DeveloperMetrics" + "parent_key": "DeveloperMetrics", + "settings_tier": "advanced" + }, + { + "key": "GalaxyDeveloperMode", + "label": "Enable Developer Mode", + "description": "Show advanced settings in Galaxy.", + "data_type": "bool", + "ui_type": "toggle", + "settings_tier": "simple" }, { "key": "UseOldUI", "label": "Use Old UI", "description": "Use the old Qt UI instead of the default raylib UI on tici/tizi devices. This setting has no effect on C4/mici devices.", "data_type": "bool", - "ui_type": "toggle" - }, - { - "key": "DisableWideRoad", - "label": "Disable Wide Road Camera", - "description": "Only enable this if the wide camera is broken or for development!\n\nDisabling the wide camera may degrade driving performance and cause instability.\n\nRequires a reboot to take effect.", - "data_type": "bool", - "ui_type": "toggle" + "ui_type": "toggle", + "settings_tier": "simple" }, { "key": "CameraOffset", @@ -3728,7 +3969,8 @@ "min": -0.35, "max": 0.35, "step": 0.01, - "precision": 2 + "precision": 2, + "settings_tier": "advanced" }, { "key": "HondaLateralPidKpScale", @@ -3739,7 +3981,8 @@ "min": 0.1, "max": 4.0, "step": 0.05, - "precision": 2 + "precision": 2, + "settings_tier": "advanced" }, { "key": "HondaLateralPidKiScale", @@ -3750,14 +3993,16 @@ "min": 0.1, "max": 4.0, "step": 0.05, - "precision": 2 + "precision": 2, + "settings_tier": "advanced" }, { "key": "AllowImpossibleAcceleration", "label": "Allow Impossible Acceleration", "description": "WARNING: This suppresses openpilot's excessive longitudinal actuation diagnostic when measured acceleration looks impossible for the requested gas/brake command.\n\nLeave this OFF unless you are intentionally testing edge cases like shifting to neutral and understand that it can hide a real actuation problem.", "data_type": "bool", - "ui_type": "toggle" + "ui_type": "toggle", + "settings_tier": "advanced" } ] } diff --git a/starpilot/system/the_galaxy/tests/test_dashboard_stats.py b/starpilot/system/the_galaxy/tests/test_dashboard_stats.py index c7d1dd2f7..df588e89a 100644 --- a/starpilot/system/the_galaxy/tests/test_dashboard_stats.py +++ b/starpilot/system/the_galaxy/tests/test_dashboard_stats.py @@ -821,7 +821,7 @@ def test_lightweight_routes_surface_recent_drives_without_log_analysis(monkeypat dashboard = utilities.get_dashboard_stats(["/tmp/missing"], params, now=utilities.datetime(2026, 6, 16, 12, 0, 0)) assert [drive["name"] for drive in dashboard["recentDrives"]] == ["route-new", "route-old"] - assert dashboard["lastDrive"]["model"] == "Orion" + assert dashboard["lastDrive"]["model"] == "Unknown model" assert dashboard["week"]["drives"] == 2 assert dashboard["favoriteModels"] == [] assert dashboard["analysis"]["pendingRoutes"] == 2 @@ -947,7 +947,7 @@ def test_shell_update_preserves_old_analysis_version_for_reparse(): "distanceMeters": 0.0, "duration": 660, "engagedSeconds": 0.0, - "model": "Orion", + "model": "Vega", "routeModifiedAt": 100, "attentionKnown": False, "analysisComplete": False, @@ -957,10 +957,67 @@ def test_shell_update_preserves_old_analysis_version_for_reparse(): stats = utilities._update_dashboard_persistent_stats(params, [shell_drive], wall_now=1000) assert stats["routes"]["route-1"]["date"] == "2026-06-18T09:24:00" + assert stats["routes"]["route-1"]["model"] == "Orion" assert stats["routes"]["route-1"]["analysisVersion"] == utilities.DASHBOARD_ROUTE_ANALYSIS_VERSION - 1 assert utilities._analysis_candidates([{"name": "route-1", "modifiedAt": 100}], stats) +def test_route_shell_does_not_assign_the_current_model(): + route_info = { + "name": "route-1", + "segments": [], + "segmentCount": 1, + "startedAt": utilities.datetime(2026, 6, 18, 9, 24, 0), + "modifiedAt": utilities.datetime(2026, 6, 18, 9, 25, 0).timestamp(), + } + params = FakeParams({"DrivingModelName": "Vega"}) + + shell_drive = utilities._route_shell_drive(route_info, params, {}, is_metric=False) + + assert shell_drive["model"] == "Unknown model" + + +def test_reanalysis_replaces_the_shell_model_and_recalculates_usage(): + params = FakeParams({ + utilities.DASHBOARD_PERSISTENT_STATS_PARAM: { + "routes": { + "route-1": { + "date": "2026-07-17T16:58:00", + "endDate": "2026-07-17T17:51:00", + "distanceMeters": 57000.0, + "duration": 3180, + "engagedSeconds": 1800.0, + "model": "Pop Model V2", + "modelKey": "Pop Model V2", + "modifiedAt": 100, + "attentionKnown": True, + "analysisComplete": True, + "analysisVersion": utilities.DASHBOARD_ROUTE_ANALYSIS_VERSION - 1, + }, + }, + }, + }) + analyzed_drive = { + "name": "route-1", + "date": "2026-07-17T16:58:00", + "endDate": "2026-07-17T17:51:00", + "distanceMeters": 57000.0, + "duration": 3180, + "engagedSeconds": 1800.0, + "model": "Michael RL", + "routeModifiedAt": 100, + "attentionKnown": True, + "analysisComplete": True, + "analysisVersion": utilities.DASHBOARD_ROUTE_ANALYSIS_VERSION, + } + + stats = utilities._update_dashboard_persistent_stats(params, [analyzed_drive], wall_now=1000) + + assert stats["routes"]["route-1"]["model"] == "Michael RL" + assert list(stats["modelUsage"]) == ["michael-rl"] + assert stats["modelUsage"]["michael-rl"]["drives"] == 1 + + def test_week_summary_ignores_stale_premigration_route_rows(monkeypatch): utilities._invalidate_dashboard_cache() route_infos = [ diff --git a/starpilot/system/the_galaxy/tests/test_device_settings_layout.py b/starpilot/system/the_galaxy/tests/test_device_settings_layout.py new file mode 100644 index 000000000..fd51e7983 --- /dev/null +++ b/starpilot/system/the_galaxy/tests/test_device_settings_layout.py @@ -0,0 +1,131 @@ +import json +import re +from pathlib import Path + + +REPO_ROOT = Path(__file__).resolve().parents[4] +LAYOUT_PATH = REPO_ROOT / "starpilot/system/the_galaxy/assets/components/tools/device_settings_layout.json" +PARAM_KEYS_PATH = REPO_ROOT / "common/params_keys.h" + + +def _layout(): + return json.loads(LAYOUT_PATH.read_text(encoding="utf-8")) + + +def _params_by_section(layout): + return { + section["name"]: {param["key"]: param for param in section.get("params", [])} + for section in layout + } + + +def _declared_default(key): + params_source = PARAM_KEYS_PATH.read_text(encoding="utf-8") + match = re.search( + rf'\{{"{re.escape(key)}",\s*\{{[^\n]*?\b(?:BOOL|INT|FLOAT|STRING|JSON),\s*"([^"]*)"', + params_source, + ) + assert match is not None, f"Missing param declaration for {key}" + return match.group(1) + + +def test_galaxy_layout_removes_obsolete_and_duplicate_controls(): + layout = _layout() + sections = _params_by_section(layout) + all_keys = {key for params in sections.values() for key in params} + + assert "Model & Customization" not in sections + assert {"HumanAcceleration", "ReverseCruise", "DisableWideRoad"}.isdisjoint(all_keys) + + +def test_galaxy_layout_contains_basic_mode_controls(): + sections = _params_by_section(_layout()) + + assert {"AlwaysOnLateral", "LaneChanges", "QOLLateral"} <= sections["Lateral (Steering)"].keys() + assert { + "ConditionalExperimental", + "CurveSpeedController", + "AccelerationProfile", + "DecelerationProfile", + "HumanLaneChanges", + "QOLLongitudinal", + } <= sections["Longitudinal (Speed & Following)"].keys() + assert {"GalaxyDeveloperMode", "UseOldUI"} <= sections["Developer"].keys() + + +def test_every_galaxy_setting_has_a_shared_settings_tier(): + layout = _layout() + tiers = { + param.get("settings_tier") + for section in layout + for param in section.get("params", []) + } + + assert tiers <= {"simple", "advanced"} + assert None not in tiers + + +def test_requested_simple_and_advanced_settings_tiers(): + sections = _params_by_section(_layout()) + lateral = sections["Lateral (Steering)"] + longitudinal = sections["Longitudinal (Speed & Following)"] + developer = sections["Developer"] + + for section_name in ( + "Visual (Display & UI)", + "Sounds & Alerts", + "Vehicle", + "Wheel Controls", + "Device & Data", + ): + assert {param["settings_tier"] for param in sections[section_name].values()} == {"simple"} + + for key in ("AlwaysOnLateral", "LaneChanges", "QOLLateral"): + assert lateral[key]["settings_tier"] == "simple" + for key in ("AdvancedLateralTune", "LateralTune", "NavDesiresAllowed"): + assert lateral[key]["settings_tier"] == "advanced" + + for key in ( + "ConditionalExperimental", + "CurveSpeedController", + "LongitudinalTune", + "AccelerationProfile", + "DecelerationProfile", + "HumanLaneChanges", + "QOLLongitudinal", + ): + assert longitudinal[key]["settings_tier"] == "simple" + for key in ( + "AdvancedLongitudinalTune", + "CustomPersonalities", + "LeadDetectionThreshold", + "TacoTune", + "NavLongitudinalAllowed", + "SpeedLimitController", + "ConditionalChill", + ): + assert longitudinal[key]["settings_tier"] == "advanced" + + assert developer["GalaxyDeveloperMode"]["settings_tier"] == "simple" + assert developer["UseOldUI"]["settings_tier"] == "simple" + assert developer["DeveloperUI"]["settings_tier"] == "advanced" + + +def test_hidden_feature_defaults_remain_enabled(): + assert _declared_default("GalaxyDeveloperMode") == "0" + assert _declared_default("NavDesiresAllowed") == "1" + assert _declared_default("NavLongitudinalAllowed") == "1" + + for key in ( + "TrafficPersonalityProfile", + "AggressivePersonalityProfile", + "StandardPersonalityProfile", + "RelaxedPersonalityProfile", + ): + assert _declared_default(key) == "1" + + +def test_human_acceleration_param_is_removed(): + params_source = PARAM_KEYS_PATH.read_text(encoding="utf-8") + assert '{"HumanAcceleration",' not in params_source + diff --git a/starpilot/system/the_galaxy/utilities.py b/starpilot/system/the_galaxy/utilities.py index 8648aa861..9dd92d0ec 100644 --- a/starpilot/system/the_galaxy/utilities.py +++ b/starpilot/system/the_galaxy/utilities.py @@ -72,7 +72,7 @@ DASHBOARD_ROUTE_SEGMENT_SAMPLE_LIMIT = 2 DASHBOARD_PERSISTED_ROUTE_LIMIT = 5000 DASHBOARD_PERSIST_MIN_ROUTE_AGE_SECONDS = 120 DASHBOARD_PERSISTENT_STATS_PARAM = "GalaxyDashboardStats" -DASHBOARD_ROUTE_ANALYSIS_VERSION = 3 +DASHBOARD_ROUTE_ANALYSIS_VERSION = 4 DASHBOARD_PARAMS_DIR = Path("/data/params/d") DASHBOARD_ANALYZER_LOG_PATH = "/tmp/galaxy_dashboard_analyzer.log" DASHBOARD_ANALYZER_STATUS_PATH = Path("/tmp/galaxy_dashboard_analyzer_status.json") @@ -1433,18 +1433,6 @@ def _distance_from_meters(distance_m, is_metric): return distance_m * (METER_TO_KILOMETER if is_metric else METER_TO_MILE) -def _current_model_name(params_obj, model_names): - for key in ("DrivingModelName", "DrivingModel", "Model"): - value = _params_get_text(params_obj, key, "") - model_key = canonical_model_key(value) - if model_key and model_key in model_names: - return model_names[model_key]["name"] - label = _clean_model_label(value) - if label: - return label - return "" - - def _route_shell_drive(route_info, params_obj, model_names, is_metric): segment_count = max(0, _safe_int(route_info.get("segmentCount", 0), 0)) duration_seconds = segment_count * 60 @@ -1461,7 +1449,7 @@ def _route_shell_drive(route_info, params_obj, model_names, is_metric): "avgSpeed": 0, "engagedPercent": 0, "engagedSeconds": 0.0, - "model": _current_model_name(params_obj, model_names) or "Unknown model", + "model": "Unknown model", "segmentCount": segment_count, "distractedMoments": 0, "unresponsiveMoments": 0, @@ -2469,6 +2457,10 @@ def _update_dashboard_persistent_stats(params_obj, drives, wall_now): next_distance = max(0.0, _safe_float(next_entry.get("distanceMeters", 0.0), 0.0)) existing_current = _safe_float(existing_entry.get("modifiedAt", 0.0), 0.0) >= _safe_float(next_entry.get("modifiedAt", 0.0), 0.0) existing_attention_known = bool(existing_entry.get("attentionKnown", True)) + existing_model = _clean_model_label(existing_entry.get("model", "")) + if not attention_known and existing_current and existing_model and existing_model != "Unknown model": + next_entry["model"] = existing_model + next_entry["modelKey"] = canonical_model_key(existing_entry.get("modelKey", "")) or _model_usage_key(existing_model) if not attention_known and existing_current and existing_attention_known: next_entry["clean"] = bool(existing_entry.get("clean", False)) next_entry["undistracted"] = bool(existing_entry.get("undistracted", existing_entry.get("clean", False))) diff --git a/starpilot/ui/qt/offroad/longitudinal_settings.cc b/starpilot/ui/qt/offroad/longitudinal_settings.cc index ce35a9917..3f5c7a5f5 100644 --- a/starpilot/ui/qt/offroad/longitudinal_settings.cc +++ b/starpilot/ui/qt/offroad/longitudinal_settings.cc @@ -157,7 +157,6 @@ StarPilotLongitudinalPanel::StarPilotLongitudinalPanel(StarPilotSettingsWindow * {"LongitudinalTune", tr("Longitudinal Tuning"), tr("Acceleration and braking control changes to fine-tune how openpilot drives."), "../../starpilot/assets/toggle_icons/icon_longitudinal_tune.png"}, {"AccelerationProfile", tr("Acceleration Profile"), tr("How quickly openpilot speeds up. \"Eco\" is gentle and efficient, \"Sport\" is firmer and more responsive, and \"Sport+\" accelerates at the maximum rate allowed."), ""}, {"DecelerationProfile", tr("Deceleration Profile"), tr("How firmly openpilot slows down. \"Eco\" favors coasting, \"Sport\" applies stronger braking."), ""}, - {"HumanAcceleration", tr("Human-Like Acceleration"), tr("Acceleration that mimics human behavior by easing the throttle at low speeds and adding extra power when taking off from a stop."), ""}, {"HumanLaneChanges", tr("Human-Like Lane Changes"), tr("Lane-change behavior that mimics human drivers by anticipating and tracking adjacent vehicles during lane changes."), ""}, {"LeadDetectionThreshold", tr("Lead Detection Sensitivity"), tr("How sensitive openpilot is to detecting vehicles. Higher sensitivity allows quicker detection at longer distances but may react to non-vehicle objects; lower sensitivity is more conservative and reduces false detections."), ""}, {"TacoTune", tr("\"Taco Bell Run\" Turn Speed Hack"), tr("The turn-speed hack from comma's 2022 \"Taco Bell Run\". Designed to slow down for left and right turns."), ""}, @@ -668,7 +667,7 @@ StarPilotLongitudinalPanel::StarPilotLongitudinalPanel(StarPilotSettingsWindow * }); } - QSet forceUpdateKeys = {"HumanAcceleration", "LongitudinalTune"}; + QSet forceUpdateKeys = {"LongitudinalTune"}; for (const QString &key : forceUpdateKeys) { QObject::connect(static_cast(toggles[key]), &ToggleControl::toggleFlipped, this, &StarPilotLongitudinalPanel::updateToggles); } @@ -1068,10 +1067,6 @@ void StarPilotLongitudinalPanel::updateToggles() { setVisible &= !params.get("MapboxSecretKey").empty(); } - else if (key == "StartAccel") { - setVisible &= !(params.getBool("LongitudinalTune") && params.getBool("HumanAcceleration")); - } - else if (key == "StoppingDecelRate" || key == "VEgoStarting" || key == "VEgoStopping") { setVisible &= !parent->isGM || !params.getBool("ExperimentalGMTune"); setVisible &= !parent->isToyota || !params.getBool("FrogsGoMoosTweak"); diff --git a/starpilot/ui/qt/offroad/longitudinal_settings.h b/starpilot/ui/qt/offroad/longitudinal_settings.h index 22431ee60..a0166c2c3 100644 --- a/starpilot/ui/qt/offroad/longitudinal_settings.h +++ b/starpilot/ui/qt/offroad/longitudinal_settings.h @@ -34,7 +34,7 @@ private: QSet conditionalExperimentalKeys = {"PersistExperimentalState", "CESpeed", "CESpeedLead", "CECurves", "CELead", "CEModelStopTime", "CESignalSpeed", "CEStopLights", "ShowCEMStatus"}; QSet curveSpeedKeys = {"CalibratedLateralAcceleration", "CalibrationProgress", "ResetCurveData", "ShowCSCStatus"}; QSet customDrivingPersonalityKeys = {"AggressivePersonalityProfile", "RelaxedPersonalityProfile", "StandardPersonalityProfile", "TrafficPersonalityProfile"}; - QSet longitudinalTuneKeys = {"AccelerationProfile", "DecelerationProfile", "HumanAcceleration", "HumanLaneChanges", "LeadDetectionThreshold", "TacoTune", "NavLongitudinalAllowed"}; + QSet longitudinalTuneKeys = {"AccelerationProfile", "DecelerationProfile", "HumanLaneChanges", "LeadDetectionThreshold", "TacoTune", "NavLongitudinalAllowed"}; QSet qolKeys = {"CustomCruise", "CustomCruiseLong", "ForceStops", "ForceStopDistanceOffset", "ForceStandstill", "RadarTakeoffs", "IncreasedStoppedDistance", "MapGears", "ReverseCruise", "SetSpeedOffset", "WeatherPresets"}; QSet relaxedPersonalityKeys = {"RelaxedFollow", "RelaxedFollowHigh", "RelaxedJerkAcceleration", "RelaxedJerkDeceleration", "RelaxedJerkDanger", "RelaxedJerkSpeed", "RelaxedJerkSpeedDecrease", "ResetRelaxedPersonality"}; QSet speedLimitControllerKeys = {"SLCOffsets", "SLCFallback", "SLCOverride", "SLCPriority", "SLCQOL", "SLCVisuals"}; diff --git a/system/manager/manager.py b/system/manager/manager.py index 72c5e47c1..deb711436 100755 --- a/system/manager/manager.py +++ b/system/manager/manager.py @@ -66,7 +66,7 @@ STARPILOT_PARAM_CANONICALIZATION_MIGRATION_FLAG = Path("/data") / "starpilot_par STARPILOT_PC_ROOT_MIGRATION_FLAG = Path("/data") / "starpilot_pc_root_v1" STARPILOT_PARAMS_CACHE_MIGRATION_FLAG = Path("/data") / "starpilot_params_cache_v1" STARPILOT_LEGACY_CACHE_MARKER_KEYS = ("RemapCancelToDistance",) -STARPILOT_REMOVED_PARAM_KEYS = ("CoastUpToLeads", "HumanFollowing", "PrioritizeSmoothFollowing") +STARPILOT_REMOVED_PARAM_KEYS = ("CoastUpToLeads", "HumanAcceleration", "HumanFollowing", "PrioritizeSmoothFollowing") LEGACY_CARMODEL_MIGRATIONS = { "CHEVROLET_BOLT_CC_2019_2021": "CHEVROLET_BOLT_CC_2018_2021", } @@ -507,7 +507,6 @@ def migrate_starpilot_default_parity(params: Params, params_cache: Params) -> No desired_bool_values = { "AdvancedLateralTune": True, "ForceAutoTuneOff": True, - "HumanAcceleration": False, "NNFF": False, "NNFFLite": False, } @@ -555,7 +554,7 @@ def migrate_disable_humanlike_defaults(params: Params, params_cache: Params) -> disabled_keys: list[str] = [] - for key in ("HumanAcceleration", "HumanLaneChanges"): + for key in ("HumanLaneChanges",): if not (params.get_bool(key) or params_cache.get_bool(key)): continue diff --git a/system/manager/test/test_manager.py b/system/manager/test/test_manager.py index 57b19eab2..f2f26fb95 100644 --- a/system/manager/test/test_manager.py +++ b/system/manager/test/test_manager.py @@ -222,7 +222,6 @@ class TestManager: params = FileBackedFakeParams(tmp_path / "params", { "AdvancedLateralTune": False, "ForceAutoTuneOff": False, - "HumanAcceleration": True, "CEModelStopTime": 3.5, }) params_cache = FileBackedFakeParams(tmp_path / "cache", { @@ -233,30 +232,26 @@ class TestManager: assert not params.get_bool("AdvancedLateralTune") assert not params.get_bool("ForceAutoTuneOff") - assert params.get_bool("HumanAcceleration") assert params.get("CEModelStopTime") == "3.5" assert params_cache.get_bool("NNFF") def test_migrate_disable_humanlike_defaults(self, tmp_path, monkeypatch): monkeypatch.setattr(manager, "STARPILOT_HUMANLIKE_DISABLE_MIGRATION_FLAG", tmp_path / "starpilot_humanlike_disable_v1") - params = FileBackedFakeParams(tmp_path / "params", { - "HumanAcceleration": True, - }) + params = FileBackedFakeParams(tmp_path / "params", {}) params_cache = FileBackedFakeParams(tmp_path / "cache", { "HumanLaneChanges": True, }) manager.migrate_disable_humanlike_defaults(params, params_cache) - assert not params.get_bool("HumanAcceleration") assert not params.get_bool("HumanLaneChanges") - assert not params_cache.get_bool("HumanAcceleration") assert not params_cache.get_bool("HumanLaneChanges") def test_cleanup_removed_starpilot_params(self, tmp_path): params = FileBackedFakeParams(tmp_path / "params", { "CoastUpToLeads": True, + "HumanAcceleration": True, "HumanFollowing": True, }) params_cache = FileBackedFakeParams(tmp_path / "cache", { @@ -267,6 +262,7 @@ class TestManager: manager.cleanup_removed_starpilot_params(params, params_cache) assert not Path(params.get_param_path("CoastUpToLeads")).exists() + assert not Path(params.get_param_path("HumanAcceleration")).exists() assert not Path(params.get_param_path("HumanFollowing")).exists() assert not Path(params_cache.get_param_path("HumanFollowing")).exists() assert not Path(params_cache.get_param_path("PrioritizeSmoothFollowing")).exists() diff --git a/tools/StarPilot/feasibleparams.txt b/tools/StarPilot/feasibleparams.txt index 004cb4f4e..3f3d2d3bb 100644 --- a/tools/StarPilot/feasibleparams.txt +++ b/tools/StarPilot/feasibleparams.txt @@ -133,7 +133,6 @@ HideSpeedLimit HideTurningBanner HigherBitrate HolidayThemes -HumanAcceleration HumanLaneChanges IconPack IncreaseFollowingLowVisibility diff --git a/tools/StarPilot/generate_galaxy_layout.py b/tools/StarPilot/generate_galaxy_layout.py index 7a75f7ede..1ad9153a7 100755 --- a/tools/StarPilot/generate_galaxy_layout.py +++ b/tools/StarPilot/generate_galaxy_layout.py @@ -13,7 +13,6 @@ CATEGORIES = [ {"file": "sounds_settings.cc", "name": "Sounds & Alerts", "icon": "bi-volume-up"}, {"file": "vehicle_settings.cc", "name": "Vehicle", "icon": "bi-car-front"}, {"file": "device_settings.cc", "name": "Device & Data", "icon": "bi-hdd"}, - {"file": "model_settings.cc", "name": "Model & Customization", "icon": "bi-cpu"}, ] DROPDOWN_MAPPING = { @@ -63,14 +62,67 @@ INJECTED_SECTION_PARAMS = { # Keys explicitly hidden from The Galaxy's generic settings UI. HIDDEN_KEYS = { "FrogsGoMoosTweak", + "HumanAcceleration", + "DisableWideRoad", "LockDoorsTimer", "NewLongAPI", "ToyotaDoors", + "ReverseCruise", } +HIDDEN_SECTION_NAMES = {"Model & Customization"} + # Keys that are boolean toggles despite ambiguous defaults in starpilot_variables.py. FORCE_BOOL_KEYS = {"EVTuning"} + +def get_param_settings_tiers(): + params_path = os.path.join(REPO_ROOT, "common/params_keys.h") + tiers = {} + with open(params_path, "r", encoding="utf-8") as params_file: + for line in params_file: + match = re.match(r'\s*\{"([^"]+)",', line) + if match: + tiers[match.group(1)] = "simple" if "SETTINGS_SIMPLE" in line else "advanced" + return tiers + + +PARAM_SETTINGS_TIERS = get_param_settings_tiers() + + +def apply_settings_tiers(layout): + for section in layout: + params = section.get("params", []) + params_by_key = {param["key"]: param for param in params if "key" in param} + resolved = {} + + def resolve_tier(key, resolving=None): + if key in resolved: + return resolved[key] + + resolving = set(resolving or ()) + if key in resolving: + return "advanced" + resolving.add(key) + + parent_key = params_by_key.get(key, {}).get("parent_key") + own_tier = PARAM_SETTINGS_TIERS.get(key) + if parent_key: + parent_tier = resolve_tier(parent_key, resolving) + resolved[key] = parent_tier if own_tier is None else ( + "advanced" if "advanced" in (parent_tier, own_tier) else "simple" + ) + else: + resolved[key] = own_tier or "advanced" + return resolved[key] + + for param in params: + key = param.get("key") + if key: + param["settings_tier"] = resolve_tier(key) + + return layout + DEVELOPER_SIDEBAR_METRIC_KEYS = { "DeveloperSidebarMetric1", "DeveloperSidebarMetric2", @@ -557,6 +609,8 @@ def merge_layouts(existing_layout, generated_layout): for section in existing_layout: name = section["name"] + if name in HIDDEN_SECTION_NAMES: + continue generated = generated_sections.get(name) if generated is None: merged_layout.append(section) @@ -615,8 +669,9 @@ def main(): with open(output_path, 'r', encoding='utf-8') as f: existing_layout = json.load(f) layout = merge_layouts(existing_layout, generated_layout) + layout = apply_settings_tiers(layout) with open(output_path, 'w', encoding='utf-8') as f: - json.dump(layout, f, indent=2) + json.dump(layout, f, indent=2, ensure_ascii=False) if __name__ == '__main__': main()