| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -3,7 +3,7 @@ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#include <cmath> | 
					 | 
					 | 
					 | 
					#include <cmath> | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#include <iostream> | 
					 | 
					 | 
					 | 
					#include <iostream> | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#include <fstream> | 
					 | 
					 | 
					 | 
					#include <fstream> | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#include <future> | 
					 | 
					 | 
					 | 
					#include <thread> | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#include <signal.h> | 
					 | 
					 | 
					 | 
					#include <signal.h> | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#include <QVBoxLayout> | 
					 | 
					 | 
					 | 
					#include <QVBoxLayout> | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -16,9 +16,21 @@ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#include "paint.hpp" | 
					 | 
					 | 
					 | 
					#include "paint.hpp" | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#include "common/util.h" | 
					 | 
					 | 
					 | 
					#include "common/util.h" | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					#include "common/timing.h" | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					#define BACKLIGHT_DT 0.25 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					#define BACKLIGHT_TS 2.00 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					volatile sig_atomic_t do_exit = 0; | 
					 | 
					 | 
					 | 
					volatile sig_atomic_t do_exit = 0; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					static void set_backlight(int brightness){ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  std::ofstream brightness_control("/sys/class/backlight/panel0-backlight/brightness"); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  if (brightness_control.is_open()){ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    brightness_control << brightness << "\n"; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    brightness_control.close(); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					MainWindow::MainWindow(QWidget *parent) : QWidget(parent) { | 
					 | 
					 | 
					 | 
					MainWindow::MainWindow(QWidget *parent) : QWidget(parent) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  main_layout = new QStackedLayout; | 
					 | 
					 | 
					 | 
					  main_layout = new QStackedLayout; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -59,11 +71,14 @@ GLWindow::GLWindow(QWidget *parent) : QOpenGLWidget(parent) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  timer = new QTimer(this); | 
					 | 
					 | 
					 | 
					  timer = new QTimer(this); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  QObject::connect(timer, SIGNAL(timeout()), this, SLOT(timerUpdate())); | 
					 | 
					 | 
					 | 
					  QObject::connect(timer, SIGNAL(timeout()), this, SLOT(timerUpdate())); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  backlight_timer = new QTimer(this); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  QObject::connect(backlight_timer, SIGNAL(timeout()), this, SLOT(backlightUpdate())); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  int result = read_param(&brightness_b, "BRIGHTNESS_B", true); | 
					 | 
					 | 
					 | 
					  int result = read_param(&brightness_b, "BRIGHTNESS_B", true); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  result += read_param(&brightness_m, "BRIGHTNESS_M", true); | 
					 | 
					 | 
					 | 
					  result += read_param(&brightness_m, "BRIGHTNESS_M", true); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  if(result != 0) { | 
					 | 
					 | 
					 | 
					  if(result != 0) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    brightness_b = 0.0; | 
					 | 
					 | 
					 | 
					    brightness_b = 200.0; | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    brightness_m = 5.0; | 
					 | 
					 | 
					 | 
					    brightness_m = 10.0; | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  } | 
					 | 
					 | 
					 | 
					  } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  smooth_brightness = 512; | 
					 | 
					 | 
					 | 
					  smooth_brightness = 512; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -86,39 +101,37 @@ void GLWindow::initializeGL() { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  ui_state->fb_h = vwp_h; | 
					 | 
					 | 
					 | 
					  ui_state->fb_h = vwp_h; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  ui_init(ui_state); | 
					 | 
					 | 
					 | 
					  ui_init(ui_state); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  timer->start(50); | 
					 | 
					 | 
					 | 
					  timer->start(0); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  backlight_timer->start(BACKLIGHT_DT * 100); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					void GLWindow::timerUpdate(){ | 
					 | 
					 | 
					 | 
					void GLWindow::backlightUpdate(){ | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  // Update brightness
 | 
					 | 
					 | 
					 | 
					  // Update brightness
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  float k = (BACKLIGHT_DT / BACKLIGHT_TS) / (1.0f + BACKLIGHT_DT / BACKLIGHT_TS); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  float clipped_brightness = std::min(1023.0f, (ui_state->light_sensor*brightness_m) + brightness_b); | 
					 | 
					 | 
					 | 
					  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; | 
					 | 
					 | 
					 | 
					  smooth_brightness = clipped_brightness * k + smooth_brightness * (1.0f - k); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  int brightness = smooth_brightness; | 
					 | 
					 | 
					 | 
					  int brightness = smooth_brightness; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#ifdef QCOM2 | 
					 | 
					 | 
					 | 
					#ifdef QCOM2 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  if (ui_state->started != onroad){ | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    onroad = ui_state->started; | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    timer->setInterval(onroad ? 50 : 1000); | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  } | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  if (!ui_state->started){ | 
					 | 
					 | 
					 | 
					  if (!ui_state->started){ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    brightness = 0; | 
					 | 
					 | 
					 | 
					    brightness = 0; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  } | 
					 | 
					 | 
					 | 
					  } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#endif | 
					 | 
					 | 
					 | 
					#endif | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  auto f = std::async(std::launch::async, | 
					 | 
					 | 
					 | 
					  std::thread{set_backlight, brightness}.detach(); | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					             [brightness]{ | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					               std::ofstream brightness_control("/sys/class/backlight/panel0-backlight/brightness"); | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					               if (brightness_control.is_open()){ | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                 brightness_control << brightness << "\n"; | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                 brightness_control.close(); | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					             }); | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					void GLWindow::timerUpdate(){ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					#ifdef QCOM2 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  if (ui_state->started != onroad){ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    onroad = ui_state->started; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    timer->setInterval(onroad ? 0 : 1000); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					#endif | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  ui_update(ui_state); | 
					 | 
					 | 
					 | 
					  ui_update(ui_state); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  update(); | 
					 | 
					 | 
					 | 
					  repaint(); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					void GLWindow::resizeGL(int w, int h) { | 
					 | 
					 | 
					 | 
					void GLWindow::resizeGL(int w, int h) { | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
  |