
Enable the ability to activate 'Traffic Mode' by holding down the 'distance' button for 2.5 seconds. When 'Traffic Mode' is active the onroad UI will turn red and openpilot will drive catered towards stop and go traffic.
219 lines
4.9 KiB
C++
219 lines
4.9 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 DistanceButton : public QPushButton {
|
|
public:
|
|
explicit DistanceButton(QWidget *parent = nullptr);
|
|
|
|
void buttonPressed();
|
|
void buttonReleased();
|
|
void updateState();
|
|
|
|
protected:
|
|
void paintEvent(QPaintEvent *event) override;
|
|
|
|
private:
|
|
Params paramsMemory{"/dev/shm/params"};
|
|
|
|
UIScene &scene;
|
|
|
|
bool trafficModeActive;
|
|
|
|
int personality;
|
|
|
|
QElapsedTimer transitionTimer;
|
|
|
|
QVector<std::pair<QPixmap, QString>> profile_data;
|
|
QVector<std::pair<QPixmap, QString>> profile_data_kaofui;
|
|
};
|
|
|
|
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;
|
|
|
|
DistanceButton *distance_btn;
|
|
|
|
QHBoxLayout *bottom_layout;
|
|
|
|
bool alwaysOnLateralActive;
|
|
bool experimentalMode;
|
|
bool mapOpen;
|
|
bool onroadDistanceButton;
|
|
bool showAlwaysOnLateralStatusBar;
|
|
bool showConditionalExperimentalStatusBar;
|
|
bool trafficModeActive;
|
|
|
|
float accelerationConversion;
|
|
float distanceConversion;
|
|
float speedConversion;
|
|
|
|
int alertSize;
|
|
int conditionalStatus;
|
|
|
|
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"};
|
|
|
|
QPoint timeoutPoint = QPoint(420, 69);
|
|
QTimer clickTimer;
|
|
|
|
private slots:
|
|
void offroadTransition(bool offroad);
|
|
void primeChanged(bool prime);
|
|
void updateState(const UIState &s);
|
|
};
|