You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					78 lines
				
				1.9 KiB
			
		
		
			
		
	
	
					78 lines
				
				1.9 KiB
			| 
								 
											2 years ago
										 
									 | 
							
								#!/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: 40px;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  """)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  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.status) 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_()
							 |