
Maintain openpilot lateral control when the brake or gas pedals are used. Deactivation occurs only through the 'Cruise Control' button. Lots of credit goes to "pfeiferj"! Couldn't of done it without him! https: //github.com/pfeiferj/openpilot Co-Authored-By: Jacob Pfeifer <jacob@pfeifer.dev>
184 lines
4.2 KiB
C++
184 lines
4.2 KiB
C++
#pragma once
|
|
|
|
#include <memory>
|
|
|
|
#include <QPushButton>
|
|
#include <QStackedLayout>
|
|
#include <QWidget>
|
|
|
|
#include "common/util.h"
|
|
#include "selfdrive/ui/ui.h"
|
|
#include "selfdrive/ui/qt/widgets/cameraview.h"
|
|
|
|
|
|
const int btn_size = 192;
|
|
const int img_size = (btn_size / 4) * 3;
|
|
|
|
|
|
// ***** onroad widgets *****
|
|
class OnroadAlerts : public QWidget {
|
|
Q_OBJECT
|
|
|
|
public:
|
|
OnroadAlerts(QWidget *parent = 0) : QWidget(parent), scene(uiState()->scene) {}
|
|
void updateAlert(const Alert &a);
|
|
|
|
protected:
|
|
void paintEvent(QPaintEvent*) override;
|
|
|
|
private:
|
|
QColor bg;
|
|
Alert alert = {};
|
|
|
|
// FrogPilot variables
|
|
UIScene &scene;
|
|
};
|
|
|
|
class ExperimentalButton : public QPushButton {
|
|
Q_OBJECT
|
|
|
|
public:
|
|
explicit ExperimentalButton(QWidget *parent = 0);
|
|
void updateState(const UIState &s);
|
|
|
|
private:
|
|
void paintEvent(QPaintEvent *event) override;
|
|
void changeMode();
|
|
|
|
Params params;
|
|
QPixmap engage_img;
|
|
QPixmap experimental_img;
|
|
bool experimental_mode;
|
|
bool engageable;
|
|
|
|
// FrogPilot variables
|
|
Params paramsMemory{"/dev/shm/params"};
|
|
UIScene &scene;
|
|
};
|
|
|
|
|
|
class MapSettingsButton : public QPushButton {
|
|
Q_OBJECT
|
|
|
|
public:
|
|
explicit MapSettingsButton(QWidget *parent = 0);
|
|
|
|
private:
|
|
void paintEvent(QPaintEvent *event) override;
|
|
|
|
QPixmap settings_img;
|
|
};
|
|
|
|
// container window for the NVG UI
|
|
class AnnotatedCameraWidget : public CameraWidget {
|
|
Q_OBJECT
|
|
|
|
public:
|
|
explicit AnnotatedCameraWidget(VisionStreamType type, QWidget* parent = 0);
|
|
void updateState(const UIState &s);
|
|
|
|
MapSettingsButton *map_settings_btn;
|
|
MapSettingsButton *map_settings_btn_bottom;
|
|
|
|
private:
|
|
void drawText(QPainter &p, int x, int y, const QString &text, int alpha = 255);
|
|
|
|
QVBoxLayout *main_layout;
|
|
ExperimentalButton *experimental_btn;
|
|
QPixmap dm_img;
|
|
float speed;
|
|
QString speedUnit;
|
|
float setSpeed;
|
|
float speedLimit;
|
|
bool is_cruise_set = false;
|
|
bool is_metric = false;
|
|
bool dmActive = false;
|
|
bool hideBottomIcons = false;
|
|
bool rightHandDM = false;
|
|
float dm_fade_state = 1.0;
|
|
bool has_us_speed_limit = false;
|
|
bool has_eu_speed_limit = false;
|
|
bool v_ego_cluster_seen = false;
|
|
int status = STATUS_DISENGAGED;
|
|
std::unique_ptr<PubMaster> pm;
|
|
|
|
int skip_frame_count = 0;
|
|
bool wide_cam_requested = false;
|
|
|
|
// FrogPilot widgets
|
|
void initializeFrogPilotWidgets();
|
|
void paintFrogPilotWidgets(QPainter &p);
|
|
void updateFrogPilotWidgets();
|
|
|
|
void drawStatusBar(QPainter &p);
|
|
|
|
// FrogPilot variables
|
|
Params paramsMemory{"/dev/shm/params"};
|
|
UIScene &scene;
|
|
|
|
QHBoxLayout *bottom_layout;
|
|
|
|
bool alwaysOnLateralActive;
|
|
bool experimentalMode;
|
|
bool mapOpen;
|
|
bool showAlwaysOnLateralStatusBar;
|
|
|
|
float accelerationConversion;
|
|
float distanceConversion;
|
|
float speedConversion;
|
|
|
|
int alertSize;
|
|
|
|
QString accelerationUnit;
|
|
QString leadDistanceUnit;
|
|
QString leadSpeedUnit;
|
|
|
|
protected:
|
|
void paintGL() override;
|
|
void initializeGL() override;
|
|
void showEvent(QShowEvent *event) override;
|
|
void updateFrameMat() override;
|
|
void drawLaneLines(QPainter &painter, const UIState *s);
|
|
void drawLead(QPainter &painter, const cereal::RadarState::LeadData::Reader &lead_data, const QPointF &vd);
|
|
void drawHud(QPainter &p);
|
|
void drawDriverState(QPainter &painter, const UIState *s);
|
|
inline QColor redColor(int alpha = 255) { return QColor(201, 34, 49, alpha); }
|
|
inline QColor whiteColor(int alpha = 255) { return QColor(255, 255, 255, alpha); }
|
|
inline QColor blackColor(int alpha = 255) { return QColor(0, 0, 0, alpha); }
|
|
|
|
double prev_draw_t = 0;
|
|
FirstOrderFilter fps_filter;
|
|
};
|
|
|
|
// container for all onroad widgets
|
|
class OnroadWindow : public QWidget {
|
|
Q_OBJECT
|
|
|
|
public:
|
|
OnroadWindow(QWidget* parent = 0);
|
|
bool isMapVisible() const { return map && map->isVisible(); }
|
|
void showMapPanel(bool show) { if (map) map->setVisible(show); }
|
|
|
|
signals:
|
|
void mapPanelRequested();
|
|
|
|
private:
|
|
void paintEvent(QPaintEvent *event);
|
|
void mousePressEvent(QMouseEvent* e) override;
|
|
OnroadAlerts *alerts;
|
|
AnnotatedCameraWidget *nvg;
|
|
QColor bg = bg_colors[STATUS_DISENGAGED];
|
|
QWidget *map = nullptr;
|
|
QHBoxLayout* split;
|
|
|
|
// FrogPilot variables
|
|
UIScene &scene;
|
|
Params params;
|
|
Params paramsMemory{"/dev/shm/params"};
|
|
|
|
private slots:
|
|
void offroadTransition(bool offroad);
|
|
void primeChanged(bool prime);
|
|
void updateState(const UIState &s);
|
|
};
|