# Conflicts: # .github/workflows/selfdrive_tests.yaml # common/params.h # common/params_keys.h # common/params_pyx.pyx # docs/CARS.md # opendbc_repo # panda # selfdrive/car/tests/test_models.py # selfdrive/pandad/pandad.cc # selfdrive/pandad/pandad.h # selfdrive/selfdrived/selfdrived.py # selfdrive/ui/translations/main_ar.ts # selfdrive/ui/translations/main_de.ts # selfdrive/ui/translations/main_es.ts # selfdrive/ui/translations/main_fr.ts # selfdrive/ui/translations/main_ja.ts # selfdrive/ui/translations/main_ko.ts # selfdrive/ui/translations/main_pt-BR.ts # selfdrive/ui/translations/main_th.ts # selfdrive/ui/translations/main_tr.ts # selfdrive/ui/translations/main_zh-CHS.ts # selfdrive/ui/translations/main_zh-CHT.ts # system/athena/athenad.py # system/athena/manage_athenad.py # system/manager/manager.py # system/sentry.py # uv.lock Sync: `commaai/opendbc:master` into `sunnypilot/opendbc:master` Sync: `commaai/panda:master` into `sunnypilot/panda:master`
ui
The user interfaces here are built with raylib.
Quick start:
- set
SHOW_FPS=1to show the FPS - set
STRICT_MODE=1to kill the app if it drops too much below 60fps - set
SCALE=1.5to scale the entire UI by 1.5x - https://www.raylib.com/cheatsheet/cheatsheet.html
- https://electronstudio.github.io/raylib-python-cffi/README.html#quickstart
Style guide:
- All graphical elements should subclass
Widget.- Prefer a stateful widget over a function for easy migration from QT
- All internal class variables and functions should be prefixed with
_