#!/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_ ( )