From 026a580ee3919e38de000837ca2e47f3ee115a85 Mon Sep 17 00:00:00 2001 From: Willem Melching Date: Tue, 9 Mar 2021 17:58:26 +0100 Subject: [PATCH] Use exposure for screen brightness (#20290) * use camera to set screen brightness * leave default * lower default * fix offroad * increase offroad brightness * ifdef ifndef * fix qcomgp --- selfdrive/ui/qt/home.cc | 12 ++++++++---- selfdrive/ui/ui.cc | 16 ++++++++++++++-- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/selfdrive/ui/qt/home.cc b/selfdrive/ui/qt/home.cc index 4ed0748ce1..c57c5b7a02 100644 --- a/selfdrive/ui/qt/home.cc +++ b/selfdrive/ui/qt/home.cc @@ -26,6 +26,7 @@ #define BACKLIGHT_DT 0.25 #define BACKLIGHT_TS 2.00 +#define BACKLIGHT_OFFROAD 512 OffroadHome::OffroadHome(QWidget* parent) : QWidget(parent) { QVBoxLayout* main_layout = new QVBoxLayout(); @@ -215,10 +216,10 @@ GLWindow::GLWindow(QWidget* parent) : QOpenGLWidget(parent) { int result = read_param(&brightness_b, "BRIGHTNESS_B", true); result += read_param(&brightness_m, "BRIGHTNESS_M", true); if (result != 0) { - brightness_b = 200.0; - brightness_m = 10.0; + brightness_b = 10.0; + brightness_m = 1.0; } - smooth_brightness = 512; + smooth_brightness = BACKLIGHT_OFFROAD; } GLWindow::~GLWindow() { @@ -247,8 +248,11 @@ void GLWindow::backlightUpdate() { // Update brightness float k = (BACKLIGHT_DT / BACKLIGHT_TS) / (1.0f + BACKLIGHT_DT / BACKLIGHT_TS); - float clipped_brightness = std::min(1023.0f, (ui_state.scene.light_sensor * brightness_m) + brightness_b); + float clipped_brightness = ui_state.scene.started ? + std::min(1023.0f, (ui_state.scene.light_sensor * brightness_m) + brightness_b) : BACKLIGHT_OFFROAD; + smooth_brightness = clipped_brightness * k + smooth_brightness * (1.0f - k); + int brightness = smooth_brightness; if (!ui_state.awake) { diff --git a/selfdrive/ui/ui.cc b/selfdrive/ui/ui.cc index 0023dcdb22..d8cb4b33fe 100644 --- a/selfdrive/ui/ui.cc +++ b/selfdrive/ui/ui.cc @@ -54,8 +54,13 @@ static void ui_init_vision(UIState *s) { void ui_init(UIState *s) { - s->sm = new SubMaster({"modelV2", "controlsState", "uiLayoutState", "liveCalibration", "radarState", "deviceState", "liveLocationKalman", - "pandaState", "carParams", "driverState", "driverMonitoringState", "sensorEvents", "carState", "ubloxGnss"}); + s->sm = new SubMaster({ + "modelV2", "controlsState", "uiLayoutState", "liveCalibration", "radarState", "deviceState", "liveLocationKalman", + "pandaState", "carParams", "driverState", "driverMonitoringState", "sensorEvents", "carState", "ubloxGnss", +#ifdef QCOM2 + "roadCameraState", +#endif + }); s->scene.started = false; s->status = STATUS_OFFROAD; @@ -215,7 +220,9 @@ static void update_sockets(UIState *s) { if (sm.updated("sensorEvents")) { for (auto sensor : sm["sensorEvents"].getSensorEvents()) { if (sensor.which() == cereal::SensorEventData::LIGHT) { +#ifndef QCOM2 scene.light_sensor = sensor.getLight(); +#endif } else if (!scene.started && sensor.which() == cereal::SensorEventData::ACCELERATION) { auto accel = sensor.getAcceleration().getV(); if (accel.totalSize().wordCount){ // TODO: sometimes empty lists are received. Figure out why @@ -229,6 +236,11 @@ static void update_sockets(UIState *s) { } } } +#ifdef QCOM2 + if (sm.updated("roadCameraState")) { + scene.light_sensor = std::clamp(1023.0 - sm["roadCameraState"].getRoadCameraState().getIntegLines(), 0.0, 1023.0); + } +#endif scene.started = scene.deviceState.getStarted() || scene.driver_view; }