b5a0b3221c
Wholesale port of the 10 UI files (main.cc, ui.{cc,h}, onroad.{cc,h},
home.{cc,h}, window.{cc,h}, ready.{cc,h}, SConscript). sidebar.{cc,h}
unchanged.
Brings in:
- splash/ready screen rendered via Qt directly (replaces stock home)
- ready page shown when started but gear=park
- ClearPilot offroad menu (Home/Dashcam/Debug panels) replacing stock
- onroad UI: speed widget reading ClearpilotSpeedDisplay (gpsLocation
via speed_logicd), speed-limit widget, cruise-vs-limit warning sign
- nightrider mode: camera suppressed, lane lines/path drawn as 2px
outlines only (ScreenDisplayMode 1 or 4)
- screen power: ScreenDisplayMode 3 forces setAwake(false)
- ignition off blanks screen immediately (tap still wakes)
- Qt-based RPC widget-tree dump server at ipc:///tmp/clearpilot_ui_rpc
- crash handler in main.cc with stack trace
Deviation from broken (3 sites): no_lat_lane_change is read from
paramsMemory (controlsd writes it there in baseline) instead of broken's
custom cereal field frogpilotCarControl.noLatLaneChange. Keeps the
existing self-driving wiring intact.
SConscript drops screenrecorder.cc from qt_src (broken did the same;
omx_encoder.cc still built for dashcamd's future link).
Build clean. UI hasn't been launched yet — that comes after the
controlsd button-handler commit lands.
Translation .ts files are auto-regenerated by Qt's lupdate; included.
56 lines
1.5 KiB
C++
Executable File
56 lines
1.5 KiB
C++
Executable File
#include <sys/resource.h>
|
|
#include <csignal>
|
|
#include <cstdio>
|
|
#include <cstdlib>
|
|
#include <execinfo.h>
|
|
#include <unistd.h>
|
|
|
|
#include <QApplication>
|
|
#include <QTranslator>
|
|
|
|
#include "system/hardware/hw.h"
|
|
#include "selfdrive/ui/qt/qt_window.h"
|
|
#include "selfdrive/ui/qt/util.h"
|
|
#include "selfdrive/ui/qt/window.h"
|
|
|
|
// CLEARPILOT: crash handler — prints stack trace to stderr on SIGSEGV/SIGABRT
|
|
static void crash_handler(int sig) {
|
|
const char *sig_name = (sig == SIGSEGV) ? "SIGSEGV" : (sig == SIGABRT) ? "SIGABRT" : "SIGNAL";
|
|
fprintf(stderr, "\n=== CRASH: %s (signal %d) ===\n", sig_name, sig);
|
|
|
|
void *frames[64];
|
|
int count = backtrace(frames, 64);
|
|
fprintf(stderr, "Backtrace (%d frames):\n", count);
|
|
backtrace_symbols_fd(frames, count, STDERR_FILENO);
|
|
fprintf(stderr, "=== END CRASH ===\n");
|
|
fflush(stderr);
|
|
|
|
// Re-raise to get default behavior (core dump / exit)
|
|
signal(sig, SIG_DFL);
|
|
raise(sig);
|
|
}
|
|
|
|
int main(int argc, char *argv[]) {
|
|
signal(SIGSEGV, crash_handler);
|
|
signal(SIGABRT, crash_handler);
|
|
|
|
setpriority(PRIO_PROCESS, 0, -20);
|
|
|
|
qInstallMessageHandler(swagLogMessageHandler);
|
|
initApp(argc, argv);
|
|
|
|
QTranslator translator;
|
|
QString translation_file = QString::fromStdString(Params().get("LanguageSetting"));
|
|
if (!translator.load(QString(":/%1").arg(translation_file)) && translation_file.length()) {
|
|
qCritical() << "Failed to load translation file:" << translation_file;
|
|
}
|
|
|
|
QApplication a(argc, argv);
|
|
a.installTranslator(&translator);
|
|
|
|
MainWindow w;
|
|
setMainWindow(&w);
|
|
a.installEventFilter(&w);
|
|
return a.exec();
|
|
}
|