mirror of
https://github.com/sunnypilot/sunnypilot.git
synced 2026-07-12 13:42:07 +08:00
Merge branch 'SP-134-pause-lateral-speed' into master-dev-c3
# Conflicts: # CHANGELOGS.md
This commit is contained in:
@@ -29,6 +29,9 @@ sunnypilot - 0.9.7.0 (2024-05-xx)
|
||||
* When Forced Offroad mode is on, allows changing offroad-only settings even when the car is turned on
|
||||
* NEW❗: Ford CAN-FD longitudinal
|
||||
* NEW❗: Parse speed limit sign recognition from camera for certain supported platforms
|
||||
* UPDATED: Pause Lateral Below Speed w/ Blinker
|
||||
* NEW❗: Customizable Pause Lateral Speed
|
||||
* Pause lateral actuation with blinker when traveling below the desired speed selected. Default is 20 MPH or 32 km/h.
|
||||
* UPDATED: Hyundai CAN Longitudinal
|
||||
* Auto-enable radar tracks on platforms with applicable Mando radar
|
||||
* UPDATED: Hyundai CAN-FD Radar-based SCC
|
||||
|
||||
@@ -291,6 +291,7 @@ std::unordered_map<std::string, uint32_t> keys = {
|
||||
{"OsmWayTest", PERSISTENT},
|
||||
{"OsmDownloadedDate", PERSISTENT},
|
||||
{"PathOffset", PERSISTENT | BACKUP},
|
||||
{"PauseLateralSpeed", PERSISTENT | BACKUP},
|
||||
{"QuietDrive", PERSISTENT | BACKUP},
|
||||
{"RoadEdge", PERSISTENT | BACKUP},
|
||||
{"ReverseAccChange", PERSISTENT | BACKUP},
|
||||
|
||||
@@ -220,7 +220,9 @@ class CarInterfaceBase(ABC):
|
||||
self.gear_warning = 0
|
||||
self.cruise_cancelled_btn = True
|
||||
self.acc_mads_combo = self.param_s.get_bool("AccMadsCombo")
|
||||
self.is_metric = self.param_s.get_bool("IsMetric")
|
||||
self.below_speed_pause = self.param_s.get_bool("BelowSpeedPause")
|
||||
self.pause_lateral_speed = self.param_s.get("PauseLateralSpeed", encoding="utf8")
|
||||
self.prev_acc_mads_combo = False
|
||||
self.mads_event_lock = True
|
||||
self.gap_button_counter = 0
|
||||
@@ -606,7 +608,10 @@ class CarInterfaceBase(ABC):
|
||||
if self.CP.openpilotLongitudinalControl:
|
||||
self.toggle_exp_mode(gap_button)
|
||||
|
||||
cs_out.belowLaneChangeSpeed = cs_out.vEgo < LANE_CHANGE_SPEED_MIN and self.below_speed_pause
|
||||
below_lateral_speed = LANE_CHANGE_SPEED_MIN if not self.pause_lateral_speed else \
|
||||
self.pause_lateral_speed * (CV.KPH_TO_MS if self.is_metric else CV.MPH_TO_MS)
|
||||
|
||||
cs_out.belowLaneChangeSpeed = cs_out.vEgo < below_lateral_speed and self.below_speed_pause
|
||||
|
||||
if cs_out.gearShifter in [GearShifter.park, GearShifter.reverse] or cs_out.doorOpen or \
|
||||
(cs_out.seatbeltUnlatched and cs_out.gearShifter != GearShifter.park):
|
||||
@@ -708,6 +713,10 @@ class CarInterfaceBase(ABC):
|
||||
def sp_update_params(self):
|
||||
self.experimental_mode = self.param_s.get_bool("ExperimentalMode")
|
||||
self._frame += 1
|
||||
if self._frame % 100 == 0:
|
||||
self.is_metric = self.param_s.get_bool("IsMetric")
|
||||
self.below_speed_pause = self.param_s.get_bool("BelowSpeedPause")
|
||||
self.pause_lateral_speed = self.param_s.get("PauseLateralSpeed", encoding="utf8")
|
||||
if self._frame % 300 == 0:
|
||||
self._frame = 0
|
||||
self.reverse_dm_cam = self.param_s.get_bool("ReverseDmCam")
|
||||
|
||||
@@ -80,6 +80,7 @@ def manager_init() -> None:
|
||||
("OnroadScreenOffEvent", "1"),
|
||||
("OnroadSettings", "1"),
|
||||
("PathOffset", "0"),
|
||||
("PauseLateralSpeed", "0"),
|
||||
("ReverseAccChange", "0"),
|
||||
("ScreenRecorder", "1"),
|
||||
("ShowDebugUI", "1"),
|
||||
|
||||
@@ -16,7 +16,7 @@ LaneChangeSettings::LaneChangeSettings(QWidget* parent) : QWidget(parent) {
|
||||
{
|
||||
"BelowSpeedPause",
|
||||
tr("Pause Lateral Below Speed w/ Blinker"),
|
||||
tr("Enable this toggle to pause lateral actuation with blinker when traveling below 20 MPH or 32 km/h."),
|
||||
tr("Enable this toggle to pause lateral actuation with blinker when traveling below the desired speed selected below."),
|
||||
"../assets/offroad/icon_blank.png",
|
||||
},
|
||||
{
|
||||
@@ -41,16 +41,32 @@ LaneChangeSettings::LaneChangeSettings(QWidget* parent) : QWidget(parent) {
|
||||
connect(auto_lane_change_timer, &AutoLaneChangeTimer::updateOtherToggles, this, &LaneChangeSettings::updateToggles);
|
||||
list->addItem(auto_lane_change_timer);
|
||||
|
||||
// Pause Lateral Below Speed w/ Blinker
|
||||
pause_lateral_speed = new PauseLateralSpeed();
|
||||
pause_lateral_speed->showDescription();
|
||||
connect(pause_lateral_speed, &SPOptionControl::updateLabels, pause_lateral_speed, &PauseLateralSpeed::refresh);
|
||||
|
||||
for (auto &[param, title, desc, icon] : toggle_defs) {
|
||||
auto toggle = new ParamControl(param, title, desc, icon, this);
|
||||
|
||||
list->addItem(toggle);
|
||||
toggles[param.toStdString()] = toggle;
|
||||
|
||||
if (param == "BelowSpeedPause") {
|
||||
list->addItem(pause_lateral_speed);
|
||||
}
|
||||
|
||||
// trigger offroadTransition when going onroad/offroad
|
||||
connect(uiState(), &UIState::offroadTransition, toggle, &ParamControl::setEnabled);
|
||||
}
|
||||
|
||||
connect(toggles["BelowSpeedPause"], &ToggleControl::toggleFlipped, [=](bool state) {
|
||||
pause_lateral_speed->setEnabled(state);
|
||||
pause_lateral_speed->setVisible(state);
|
||||
});
|
||||
pause_lateral_speed->setEnabled(toggles["BelowSpeedPause"]->isToggled());
|
||||
pause_lateral_speed->setVisible(toggles["BelowSpeedPause"]->isToggled());
|
||||
|
||||
main_layout->addWidget(new ScrollView(list, this));
|
||||
}
|
||||
|
||||
@@ -111,3 +127,25 @@ void AutoLaneChangeTimer::refresh() {
|
||||
setLabel("2 " + second);
|
||||
}
|
||||
}
|
||||
|
||||
PauseLateralSpeed::PauseLateralSpeed() : SPOptionControl (
|
||||
"PauseLateralSpeed",
|
||||
"",
|
||||
tr("Pause lateral actuation with blinker when traveling below the desired speed selected. Default is 20 MPH or 32 km/h."),
|
||||
"../assets/offroad/icon_blank.png",
|
||||
{0, 255},
|
||||
5) {
|
||||
|
||||
refresh();
|
||||
}
|
||||
|
||||
void PauseLateralSpeed::refresh() {
|
||||
QString option = QString:: fromStdString(params.get("PauseLateralSpeed"));
|
||||
bool is_metric = params.getBool("IsMetric");
|
||||
|
||||
if (option == "0") {
|
||||
setLabel(tr("Default"));
|
||||
} else {
|
||||
setLabel(option + " " + (is_metric ? tr("km/h") : tr("mph")));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,6 +19,22 @@ private:
|
||||
Params params;
|
||||
};
|
||||
|
||||
class PauseLateralSpeed : public SPOptionControl {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
PauseLateralSpeed();
|
||||
|
||||
void refresh();
|
||||
|
||||
signals:
|
||||
void ToggleUpdated();
|
||||
|
||||
private:
|
||||
Params params;
|
||||
};
|
||||
|
||||
|
||||
class LaneChangeSettings : public QWidget {
|
||||
Q_OBJECT
|
||||
|
||||
@@ -37,4 +53,5 @@ private:
|
||||
std::map<std::string, ParamControl*> toggles;
|
||||
|
||||
AutoLaneChangeTimer *auto_lane_change_timer;
|
||||
};
|
||||
PauseLateralSpeed *pause_lateral_speed;
|
||||
};
|
||||
Reference in New Issue
Block a user