# include <cassert>
# include <iostream>
# include <cmath>
# include <iostream>
# include <fstream>
# include <signal.h>
# include <QVBoxLayout>
# include <QMouseEvent>
# include <QPushButton>
# include <QGridLayout>
# include "window.hpp"
# include "settings.hpp"
# include "paint.hpp"
# include "common/util.h"
volatile sig_atomic_t do_exit = 0 ;
MainWindow : : MainWindow ( QWidget * parent ) : QWidget ( parent ) {
main_layout = new QStackedLayout ;
# ifdef QCOM2
set_core_affinity ( 7 ) ;
# endif
GLWindow * glWindow = new GLWindow ( this ) ;
main_layout - > addWidget ( glWindow ) ;
SettingsWindow * settingsWindow = new SettingsWindow ( this ) ;
main_layout - > addWidget ( settingsWindow ) ;
main_layout - > setMargin ( 0 ) ;
setLayout ( main_layout ) ;
QObject : : connect ( glWindow , SIGNAL ( openSettings ( ) ) , this , SLOT ( openSettings ( ) ) ) ;
QObject : : connect ( settingsWindow , SIGNAL ( closeSettings ( ) ) , this , SLOT ( closeSettings ( ) ) ) ;
setStyleSheet ( R " (
* {
color : white ;
background - color : # 07233 9 ;
}
) " );
}
void MainWindow : : openSettings ( ) {
main_layout - > setCurrentIndex ( 1 ) ;
}
void MainWindow : : closeSettings ( ) {
main_layout - > setCurrentIndex ( 0 ) ;
}
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 ( ) {
makeCurrent ( ) ;
doneCurrent ( ) ;
}
void GLWindow : : initializeGL ( ) {
initializeOpenGLFunctions ( ) ;
std : : cout < < " OpenGL version: " < < glGetString ( GL_VERSION ) < < std : : endl ;
std : : cout < < " OpenGL vendor: " < < glGetString ( GL_VENDOR ) < < std : : endl ;
std : : cout < < " OpenGL renderer: " < < glGetString ( GL_RENDERER ) < < std : : endl ;
std : : cout < < " OpenGL language version: " < < glGetString ( GL_SHADING_LANGUAGE_VERSION ) < < std : : endl ;
ui_state = new UIState ( ) ;
ui_state - > sound = & sound ;
ui_state - > fb_w = vwp_w ;
ui_state - > fb_h = vwp_h ;
ui_init ( ui_state ) ;
timer - > start ( 50 ) ;
}
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
if ( ui_state - > started ! = onroad ) {
onroad = ui_state - > started ;
timer - > setInterval ( onroad ? 50 : 1000 ) ;
int brightness = onroad ? 1023 : 0 ;
std : : ofstream brightness_control ( " /sys/class/backlight/panel0-backlight/brightness " ) ;
if ( brightness_control . is_open ( ) ) {
brightness_control < < int ( brightness ) < < " \n " ;
brightness_control . close ( ) ;
}
}
# endif
update ( ) ;
}
void GLWindow : : resizeGL ( int w , int h ) {
std : : cout < < " resize " < < w < < " x " < < h < < std : : endl ;
}
void GLWindow : : paintGL ( ) {
ui_draw ( ui_state ) ;
}
void GLWindow : : mousePressEvent ( QMouseEvent * e ) {
// Settings button click
if ( ! ui_state - > scene . uilayout_sidebarcollapsed & & settings_btn . ptInRect ( e - > x ( ) , e - > y ( ) ) ) {
emit openSettings ( ) ;
}
// Vision click
if ( ui_state - > started & & ( e - > x ( ) > = ui_state - > scene . viz_rect . x - bdr_s ) ) {
ui_state - > scene . uilayout_sidebarcollapsed = ! ui_state - > scene . uilayout_sidebarcollapsed ;
}
}
GLuint visionimg_to_gl ( const VisionImg * img , EGLImageKHR * pkhr , void * * pph ) {
unsigned int texture ;
glGenTextures ( 1 , & texture ) ;
glBindTexture ( GL_TEXTURE_2D , texture ) ;
glTexImage2D ( GL_TEXTURE_2D , 0 , GL_RGB , img - > width , img - > height , 0 , GL_RGB , GL_UNSIGNED_BYTE , * pph ) ;
glGenerateMipmap ( GL_TEXTURE_2D ) ;
* pkhr = ( EGLImageKHR ) 1 ; // not NULL
return texture ;
}
void visionimg_destroy_gl ( EGLImageKHR khr , void * ph ) {
// empty
}
FramebufferState * framebuffer_init ( const char * name , int32_t layer , int alpha ,
int * out_w , int * out_h ) {
return ( FramebufferState * ) 1 ; // not null
}