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/monitoring/dmonitoringd.py b/selfdrive/monitoring/dmonitoringd.py index 2a657f7ba..d2a6163a7 100644 --- a/selfdrive/monitoring/dmonitoringd.py +++ b/selfdrive/monitoring/dmonitoringd.py @@ -1,9 +1,12 @@ #!/usr/bin/env python3 import cereal.messaging as messaging +from opendbc.car import structs from openpilot.common.params import Params from openpilot.common.realtime import config_realtime_process from openpilot.selfdrive.monitoring.helpers import DriverMonitoring +GearShifter = structs.CarState.GearShifter + def dmonitoringd_thread(): config_realtime_process([0, 1, 2, 3], 5) @@ -43,7 +46,7 @@ def dmonitoringd_thread(): # load live always-on toggle if sm['driverStateV2'].frameId % 40 == 1: DM.always_on = params.get_bool("AlwaysOnDM") - demo_mode = params.get_bool("IsDriverViewEnabled") + demo_mode = params.get_bool("IsDriverViewEnabled") and sm["carState"].gearShifter != GearShifter.reverse # save rhd virtual toggle every 5 mins if (sm['driverStateV2'].frameId % 6000 == 0 and not demo_mode and 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; }