Qt on NEOS (#20153)

* qt on neos

* cleanup

* check arch

* fix pc

* fix mac

* base libs

Co-authored-by: Comma Device <device@comma.ai>
albatross
Adeeb Shihadeh 2021-02-25 01:03:37 -08:00 committed by GitHub
parent 90ba43676a
commit 1c369a9009
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 70 additions and 34 deletions

View File

@ -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 = [

View File

@ -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()

View File

@ -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:

View File

@ -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
}

View File

@ -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();

View File

@ -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;
}

View File

@ -7,8 +7,6 @@
#include <QButtonGroup>
#include <QStackedLayout>
#include "networking.hpp"
// *** settings widgets ***
class ParamsToggle : public QFrame {

View File

@ -1,7 +1,6 @@
#include <string>
#include <QWidget>
#include <QFontDatabase>
#include <QApplication>
#ifdef QCOM2

View File

@ -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);

View File

@ -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

View File

@ -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)},