diff --git a/selfdrive/ui/qt/window.cc b/selfdrive/ui/qt/window.cc index 4bb402dc4..60a8e28cd 100644 --- a/selfdrive/ui/qt/window.cc +++ b/selfdrive/ui/qt/window.cc @@ -58,6 +58,13 @@ GLWindow::GLWindow(QWidget *parent) : QOpenGLWidget(parent) { timer = new QTimer(this); QObject::connect(timer, SIGNAL(timeout()), this, SLOT(timerUpdate())); + int result = read_param(&brightness_b, "BRIGHTNESS_B", true); + result += read_param(&brightness_m, "BRIGHTNESS_M", true); + if(result != 0) { + brightness_b = 0.0; + brightness_m = 5.0; + } + smooth_brightness = 512; } GLWindow::~GLWindow() { @@ -82,6 +89,16 @@ void GLWindow::initializeGL() { } void GLWindow::timerUpdate(){ + // Update brightness + float clipped_brightness = std::min(1023.0f, (ui_state->light_sensor*brightness_m) + brightness_b); + smooth_brightness = clipped_brightness * 0.01f + smooth_brightness * 0.99f; + + std::ofstream brightness_control("/sys/class/backlight/panel0-backlight/brightness"); + if (brightness_control.is_open()){ + brightness_control << int(smooth_brightness) << "\n"; + brightness_control.close(); + } + ui_update(ui_state); #ifdef QCOM2 diff --git a/selfdrive/ui/qt/window.hpp b/selfdrive/ui/qt/window.hpp index df0f68876..cc525a6e0 100644 --- a/selfdrive/ui/qt/window.hpp +++ b/selfdrive/ui/qt/window.hpp @@ -2,6 +2,7 @@ #include #include +#include #include #include #include @@ -54,6 +55,10 @@ private: QtSound sound; bool onroad = true; + QLabel * label = NULL; + float brightness_b = 0; + float brightness_m = 0; + float smooth_brightness = 0; public slots: void timerUpdate(); diff --git a/selfdrive/ui/ui.cc b/selfdrive/ui/ui.cc index 7e03ea13a..8ca5d0170 100644 --- a/selfdrive/ui/ui.cc +++ b/selfdrive/ui/ui.cc @@ -24,7 +24,7 @@ int write_param_float(float param, const char* param_name, bool persistent_param void ui_init(UIState *s) { s->sm = new SubMaster({"model", "controlsState", "uiLayoutState", "liveCalibration", "radarState", "thermal", - "health", "carParams", "ubloxGnss", "driverState", "dMonitoringState"}); + "health", "carParams", "ubloxGnss", "driverState", "dMonitoringState", "sensorEvents"}); s->started = false; s->status = STATUS_OFFROAD; @@ -117,7 +117,6 @@ void update_sockets(UIState *s) { UIScene &scene = s->scene; SubMaster &sm = *(s->sm); - // poll sockets if (sm.update(0) == 0){ return; } @@ -219,6 +218,16 @@ void update_sockets(UIState *s) { scene.frontview = false; } +#ifdef QCOM2 // TODO: use this for QCOM too + if (sm.updated("sensorEvents")) { + for (auto sensor : sm["sensorEvents"].getSensorEvents()) { + if (sensor.which() == cereal::SensorEventData::LIGHT) { + s->light_sensor = sensor.getLight(); + } + } + } +#endif + s->started = scene.thermal.getStarted() || scene.frontview; }