Files
IQ.Pilot/iqpilot/selfdrive/ui/mici/layouts/settings/cruise.py
2026-09-03 18:23:24 -05:00

102 lines
4.7 KiB
Python

"""
Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos/
"""
from iqpilot.selfdrive.ui.mici.widgets.stock_button import BigButton, BigParamControl
from iqpilot.selfdrive.ui.mici.layouts.settings.iq_widgets import FollowDistanceSelector, MappedParamToggle, IQModeSelector, SafeParamControl
from iqpilot.system.ui.lib.application import gui_app
from iqpilot.system.ui.widgets.scroller import NavScroller
from iqpilot.system.ui.lib.multilang import tr
MS_TO_MPH = 2.23694
_SPEED_MPH = [10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80]
_SPEED_OPTIONS = [f"{s} mph" for s in _SPEED_MPH]
_SPEED_VALUES = [round(s / MS_TO_MPH, 2) for s in _SPEED_MPH]
_LEAD_SPEED_MPH = [10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85]
_LEAD_SPEED_OPTIONS = [f"{s} mph" for s in _LEAD_SPEED_MPH]
_LEAD_SPEED_VALUES = [round(s / MS_TO_MPH, 2) for s in _LEAD_SPEED_MPH]
_STOP_TIME_OPTIONS = ["1.0s", "1.5s", "2.0s", "2.5s", "3.0s", "3.5s", "4.0s", "4.5s", "5.0s", "5.5s", "6.0s"]
_STOP_TIME_VALUES = [1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 5.5, 6.0]
_LOOKAHEAD_OPTIONS = ["1.0s", "2.0s", "3.0s", "4.0s", "5.0s", "6.0s", "7.0s", "8.0s", "9.0s", "10.0s"]
_LOOKAHEAD_VALUES = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0]
class DynamicSettingsPanel(NavScroller):
def __init__(self):
super().__init__()
self._items = [
BigParamControl(tr("IQ.Dynamic Curves"), "IQDynamicConditionalCurves"),
BigParamControl(tr("IQ.Dynamic Slower Lead"), "IQDynamicConditionalSlowerLead"),
BigParamControl(tr("IQ.Dynamic Stopped Lead"), "IQDynamicConditionalStoppedLead"),
BigParamControl(tr("IQ.Dynamic Model Stops"), "IQDynamicConditionalModelStops"),
BigParamControl(tr("IQ.Dynamic SLC Fallback"), "IQDynamicConditionalSLCFallback"),
MappedParamToggle(tr("IQ.Dynamic Low Speed"), "IQDynamicConditionalSpeed", _SPEED_OPTIONS, _SPEED_VALUES),
MappedParamToggle(tr("IQ.Dynamic Lead Speed"), "IQDynamicConditionalLeadSpeed", _LEAD_SPEED_OPTIONS, _LEAD_SPEED_VALUES),
MappedParamToggle(tr("Model Stop Time"), "IQDynamicModelStopTime", _STOP_TIME_OPTIONS, _STOP_TIME_VALUES),
BigParamControl(tr("IQ Force Stops"), "IQForceStops"),
]
self._scroller.add_widgets(self._items)
def show_event(self):
super().show_event()
for w in self._items:
w.refresh()
class SlcSettingsPanel(NavScroller):
def __init__(self):
super().__init__()
self._items = [
MappedParamToggle(tr("SLC Policy"), "SLCPolicy", [tr("map only"), tr("map priority"), tr("combined")], [0, 1, 2]),
MappedParamToggle(tr("SLC Override"), "SLCOverrideMethod", [tr("manual"), tr("set speed")], [0, 1]),
BigParamControl(tr("SLC Confirm Higher"), "SpeedLimitConfirmationHigher"),
BigParamControl(tr("SLC Confirm Lower"), "SpeedLimitConfirmationLower"),
BigParamControl(tr("SLC Auto Confirm"), "SLCAutoConfirm"),
BigParamControl(tr("SLC Fallback IQ.Pilot"), "SLCFallbackExperimentalMode"),
BigParamControl(tr("SLC Online Filler"), "SLCOnlineFiller"),
MappedParamToggle(tr("Lookahead Higher"), "MapSpeedLookaheadHigher", _LOOKAHEAD_OPTIONS, _LOOKAHEAD_VALUES),
MappedParamToggle(tr("Lookahead Lower"), "MapSpeedLookaheadLower", _LOOKAHEAD_OPTIONS, _LOOKAHEAD_VALUES),
]
self._scroller.add_widgets(self._items)
def show_event(self):
super().show_event()
for w in self._items:
w.refresh()
class CruiseLayoutMici(NavScroller):
def __init__(self):
super().__init__()
self._dynamic_panel = DynamicSettingsPanel()
self._slc_panel = SlcSettingsPanel()
self._follow_dist = FollowDistanceSelector()
self._mode = IQModeSelector(self._follow_dist.refresh)
self._dynamic_settings = BigButton(tr("iq.dynamic settings"))
self._dynamic_settings.set_click_callback(lambda: gui_app.push_widget(self._dynamic_panel))
self._dynamic_settings.set_visible(self._mode.is_dynamic)
self._speed_limit = MappedParamToggle(tr("Speed Limit"), "IQSpeedAssistMode",
[tr("off"), tr("info"), tr("warning"), tr("control")])
self._slc_settings = BigButton(tr("speed limit settings"))
self._slc_settings.set_click_callback(lambda: gui_app.push_widget(self._slc_panel))
self._new_lead_mpc = SafeParamControl(tr("Experimental Lead MPC"), "newLeadMpc", default_on=True)
self._main = [self._mode, self._dynamic_settings, self._follow_dist, self._speed_limit,
self._new_lead_mpc, self._slc_settings]
self._scroller.add_widgets(self._main)
def _refresh(self):
self._mode.refresh()
self._follow_dist.refresh()
self._speed_limit.refresh()
self._new_lead_mpc.refresh()
def show_event(self):
super().show_event()
self._refresh()