#!/usr/bin/env python3 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								import  os 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								import  signal 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								signal . signal ( signal . SIGINT ,  signal . SIG_DFL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								import  cereal . messaging  as  messaging 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								from  openpilot . system . hardware  import  HARDWARE 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								from  PyQt5 . QtCore  import  Qt ,  QTimer 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								from  PyQt5 . QtWidgets  import  QLabel ,  QWidget ,  QVBoxLayout ,  QStackedLayout ,  QApplication 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								from  openpilot . selfdrive . ui . qt . python_helpers  import  set_main_window 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								if  __name__  ==  " __main__ " : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  app  =  QApplication ( [ ] ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  win  =  QWidget ( ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  set_main_window ( win ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  bg  =  QLabel ( " " ,  alignment = Qt . AlignCenter ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  alert1  =  QLabel ( ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  alert2  =  QLabel ( ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  vlayout  =  QVBoxLayout ( ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  vlayout . addWidget ( alert1 ,  alignment = Qt . AlignCenter ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  vlayout . addWidget ( alert2 ,  alignment = Qt . AlignCenter ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  tmp  =  QWidget ( ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  tmp . setLayout ( vlayout ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  stack  =  QStackedLayout ( win ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  stack . addWidget ( tmp ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  stack . addWidget ( bg ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  stack . setStackingMode ( QStackedLayout . StackAll ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  win . setObjectName ( " win " ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  win . setStyleSheet ( """ 
  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    #win { 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      background - color :  black ; 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    QLabel  { 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      color :  white ; 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      font - size :  40 px ; 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  """ ) 
  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  sm  =  messaging . SubMaster ( [ ' deviceState ' ,  ' controlsState ' ] ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  def  update ( ) : 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    sm . update ( 0 ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    onroad  =  sm . all_checks ( [ ' deviceState ' ] )  and  sm [ ' deviceState ' ] . started 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if  onroad : 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      cs  =  sm [ ' controlsState ' ] 
 
							 
						 
					
						
							
								
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      color  =  ( " grey "  if  str ( cs . state )  in  ( " overriding " ,  " preEnabled " )  else  " green " )  if  cs . enabled  else  " blue " 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      bg . setText ( " \U0001F44D "  if  cs . engageable  else  " \U0001F6D1 " ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      bg . setStyleSheet ( f " font-size: 100px; background-color:  { color } ; " ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      bg . show ( ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      alert1 . setText ( cs . alertText1 ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      alert2 . setText ( cs . alertText2 ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      if  not  sm . alive [ ' controlsState ' ] : 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        alert1 . setText ( " waiting for controls... " ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    else : 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      bg . hide ( ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      alert1 . setText ( " " ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      alert2 . setText ( " offroad " ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    HARDWARE . set_screen_brightness ( 100  if  onroad  else  40 ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    os . system ( " echo 0 > /sys/class/backlight/panel0-backlight/bl_power " ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  timer  =  QTimer ( ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  timer . timeout . connect ( update ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  timer . start ( 50 ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  app . exec_ ( )