diff --git a/selfdrive/ui/qt/onroad.cc b/selfdrive/ui/qt/onroad.cc index 33ca352b40..37d35df0c0 100644 --- a/selfdrive/ui/qt/onroad.cc +++ b/selfdrive/ui/qt/onroad.cc @@ -865,8 +865,11 @@ void AnnotatedCameraWidget::drawHud(QPainter &p) { const QRect sign_rect = set_speed_rect.adjusted(sign_margin, default_size.height(), -sign_margin, -sign_margin); uiState()->scene.sl_sign_rect = sign_rect; + + speedLimitWarning(p, sign_rect, sign_margin); + // US/Canada (MUTCD style) sign - if ((mapSourcedSpeedLimit && !is_metric && !isNavSpeedLimit) || has_us_speed_limit) { + if (((mapSourcedSpeedLimit && !is_metric && !isNavSpeedLimit) || has_us_speed_limit) && slcShowSign) { p.setPen(Qt::NoPen); p.setBrush(whiteColor()); p.drawRoundedRect(sign_rect, 24, 24); @@ -888,7 +891,7 @@ void AnnotatedCameraWidget::drawHud(QPainter &p) { } // EU (Vienna style) sign - if ((mapSourcedSpeedLimit && is_metric && !isNavSpeedLimit) || has_eu_speed_limit) { + if (((mapSourcedSpeedLimit && is_metric && !isNavSpeedLimit) || has_eu_speed_limit) && slcShowSign) { p.setPen(Qt::NoPen); p.setBrush(whiteColor()); p.drawEllipse(sign_rect); @@ -1570,6 +1573,14 @@ int AnnotatedCameraWidget::blinkerPulse(int frame) { return blinker_state; } +void AnnotatedCameraWidget::speedLimitSignPulse(int frame) { + if (frame % UI_FREQ < (UI_FREQ / 2.5)) { + slcShowSign = false; + } else { + slcShowSign = true; + } +} + void AnnotatedCameraWidget::drawFeatureStatusText(QPainter &p, int x, int y) { const FeatureStatusText feature_text; const FeatureStatusColor feature_color; @@ -1641,6 +1652,17 @@ void AnnotatedCameraWidget::drawFeatureStatusText(QPainter &p, int x, int y) { } } +void AnnotatedCameraWidget::speedLimitWarning(QPainter &p, QRect sign_rect, const int sign_margin) { + // current speed over speed limit + if (overSpeedLimit) { + speed_limit_frame++; + speedLimitSignPulse(speed_limit_frame); + } else { + speed_limit_frame = 0; + slcShowSign = true; + } +} + void AnnotatedCameraWidget::initializeGL() { CameraWidget::initializeGL(); diff --git a/selfdrive/ui/qt/onroad.h b/selfdrive/ui/qt/onroad.h index da5952cd9e..3990a1e3d9 100644 --- a/selfdrive/ui/qt/onroad.h +++ b/selfdrive/ui/qt/onroad.h @@ -124,6 +124,8 @@ private: void updateButtonsLayout(); void drawFeatureStatusText(QPainter &p, int x, int y); + void speedLimitSignPulse(int frame); + void speedLimitWarning(QPainter &p, QRect sign_rect, const int sign_margin); void mousePressEvent(QMouseEvent* e) override; Params params; @@ -233,6 +235,9 @@ private: int dynamicLaneProfile; QString mpcMode; + int speed_limit_frame; + bool slcShowSign = true; + protected: void paintGL() override; void initializeGL() override;