openpilot is an open source driver assistance system. openpilot performs the functions of Automated Lane Centering and Adaptive Cruise Control for over 200 supported car makes and models.
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.

51 lines
1.3 KiB

2 weeks ago
import os
2 weeks ago
import threading
import time
from typing import Any
2 weeks ago
from openpilot.system.ui.lib.application import gui_app
class Wrapper:
_renderer: Any | None = None
2 weeks ago
def __init__(self, title: str, renderer_cls, *renderer_args):
2 weeks ago
self._title = title
self._renderer_cls = renderer_cls
self._renderer_args = renderer_args
2 weeks ago
self._stop_event = threading.Event()
self._thread = threading.Thread(target=self._run, daemon=True)
2 weeks ago
self._thread.start()
# wait for renderer to be initialized
while self._renderer is None and self._thread is not None and self._thread.is_alive():
time.sleep(0.01)
def _run(self):
2 weeks ago
if os.getenv("CI") is not None:
return
2 weeks ago
gui_app.init_window(self._title)
self._renderer = renderer = self._renderer_cls(*self._renderer_args)
2 weeks ago
try:
for _ in gui_app.render():
if self._stop_event.is_set():
2 weeks ago
break
renderer.render()
2 weeks ago
finally:
gui_app.close()
def __enter__(self):
return self
def close(self):
if self._thread is not None and self._thread.is_alive():
self._stop_event.set()
self._thread.join(timeout=2.0)
if self._thread.is_alive():
print(f"WARNING: failed to join {self._title} thread")
self._thread = None
def __del__(self):
self.close()
def __exit__(self, exc_type, exc_value, traceback):
self.close()