Qt on NEOS (#20153)
* qt on neos * cleanup * check arch * fix pc * fix mac * base libs Co-authored-by: Comma Device <device@comma.ai>pull/20159/head
parent
90ba43676a
commit
1c369a9009
15
SConstruct
15
SConstruct
|
@ -264,10 +264,12 @@ Export('envCython')
|
|||
|
||||
# Qt build environment
|
||||
qt_env = None
|
||||
if arch in ["x86_64", "Darwin", "larch64"]:
|
||||
if arch in ["x86_64", "Darwin", "larch64", "aarch64"]:
|
||||
qt_env = env.Clone()
|
||||
|
||||
qt_modules = ["Widgets", "Gui", "Core", "DBus", "Multimedia", "Network", "Concurrent", "WebEngine", "WebEngineWidgets"]
|
||||
qt_modules = ["Widgets", "Gui", "Core", "Network", "Concurrent", "Multimedia"]
|
||||
if arch != "aarch64":
|
||||
qt_modules += ["DBus", "WebEngine", "WebEngineWidgets"]
|
||||
|
||||
qt_libs = []
|
||||
if arch == "Darwin":
|
||||
|
@ -279,6 +281,15 @@ if arch in ["x86_64", "Darwin", "larch64"]:
|
|||
qt_dirs += [f"{QT_BASE}include/Qt{m}" for m in qt_modules]
|
||||
qt_env["LINKFLAGS"] += ["-F" + QT_BASE + "lib"]
|
||||
qt_env["FRAMEWORKS"] += [f"Qt{m}" for m in qt_modules] + ["OpenGL"]
|
||||
elif arch == "aarch64":
|
||||
qt_env['QTDIR'] = "/system/comma/usr"
|
||||
qt_dirs = [
|
||||
f"/system/comma/usr/include/qt",
|
||||
]
|
||||
qt_dirs += [f"/system/comma/usr/include/qt/Qt{m}" for m in qt_modules]
|
||||
|
||||
qt_libs = [f"Qt5{m}" for m in qt_modules]
|
||||
qt_libs += ['EGL', 'GLESv3', 'c++_shared']
|
||||
else:
|
||||
qt_env['QTDIR'] = "/usr"
|
||||
qt_dirs = [
|
||||
|
|
|
@ -445,7 +445,7 @@ def manager_thread():
|
|||
start_managed_process(p)
|
||||
|
||||
# start offroad
|
||||
if EON:
|
||||
if EON and "QT" not in os.environ:
|
||||
pm_apply_packages('enable')
|
||||
start_offroad()
|
||||
|
||||
|
|
|
@ -2,13 +2,16 @@ import os
|
|||
Import('env', 'qt_env', 'arch', 'common', 'messaging', 'gpucommon', 'visionipc',
|
||||
'cereal', 'transformations')
|
||||
|
||||
|
||||
src = ['ui.cc', 'paint.cc', 'sidebar.cc', '#phonelibs/nanovg/nanovg.c']
|
||||
libs = [gpucommon, common, 'zmq', 'capnp', 'kj', 'm', 'OpenCL', cereal, messaging, visionipc, transformations]
|
||||
libs = [gpucommon, common, 'zmq', 'capnp', 'kj', 'm', 'OpenCL', cereal,
|
||||
messaging, visionipc, transformations]
|
||||
|
||||
if qt_env is None:
|
||||
libs += ['EGL', 'GLESv3', 'gnustl_shared', 'log', 'utils', 'gui', 'hardware',
|
||||
'ui', 'CB', 'gsl', 'adreno_utils', 'OpenSLES', 'cutils', 'uuid', 'OpenCL']
|
||||
if arch == 'aarch64':
|
||||
libs += ['log', 'utils', 'gui', 'ui', 'CB', 'gsl', 'adreno_utils',
|
||||
'cutils', 'uuid']
|
||||
|
||||
if arch == 'aarch64' and "QT" not in os.environ:
|
||||
libs += ['EGL', 'GLESv3', 'gnustl_shared', 'hardware', 'OpenSLES', 'cutils', 'uuid', 'ssl', 'crypto']
|
||||
linkflags = ['-Wl,-rpath=/system/lib64,-rpath=/system/comma/usr/lib']
|
||||
|
||||
src += ["android/ui.cc", "android/sl_sound.cc"]
|
||||
|
@ -16,26 +19,27 @@ if qt_env is None:
|
|||
LINKFLAGS=linkflags,
|
||||
LIBS=libs)
|
||||
else:
|
||||
qt_libs = qt_env["LIBS"] + libs + ["pthread", "ssl", "crypto"]
|
||||
|
||||
widgets = qt_env.Library("qt_widgets",
|
||||
["qt/qt_sound.cc", "qt/widgets/keyboard.cc", "qt/widgets/input_field.cc", "qt/widgets/drive_stats.cc", "qt/widgets/ssh_keys.cc",
|
||||
"qt/offroad/networking.cc", "qt/offroad/wifiManager.cc", "qt/widgets/toggle.cc", "qt/widgets/offroad_alerts.cc", "qt/widgets/setup.cc"],
|
||||
LIBS=qt_libs)
|
||||
qt_libs.append(widgets)
|
||||
|
||||
|
||||
qt_base_libs = qt_env["LIBS"] + libs + ["pthread", "ssl", "crypto"]
|
||||
if arch == "Darwin":
|
||||
# fix OpenCL
|
||||
del qt_libs[qt_libs.index('OpenCL')]
|
||||
del qt_base_libs[qt_base_libs.index('OpenCL')]
|
||||
qt_env['FRAMEWORKS'] += ['OpenCL']
|
||||
|
||||
widgets_src = ["qt/widgets/input_field.cc", "qt/widgets/drive_stats.cc",
|
||||
"qt/widgets/ssh_keys.cc", "qt/widgets/toggle.cc", "qt/qt_sound.cc",
|
||||
"qt/widgets/offroad_alerts.cc", "qt/widgets/setup.cc", "qt/widgets/keyboard.cc"]
|
||||
|
||||
if arch != 'aarch64':
|
||||
widgets_src += ["qt/offroad/networking.cc", "qt/offroad/wifiManager.cc"]
|
||||
|
||||
widgets = qt_env.Library("qt_widgets", widgets_src, LIBS=qt_base_libs)
|
||||
qt_libs = qt_base_libs + [widgets]
|
||||
|
||||
qt_src = ["qt/ui.cc", "qt/window.cc", "qt/home.cc", "qt/api.cc", "qt/offroad/settings.cc", "qt/offroad/onboarding.cc", "#phonelibs/qrcode/QrCode.cc"] + src
|
||||
qt_env.Program("_ui", qt_src, LIBS=qt_libs)
|
||||
|
||||
# spinner and text window
|
||||
qt_env.Program("qt/text", ["qt/text.cc"], LIBS=qt_libs)
|
||||
qt_env.Program("qt/spinner", ["qt/spinner.cc"], LIBS=qt_libs)
|
||||
qt_env.Program("qt/text", ["qt/text.cc"], LIBS=qt_base_libs)
|
||||
qt_env.Program("qt/spinner", ["qt/spinner.cc"], LIBS=qt_base_libs)
|
||||
|
||||
# build setup, factory resetter, and installer
|
||||
if "BUILD_SETUP" in os.environ:
|
||||
|
|
|
@ -4,8 +4,6 @@
|
|||
#include <QGridLayout>
|
||||
#include <QVBoxLayout>
|
||||
#include <QDesktopWidget>
|
||||
#include <QtWebEngine>
|
||||
#include <QWebEngineSettings>
|
||||
|
||||
#include "common/params.h"
|
||||
#include "onboarding.hpp"
|
||||
|
@ -76,12 +74,16 @@ QWidget* OnboardingWindow::terms_screen() {
|
|||
QVBoxLayout *main_layout = new QVBoxLayout;
|
||||
main_layout->setContentsMargins(40, 0, 40, 0);
|
||||
|
||||
#ifndef QCOM
|
||||
view = new QWebEngineView(this);
|
||||
view->settings()->setAttribute(QWebEngineSettings::ShowScrollBars, false);
|
||||
QString html = QString::fromStdString(util::read_file("../assets/offroad/tc.html"));
|
||||
view->setHtml(html);
|
||||
main_layout->addWidget(view);
|
||||
|
||||
QObject::connect(view->page(), SIGNAL(scrollPositionChanged(QPointF)), this, SLOT(scrollPositionChanged(QPointF)));
|
||||
#endif
|
||||
|
||||
QHBoxLayout* buttons = new QHBoxLayout;
|
||||
buttons->addWidget(new QPushButton("Decline"));
|
||||
buttons->addSpacing(50);
|
||||
|
@ -93,8 +95,6 @@ QWidget* OnboardingWindow::terms_screen() {
|
|||
updateActiveScreen();
|
||||
});
|
||||
|
||||
QObject::connect(view->page(), SIGNAL(scrollPositionChanged(QPointF)), this, SLOT(scrollPositionChanged(QPointF)));
|
||||
|
||||
QWidget* w = layout2Widget(buttons);
|
||||
w->setFixedHeight(200);
|
||||
main_layout->addWidget(w);
|
||||
|
@ -167,8 +167,10 @@ OnboardingWindow::OnboardingWindow(QWidget *parent) : QStackedWidget(parent) {
|
|||
}
|
||||
|
||||
void OnboardingWindow::scrollPositionChanged(QPointF position){
|
||||
#ifndef QCOM
|
||||
if (position.y() > view->page()->contentsSize().height() - 1000){
|
||||
accept_btn->setEnabled(true);
|
||||
accept_btn->setText("Accept");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -6,7 +6,12 @@
|
|||
#include <QMouseEvent>
|
||||
#include <QPointF>
|
||||
#include <QPushButton>
|
||||
|
||||
#ifndef QCOM
|
||||
#include <QtWebEngine>
|
||||
#include <QWebEngineView>
|
||||
#include <QWebEngineSettings>
|
||||
#endif
|
||||
|
||||
|
||||
class TrainingGuide : public QFrame {
|
||||
|
@ -21,7 +26,7 @@ protected:
|
|||
private:
|
||||
int currentIndex = 0;
|
||||
QStackedLayout* slayout;
|
||||
//Vector of bounding boxes for the next step. (minx, maxx, miny, maxy)
|
||||
// Vector of bounding boxes for the a given training guide step. (minx, maxx, miny, maxy)
|
||||
QVector<QVector<int>> boundingBox {{250, 930, 750, 900}, {280, 1280, 650, 950}, {330, 1130, 590, 900}, {910, 1580, 500, 1000}, {1180, 1300, 630, 720}, {290, 1050, 590, 960},
|
||||
{1090, 1240, 550, 660}, {1050, 1580, 250, 900}, {320, 1130, 670, 1020}, {1010, 1580, 410, 750}, {1040, 1500, 230, 1030}, {300, 1190, 590, 920}, {1050, 1310, 170, 870}, {950, 1530, 460, 770}, {190, 970, 750, 970}};
|
||||
|
||||
|
@ -40,9 +45,12 @@ private:
|
|||
std::string current_training_version;
|
||||
QWidget * terms_screen();
|
||||
QWidget * training_screen();
|
||||
QWebEngineView* view;
|
||||
QPushButton* accept_btn;
|
||||
|
||||
#ifndef QCOM
|
||||
QWebEngineView* view;
|
||||
#endif
|
||||
|
||||
signals:
|
||||
void onboardingDone();
|
||||
|
||||
|
|
|
@ -10,7 +10,10 @@
|
|||
#include <QLabel>
|
||||
#include <QPixmap>
|
||||
|
||||
#ifndef QCOM
|
||||
#include "networking.hpp"
|
||||
#endif
|
||||
|
||||
#include "settings.hpp"
|
||||
#include "widgets/toggle.hpp"
|
||||
#include "widgets/offroad_alerts.hpp"
|
||||
|
@ -224,7 +227,11 @@ QWidget * developer_panel() {
|
|||
}
|
||||
|
||||
QWidget * network_panel(QWidget * parent) {
|
||||
#ifdef QCOM
|
||||
QWidget *w = new QWidget;
|
||||
#else
|
||||
Networking *w = new Networking(parent);
|
||||
#endif
|
||||
return w;
|
||||
}
|
||||
|
||||
|
|
|
@ -7,8 +7,6 @@
|
|||
#include <QButtonGroup>
|
||||
#include <QStackedLayout>
|
||||
|
||||
#include "networking.hpp"
|
||||
|
||||
// *** settings widgets ***
|
||||
|
||||
class ParamsToggle : public QFrame {
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
#include <string>
|
||||
|
||||
#include <QWidget>
|
||||
#include <QFontDatabase>
|
||||
#include <QApplication>
|
||||
|
||||
#ifdef QCOM2
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
#include "sidebar.hpp"
|
||||
|
||||
static void draw_background(UIState *s) {
|
||||
#ifdef QCOM
|
||||
#ifndef QT_GUI_LIB
|
||||
const NVGcolor color = COLOR_BLACK_ALPHA(85);
|
||||
#else
|
||||
const NVGcolor color = nvgRGBA(0x39, 0x39, 0x39, 0xff);
|
||||
|
|
|
@ -1,4 +1,11 @@
|
|||
#!/bin/sh
|
||||
export LD_LIBRARY_PATH="/system/lib64:$LD_LIBRARY_PATH"
|
||||
exec ./_ui
|
||||
|
||||
export LD_LIBRARY_PATH="/system/lib64:$LD_LIBRARY_PATH"
|
||||
|
||||
if [ -f /EON ]; then
|
||||
export QT_QPA_EGLFS_HIDECURSOR=1
|
||||
export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=/dev/input/event1:rotate=270
|
||||
export QT_QPA_FONTDIR=../assets/fonts
|
||||
fi
|
||||
|
||||
exec ./_ui
|
||||
|
|
|
@ -74,7 +74,7 @@ typedef enum UIStatus {
|
|||
} UIStatus;
|
||||
|
||||
static std::map<UIStatus, NVGcolor> bg_colors = {
|
||||
#ifdef QCOM
|
||||
#ifndef QT_GUI_LIB
|
||||
{STATUS_OFFROAD, nvgRGBA(0x07, 0x23, 0x39, 0xf1)},
|
||||
#else
|
||||
{STATUS_OFFROAD, nvgRGBA(0x0, 0x0, 0x0, 0xff)},
|
||||
|
|
Loading…
Reference in New Issue