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