From cf070c2aae78fa2c3fd85b970875dc5f8b4952ce Mon Sep 17 00:00:00 2001 From: James <91348155+FrogAi@users.noreply.github.com> Date: Mon, 1 Dec 2025 12:00:00 -0700 Subject: [PATCH] Show Driver Camera When In Reverse --- frogpilot/ui/frogpilot_ui.cc | 1 + frogpilot/ui/frogpilot_ui.h | 1 + selfdrive/ui/qt/home.cc | 19 +++++++++++++++---- selfdrive/ui/qt/home.h | 2 +- selfdrive/ui/qt/window.cc | 2 +- 5 files changed, 19 insertions(+), 6 deletions(-) diff --git a/frogpilot/ui/frogpilot_ui.cc b/frogpilot/ui/frogpilot_ui.cc index 4983416df..5cd45c113 100644 --- a/frogpilot/ui/frogpilot_ui.cc +++ b/frogpilot/ui/frogpilot_ui.cc @@ -56,4 +56,5 @@ void FrogPilotUIState::update() { update_state(this); frogpilot_scene.conditional_status = frogpilot_scene.enabled ? params_memory.getInt("CEStatus") : 0; + frogpilot_scene.driver_camera_timer = frogpilot_scene.reverse && frogpilot_scene.frogpilot_toggles.value("driver_camera_in_reverse").toBool() ? frogpilot_scene.driver_camera_timer + 1 : 0; } diff --git a/frogpilot/ui/frogpilot_ui.h b/frogpilot/ui/frogpilot_ui.h index c61c0bc85..8bba3446a 100644 --- a/frogpilot/ui/frogpilot_ui.h +++ b/frogpilot/ui/frogpilot_ui.h @@ -17,6 +17,7 @@ struct FrogPilotUIScene { bool standstill; int conditional_status; + int driver_camera_timer; int started_timer; QJsonObject frogpilot_toggles; diff --git a/selfdrive/ui/qt/home.cc b/selfdrive/ui/qt/home.cc index cd45ed1e3..39b83bf1f 100644 --- a/selfdrive/ui/qt/home.cc +++ b/selfdrive/ui/qt/home.cc @@ -70,9 +70,18 @@ void HomeWindow::updateState(const UIState &s, const FrogPilotUIState &fs) { const QJsonObject &frogpilot_toggles = frogpilot_scene.frogpilot_toggles; if (s.scene.started) { - developer_sidebar->setVisible(frogpilot_toggles.value("developer_sidebar").toBool()); + if (frogpilot_scene.driver_camera_timer >= UI_FREQ / 2) { + showDriverView(true, true); + } else { + if (driver_view->isVisible()) { + sidebar->setVisible(params.getBool("Sidebar") || frogpilot_toggles.value("debug_mode").toBool()); + slayout->setCurrentWidget(onroad); + } - frogpilotUIState()->frogpilot_scene.sidebars_open = developer_sidebar->isVisible() && sidebar->isVisible(); + developer_sidebar->setVisible(frogpilot_toggles.value("developer_sidebar").toBool()); + + frogpilotUIState()->frogpilot_scene.sidebars_open = developer_sidebar->isVisible() && sidebar->isVisible(); + } } } @@ -94,9 +103,11 @@ void HomeWindow::offroadTransition(bool offroad) { } } -void HomeWindow::showDriverView(bool show) { +void HomeWindow::showDriverView(bool show, bool started) { if (show) { - emit closeSettings(); + if (!started) { + emit closeSettings(); + } slayout->setCurrentWidget(driver_view); } else { slayout->setCurrentWidget(home); diff --git a/selfdrive/ui/qt/home.h b/selfdrive/ui/qt/home.h index 18e981670..79549c6dc 100644 --- a/selfdrive/ui/qt/home.h +++ b/selfdrive/ui/qt/home.h @@ -58,7 +58,7 @@ signals: public slots: void offroadTransition(bool offroad); - void showDriverView(bool show); + void showDriverView(bool show, bool started=false); void showSidebar(bool show); protected: diff --git a/selfdrive/ui/qt/window.cc b/selfdrive/ui/qt/window.cc index 9cf7d219f..52ab64f82 100644 --- a/selfdrive/ui/qt/window.cc +++ b/selfdrive/ui/qt/window.cc @@ -92,7 +92,7 @@ bool MainWindow::eventFilter(QObject *obj, QEvent *event) { case QEvent::MouseButtonPress: case QEvent::MouseMove: { // ignore events when device is awakened by resetInteractiveTimeout - ignore = !device()->isAwake(); + ignore = !device()->isAwake() || frogpilot_scene.driver_camera_timer >= UI_FREQ / 2; device()->resetInteractiveTimeout(frogpilot_toggles.value("screen_timeout").toInt(), frogpilot_toggles.value("screen_timeout_onroad").toInt()); break; }