This commit is contained in:
FrogAi
2024-01-15 06:17:49 -07:00
parent deb2b8d247
commit 458b51c60b
43 changed files with 376 additions and 156 deletions

View File

@@ -160,7 +160,7 @@ OffroadHome::OffroadHome(QWidget* parent) : QFrame(parent) {
left_widget->addWidget(new DriveStats);
left_widget->setStyleSheet("border-radius: 10px;");
left_widget->setCurrentIndex(uiState()->hasPrime() ? 0 : true ? 2 : 1);
left_widget->setCurrentIndex(params.getBool("DriveStats") ? 2 : uiState()->hasPrime() ? 0 : 1);
connect(uiState(), &UIState::primeChanged, [=](bool prime) {
left_widget->setCurrentIndex(prime ? 0 : 1);
});

View File

@@ -205,14 +205,6 @@ AdvancedNetworking::AdvancedNetworking(QWidget* parent, WifiManager* wifi): QWid
});
list->addItem(hiddenNetworkButton);
// Disable onroad uploads toggle
const bool disableOnroadUploads = params.getBool("DisableOnroadUploads");
disableOnroadUploadsToggle = new ToggleControl(tr("Disable Onroad Uploads"), tr("Prevent large data uploads when onroad."), "", disableOnroadUploads);
QObject::connect(disableOnroadUploadsToggle, &ToggleControl::toggleFlipped, [=](bool state) {
params.putBool("DisableOnroadUploads", state);
});
list->addItem(disableOnroadUploadsToggle);
// Set initial config
wifi->updateGsmSettings(roamingEnabled, QString::fromStdString(params.get("GsmApn")), metered);

View File

@@ -67,9 +67,6 @@ private:
WifiManager* wifi = nullptr;
Params params;
// FrogPilot variables
ToggleControl *disableOnroadUploadsToggle;
signals:
void backPress();
void requestWifiScreen();

View File

@@ -136,29 +136,29 @@ void OnroadWindow::mousePressEvent(QMouseEvent* e) {
if (isMaxSpeedClicked || isSpeedClicked || isSpeedLimitClicked) {
// Check if the click was within the max speed area
if (isMaxSpeedClicked) {
reverseCruise = !params.getBool("ReverseCruise");
params.putBoolNonBlocking("ReverseCruise", reverseCruise);
bool currentReverseCruise = !params.getBool("ReverseCruise");
params.putBoolNonBlocking("ReverseCruise", currentReverseCruise);
if (!params.getBool("QOLControls")) {
params.putBoolNonBlocking("QOLControls", true);
}
paramsMemory.putBoolNonBlocking("FrogPilotTogglesUpdated", true);
// Check if the click was within the speed text area
} else if (isSpeedClicked) {
hideSpeed = !params.getBool("HideSpeed");
params.putBoolNonBlocking("HideSpeed", hideSpeed);
bool currentHideSpeed = !params.getBool("HideSpeed");
params.putBoolNonBlocking("HideSpeed", currentHideSpeed);
if (!params.getBool("QOLVisuals")) {
params.putBoolNonBlocking("QOLVisuals", true);
}
} else {
showSLCOffset = !params.getBool("ShowSLCOffset");
params.putBoolNonBlocking("ShowSLCOffset", showSLCOffset);
bool currentShowSLCOffset = !params.getBool("ShowSLCOffset");
params.putBoolNonBlocking("ShowSLCOffset", currentShowSLCOffset);
if (!params.getBool("QOLVisuals")) {
params.putBoolNonBlocking("QOLVisuals", true);
}
}
widgetClicked = true;
paramsMemory.putBoolNonBlocking("FrogPilotTogglesUpdated", true);
// If the click wasn't for anything specific, change the value of "ExperimentalMode"
} else if (scene.experimental_mode_via_press && e->pos() != timeoutPoint) {
} else if (scene.experimental_mode_via_screen && e->pos() != timeoutPoint) {
if (clickTimer.isActive()) {
clickTimer.stop();
if (scene.conditional_experimental) {
@@ -179,7 +179,7 @@ void OnroadWindow::mousePressEvent(QMouseEvent* e) {
// Switch between map and sidebar when using navigate on openpilot
bool sidebarVisible = geometry().x() > 0;
bool show_map = uiState()->scene.navigate_on_openpilot ? sidebarVisible : !sidebarVisible;
if (!scene.experimental_mode_via_press || map->isVisible()) {
if (!scene.experimental_mode_via_screen || map->isVisible()) {
map->setVisible(show_map && !map->isVisible());
}
}
@@ -385,7 +385,7 @@ void ExperimentalButton::changeMode() {
Params paramsMemory = Params("/dev/shm/params");
const auto cp = (*uiState()->sm)["carParams"].getCarParams();
bool can_change = hasLongitudinalControl(cp) && (params.getBool("ExperimentalModeConfirmed") || scene.experimental_mode_via_press);
bool can_change = hasLongitudinalControl(cp) && (params.getBool("ExperimentalModeConfirmed") || scene.experimental_mode_via_screen);
if (can_change) {
if (scene.conditional_experimental) {
int override_value = (scene.conditional_status >= 1 && scene.conditional_status <= 4) ? 0 : scene.conditional_status >= 5 ? 3 : 4;
@@ -432,11 +432,11 @@ void ExperimentalButton::paintEvent(QPaintEvent *event) {
QPixmap img = wheelIcon ? engage_img : (experimental_mode ? experimental_img : engage_img);
QColor background_color = wheelIcon && !isDown() && engageable ?
(scene.always_on_lateral_active ? QColor(10, 186, 181, 255) :
(scene.conditional_status == 1 ? QColor(255, 246, 0, 255) :
(experimental_mode ? QColor(218, 111, 37, 241) :
(scene.navigate_on_openpilot ? QColor(49, 161, 238, 255) : QColor(0, 0, 0, 166)))) :
(scene.always_on_lateral_active ? QColor(10, 186, 181, 255) :
QColor(0, 0, 0, 166));
(scene.navigate_on_openpilot ? QColor(49, 161, 238, 255) : QColor(0, 0, 0, 166))))) :
QColor(0, 0, 0, 166);
if (!scene.show_driver_camera) {
if (rotatingWheel || firefoxRandomEventTriggered) {
@@ -524,8 +524,8 @@ void AnnotatedCameraWidget::updateState(const UIState &s) {
speedLimit = speedLimit - (showSLCOffset ? slcSpeedLimitOffset : 0);
}
has_us_speed_limit = (nav_alive && speed_limit_sign == cereal::NavInstruction::SpeedLimitSign::MUTCD) || slcSpeedLimit;
has_eu_speed_limit = (nav_alive && speed_limit_sign == cereal::NavInstruction::SpeedLimitSign::VIENNA);
has_us_speed_limit = (nav_alive && speed_limit_sign == cereal::NavInstruction::SpeedLimitSign::MUTCD) || (slcSpeedLimit && !useViennaSLCSign);
has_eu_speed_limit = (nav_alive && speed_limit_sign == cereal::NavInstruction::SpeedLimitSign::VIENNA) || (slcSpeedLimit && useViennaSLCSign);
is_metric = s.scene.is_metric;
speedUnit = s.scene.is_metric ? tr("km/h") : tr("mph");
hideBottomIcons = (cs.getAlertSize() != cereal::ControlsState::AlertSize::NONE || customSignals && (turnSignalLeft || turnSignalRight)) || showDriverCamera;
@@ -581,7 +581,8 @@ void AnnotatedCameraWidget::drawHud(QPainter &p) {
QRect set_speed_rect(QPoint(60 + (default_size.width() - set_speed_size.width()) / 2, 45), set_speed_size);
if (is_cruise_set && cruiseAdjustment) {
float transition = qBound(0.0f, 4.0f * (cruiseAdjustment / setSpeed), 1.0f);
QColor min = whiteColor(75), max = redColor(75);
QColor min = whiteColor(75);
QColor max = redColor(75);
p.setPen(QPen(QColor::fromRgbF(
min.redF() + transition * (max.redF() - min.redF()),
@@ -1122,7 +1123,8 @@ void AnnotatedCameraWidget::paintEvent(QPaintEvent *event) {
void AnnotatedCameraWidget::showEvent(QShowEvent *event) {
CameraWidget::showEvent(event);
ui_update_params(uiState());
std::thread updateFrogPilotParams(ui_update_params, uiState());
updateFrogPilotParams.detach();
prev_draw_t = millis_since_boot();
}
@@ -1146,15 +1148,6 @@ void AnnotatedCameraWidget::initializeFrogPilotWidgets() {
main_layout->addLayout(bottom_layout);
if (params.getBool("QOLControls")) {
reverseCruise = params.getBool("ReverseCruise");
}
if (params.getBool("QOLVisuals")) {
hideSpeed = params.getBool("HideSpeed");
showSLCOffset = params.getBool("ShowSLCOffset");
}
// Custom themes configuration
themeConfiguration = {
{1, {QString("frog_theme"), {QColor(23, 134, 68, 242), {{0.0, QBrush(QColor::fromHslF(144 / 360., 0.71, 0.31, 0.9))},
@@ -1200,6 +1193,7 @@ void AnnotatedCameraWidget::updateFrogPilotWidgets(QPainter &p) {
customColors = scene.custom_colors;
desiredFollow = scene.desired_follow;
experimentalMode = scene.experimental_mode;
hideSpeed = scene.hide_speed;
laneWidthLeft = scene.lane_width_left;
laneWidthRight = scene.lane_width_right;
leadInfo = scene.lead_info;
@@ -1208,8 +1202,10 @@ void AnnotatedCameraWidget::updateFrogPilotWidgets(QPainter &p) {
obstacleDistance = scene.obstacle_distance;
obstacleDistanceStock = scene.obstacle_distance_stock;
onroadAdjustableProfiles = scene.personalities_via_screen;
reverseCruise = scene.reverse_cruise;
roadNameUI = scene.road_name_ui;
showDriverCamera = scene.show_driver_camera;
showSLCOffset = scene.show_slc_offset;
slcOverridden = scene.speed_limit_overridden;
slcOverriddenSpeed = scene.speed_limit_overridden_speed;
slcSpeedLimit = scene.speed_limit;
@@ -1218,6 +1214,7 @@ void AnnotatedCameraWidget::updateFrogPilotWidgets(QPainter &p) {
turnSignalLeft = scene.turn_signal_left;
turnSignalRight = scene.turn_signal_right;
useSI = scene.use_si;
useViennaSLCSign = scene.use_vienna_slc_sign;
if (!showDriverCamera) {
if (leadInfo) {

View File

@@ -17,9 +17,6 @@ const int btn_size = 192;
const int img_size = (btn_size / 4) * 3;
// FrogPilot global variables
static bool hideSpeed;
static bool reverseCruise;
static bool showSLCOffset;
static double fps;
// ***** onroad widgets *****
@@ -191,16 +188,20 @@ private:
bool compass;
bool conditionalExperimental;
bool experimentalMode;
bool hideSpeed;
bool leadInfo;
bool mapOpen;
bool muteDM;
bool onroadAdjustableProfiles;
bool reverseCruise;
bool roadNameUI;
bool showDriverCamera;
bool showSLCOffset;
bool slcOverridden;
bool turnSignalLeft;
bool turnSignalRight;
bool useSI;
bool useViennaSLCSign;
double maxAcceleration;
float cruiseAdjustment;
float laneWidthLeft;
@@ -223,6 +224,8 @@ private:
QTimer *animationTimer;
size_t animationFrameIndex;
inline QColor greenColor(int alpha = 242) { return QColor(23, 134, 68, alpha); }
std::unordered_map<int, std::pair<QString, std::pair<QColor, std::map<double, QBrush>>>> themeConfiguration;
std::vector<QPixmap> signalImgVector;

View File

@@ -24,7 +24,7 @@ void Sidebar::drawMetric(QPainter &p, const QPair<QString, QString> &label, QCol
p.drawText(rect.adjusted(22, 0, 0, 0), Qt::AlignCenter, label.first + "\n" + label.second);
}
Sidebar::Sidebar(QWidget *parent) : QFrame(parent), onroad(false), flag_pressed(false), settings_pressed(false) {
Sidebar::Sidebar(QWidget *parent) : QFrame(parent), onroad(false), flag_pressed(false), settings_pressed(false), scene(uiState()->scene) {
home_img = loadPixmap("../assets/images/button_home.png", home_btn.size());
flag_img = loadPixmap("../assets/images/button_flag.png", home_btn.size());
settings_img = loadPixmap("../assets/images/button_settings.png", settings_btn.size(), Qt::IgnoreAspectRatio);
@@ -36,7 +36,6 @@ Sidebar::Sidebar(QWidget *parent) : QFrame(parent), onroad(false), flag_pressed(
setFixedWidth(300);
QObject::connect(uiState(), &UIState::uiUpdate, this, &Sidebar::updateState);
QObject::connect(uiState(), &UIState::uiUpdateFrogPilotParams, this, &Sidebar::updateFrogPilotParams);
pm = std::make_unique<PubMaster, const std::initializer_list<const char *>>({"userFlag"});
@@ -68,7 +67,11 @@ Sidebar::Sidebar(QWidget *parent) : QFrame(parent), onroad(false), flag_pressed(
settings_imgs[key] = loadPixmap(paths[2], settings_btn.size(), Qt::IgnoreAspectRatio);
}
updateFrogPilotParams();
home_img = home_imgs[scene.custom_icons];
flag_img = flag_imgs[scene.custom_icons];
settings_img = settings_imgs[scene.custom_icons];
currentColors = themeConfiguration[scene.custom_colors].second;
}
void Sidebar::mousePressEvent(QMouseEvent *event) {
@@ -144,6 +147,12 @@ void Sidebar::updateState(const UIState &s) {
setProperty("netStrength", strength > 0 ? strength + 1 : 0);
// FrogPilot properties
home_img = home_imgs[scene.custom_icons];
flag_img = flag_imgs[scene.custom_icons];
settings_img = settings_imgs[scene.custom_icons];
currentColors = themeConfiguration[scene.custom_colors].second;
auto frogpilotDeviceState = sm["frogpilotDeviceState"].getFrogpilotDeviceState();
int maxTempC = deviceState.getMaxTempC();
@@ -227,19 +236,6 @@ void Sidebar::updateState(const UIState &s) {
setProperty("pandaStatus", QVariant::fromValue(pandaStatus));
}
void Sidebar::updateFrogPilotParams() {
// Update FrogPilot parameters upon toggle change
isCustomTheme = params.getBool("CustomTheme");
customColors = isCustomTheme ? params.getInt("CustomColors") : 0;
customIcons = isCustomTheme ? params.getInt("CustomIcons") : 0;
home_img = home_imgs[customIcons];
flag_img = flag_imgs[customIcons];
settings_img = settings_imgs[customIcons];
currentColors = themeConfiguration[customColors].second;
}
void Sidebar::paintEvent(QPaintEvent *event) {
QPainter p(this);
p.setPen(Qt::NoPen);

View File

@@ -34,9 +34,6 @@ public slots:
void offroadTransition(bool offroad);
void updateState(const UIState &s);
// FrogPilot slots
void updateFrogPilotParams();
protected:
void paintEvent(QPaintEvent *event) override;
void mousePressEvent(QMouseEvent *event) override;
@@ -70,6 +67,7 @@ private:
// FrogPilot variables
Params params;
UIScene &scene;
ItemStatus cpu_status, memory_status, storage_status;
@@ -80,13 +78,10 @@ private:
std::vector<QColor> currentColors;
bool isCPU;
bool isCustomTheme;
bool isFahrenheit;
bool isGPU;
bool isMemoryUsage;
bool isNumericalTemp;
bool isStorageLeft;
bool isStorageUsed;
int customColors;
int customIcons;
};

View File

@@ -37,7 +37,12 @@ AbstractAlert::AbstractAlert(bool hasRebootBtn, QWidget *parent) : QFrame(parent
disable_check_btn->setFixedSize(625, 125);
footer_layout->addWidget(disable_check_btn, 1, Qt::AlignBottom | Qt::AlignCenter);
QObject::connect(disable_check_btn, &QPushButton::clicked, [=]() {
params.putBool("OfflineMode", true);
if (!params.getBool("FireTheBabysitter")) {
params.putBool("FireTheBabysitter", true);
}
if (!params.getBool("OfflineMode")) {
params.putBool("OfflineMode", true);
}
Hardware::reboot();
});
QObject::connect(disable_check_btn, &QPushButton::clicked, this, &AbstractAlert::dismiss);

View File

@@ -1,6 +1,7 @@
import math
import numpy as np
import time
import threading
import wave
from typing import Dict, Optional, Tuple
@@ -167,7 +168,8 @@ class Soundd:
# Update FrogPilot parameters
if self.params_memory.get_bool("FrogPilotTogglesUpdated"):
self.update_frogpilot_params()
updateFrogPilotParams = threading.Thread(target=self.update_frogpilot_params)
updateFrogPilotParams.start()
def update_frogpilot_params(self):
self.silent_mode = self.params.get_bool("SilentMode")

View File

@@ -309,9 +309,11 @@ void ui_update_params(UIState *s) {
scene.road_name_ui = params.getBool("RoadNameUI") && scene.custom_onroad_ui;
scene.show_fps = params.getBool("ShowFPS") && scene.custom_onroad_ui;
scene.use_si = params.getBool("UseSI") && scene.custom_onroad_ui;
scene.use_vienna_slc_sign = params.getBool("UseVienna") && scene.custom_onroad_ui;
scene.custom_theme = params.getBool("CustomTheme");
scene.custom_colors = scene.custom_theme ? params.getInt("CustomColors") : 0;
scene.custom_icons = scene.custom_theme ? params.getInt("CustomIcons") : 0;
scene.custom_signals = scene.custom_theme ? params.getInt("CustomSignals") : 0;
scene.model_ui = params.getBool("ModelUI");
@@ -323,12 +325,17 @@ void ui_update_params(UIState *s) {
scene.unlimited_road_ui_length = params.getBool("UnlimitedLength") && scene.model_ui;
scene.driver_camera = params.getBool("DriverCamera");
scene.experimental_mode_via_press = params.getBool("ExperimentalModeViaPress");
scene.experimental_mode_via_screen = params.getBool("ExperimentalModeViaScreen") && params.getBool("ExperimentalModeActivation");
scene.mute_dm = params.getBool("MuteDM") && params.getBool("FireTheBabysitter");
scene.personalities_via_screen = (params.getInt("AdjustablePersonalities") == 2 || params.getInt("AdjustablePersonalities") == 3);
scene.quality_of_life_controls = params.getBool("QOLControls");
scene.reverse_cruise = params.getBool("ReverseCruise") && scene.quality_of_life_controls;
scene.quality_of_life_visuals = params.getBool("QOLVisuals");
scene.full_map = params.getBool("QOLVisuals") && scene.quality_of_life_visuals;
scene.full_map = params.getBool("FullMap") && scene.quality_of_life_visuals;
scene.hide_speed = params.getBool("HideSpeed") && scene.quality_of_life_visuals;
scene.show_slc_offset = params.getBool("ShowSLCOffset") && scene.quality_of_life_visuals;
scene.random_events = params.getBool("RandomEvents");
scene.rotating_wheel = params.getBool("RotatingWheel");
@@ -385,8 +392,7 @@ UIState::UIState(QObject *parent) : QObject(parent) {
wifi = new WifiManager(this);
scene.screen_brightness = params.getInt("ScreenBrightness");
ui_update_params(this);
setDefaultParams();
}
@@ -403,8 +409,8 @@ void UIState::update() {
// Update FrogPilot variables when they are changed
Params paramsMemory{"/dev/shm/params"};
if (paramsMemory.getBool("FrogPilotTogglesUpdated")) {
ui_update_params(this);
emit uiUpdateFrogPilotParams();
std::thread updateFrogPilotParams(ui_update_params, this);
updateFrogPilotParams.detach();
}
// FrogPilot live variables that need to be constantly checked

View File

@@ -184,18 +184,22 @@ typedef struct UIScene {
bool driver_camera;
bool enabled;
bool experimental_mode;
bool experimental_mode_via_press;
bool experimental_mode_via_screen;
bool full_map;
bool hide_speed;
bool lead_info;
bool map_open;
bool model_ui;
bool mute_dm;
bool personalities_via_screen;
bool quality_of_life_controls;
bool quality_of_life_visuals;
bool random_events;
bool reverse_cruise;
bool road_name_ui;
bool rotating_wheel;
bool show_driver_camera;
bool show_slc_offset;
bool show_fps;
bool speed_limit_controller;
bool speed_limit_overridden;
@@ -204,6 +208,7 @@ typedef struct UIScene {
bool turn_signal_right;
bool unlimited_road_ui_length;
bool use_si;
bool use_vienna_slc_sign;
float adjusted_cruise;
float lane_line_width;
float lane_width_left;
@@ -221,6 +226,7 @@ typedef struct UIScene {
int conditional_status;
int current_random_event;
int custom_colors;
int custom_icons;
int custom_signals;
int desired_follow;
int obstacle_distance;
@@ -265,9 +271,6 @@ signals:
void primeChanged(bool prime);
void primeTypeChanged(PrimeType prime_type);
// FrogPilot signals
void uiUpdateFrogPilotParams();
private slots:
void update();