Merge branch 'SP-134-pause-lateral-speed' into master-dev-c3

# Conflicts:
#	CHANGELOGS.md
This commit is contained in:
Jason Wen
2024-05-29 00:22:04 -04:00
6 changed files with 72 additions and 3 deletions
+3
View File
@@ -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
+1
View File
@@ -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},
+10 -1
View File
@@ -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")
+1
View File
@@ -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;
};