cabana: replace deprecated Qt and OpenSSL functions (#36605)

replace deprecated functions
pull/36552/merge
Dean Lee 3 days ago committed by GitHub
parent d4185a5d57
commit 8fceb9d957
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 1
      tools/cabana/SConscript
  2. 8
      tools/cabana/chart/chart.cc
  3. 12
      tools/cabana/signalview.cc
  4. 39
      tools/cabana/utils/api.cc
  5. 2
      tools/cabana/videowidget.cc

@ -50,7 +50,6 @@ qt_flags = [
"-DQT_MESSAGELOGCONTEXT", "-DQT_MESSAGELOGCONTEXT",
] ]
qt_env['CXXFLAGS'] += qt_flags qt_env['CXXFLAGS'] += qt_flags
qt_env['CXXFLAGS'] += ["-Wno-deprecated-declarations"]
qt_env['LIBPATH'] += ['#selfdrive/ui', ] qt_env['LIBPATH'] += ['#selfdrive/ui', ]
qt_env['LIBS'] = qt_libs qt_env['LIBS'] = qt_libs

@ -324,7 +324,8 @@ void ChartView::updateSeries(const cabana::Signal *sig, const MessageEventsMap *
if (!can->liveStreaming()) { if (!can->liveStreaming()) {
s.segment_tree.build(s.vals); s.segment_tree.build(s.vals);
} }
s.series->replace(QVector<QPointF>::fromStdVector(series_type == SeriesType::StepLine ? s.step_vals : s.vals)); const auto &points = series_type == SeriesType::StepLine ? s.step_vals : s.vals;
s.series->replace(QVector<QPointF>(points.cbegin(), points.cend()));
} }
} }
updateAxisY(); updateAxisY();
@ -382,7 +383,7 @@ void ChartView::updateAxisY() {
QFontMetrics fm(axis_y->labelsFont()); QFontMetrics fm(axis_y->labelsFont());
for (int i = 0; i < tick_count; i++) { for (int i = 0; i < tick_count; i++) {
qreal value = min_y + (i * (max_y - min_y) / (tick_count - 1)); qreal value = min_y + (i * (max_y - min_y) / (tick_count - 1));
max_label_width = std::max(max_label_width, fm.width(QString::number(value, 'f', n))); max_label_width = std::max(max_label_width, fm.horizontalAdvance(QString::number(value, 'f', n)));
} }
int title_spacing = unit.isEmpty() ? 0 : QFontMetrics(axis_y->titleFont()).size(Qt::TextSingleLine, unit).height(); int title_spacing = unit.isEmpty() ? 0 : QFontMetrics(axis_y->titleFont()).size(Qt::TextSingleLine, unit).height();
@ -838,7 +839,8 @@ void ChartView::setSeriesType(SeriesType type) {
} }
for (auto &s : sigs) { for (auto &s : sigs) {
s.series = createSeries(series_type, s.sig->color); s.series = createSeries(series_type, s.sig->color);
s.series->replace(QVector<QPointF>::fromStdVector(series_type == SeriesType::StepLine ? s.step_vals : s.vals)); const auto &points = series_type == SeriesType::StepLine ? s.step_vals : s.vals;
s.series->replace(QVector<QPointF>(points.cbegin(), points.cend()));
} }
updateSeriesPoints(); updateSeriesPoints();
updateTitle(); updateTitle();

@ -265,7 +265,7 @@ QSize SignalItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QMo
text += item->sig->type == cabana::Signal::Type::Multiplexor ? QString(" M ") : QString(" m%1 ").arg(item->sig->multiplex_value); text += item->sig->type == cabana::Signal::Type::Multiplexor ? QString(" M ") : QString(" m%1 ").arg(item->sig->multiplex_value);
spacing += (option.widget->style()->pixelMetric(QStyle::PM_FocusFrameHMargin) + 1) * 2; spacing += (option.widget->style()->pixelMetric(QStyle::PM_FocusFrameHMargin) + 1) * 2;
} }
width = std::min<int>(option.widget->size().width() / 3.0, option.fontMetrics.width(text) + spacing); width = std::min<int>(option.widget->size().width() / 3.0, option.fontMetrics.horizontalAdvance(text) + spacing);
} }
return {width, option.fontMetrics.height() + option.widget->style()->pixelMetric(QStyle::PM_FocusFrameVMargin) * 2}; return {width, option.fontMetrics.height() + option.widget->style()->pixelMetric(QStyle::PM_FocusFrameVMargin) * 2};
} }
@ -308,7 +308,7 @@ void SignalItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &op
// multiplexer indicator // multiplexer indicator
if (item->sig->type != cabana::Signal::Type::Normal) { if (item->sig->type != cabana::Signal::Type::Normal) {
QString indicator = item->sig->type == cabana::Signal::Type::Multiplexor ? QString(" M ") : QString(" m%1 ").arg(item->sig->multiplex_value); QString indicator = item->sig->type == cabana::Signal::Type::Multiplexor ? QString(" M ") : QString(" m%1 ").arg(item->sig->multiplex_value);
QRect indicator_rect{rect.x(), rect.y(), option.fontMetrics.width(indicator), rect.height()}; QRect indicator_rect{rect.x(), rect.y(), option.fontMetrics.horizontalAdvance(indicator), rect.height()};
painter->setBrush(Qt::gray); painter->setBrush(Qt::gray);
painter->setPen(Qt::NoPen); painter->setPen(Qt::NoPen);
painter->drawRoundedRect(indicator_rect, 3, 3); painter->drawRoundedRect(indicator_rect, 3, 3);
@ -342,13 +342,13 @@ void SignalItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &op
painter->drawText(rect, Qt::AlignLeft | Qt::AlignTop, max); painter->drawText(rect, Qt::AlignLeft | Qt::AlignTop, max);
painter->drawText(rect, Qt::AlignLeft | Qt::AlignBottom, min); painter->drawText(rect, Qt::AlignLeft | Qt::AlignBottom, min);
QFontMetrics fm(minmax_font); QFontMetrics fm(minmax_font);
value_adjust = std::max(fm.width(min), fm.width(max)) + 5; value_adjust = std::max(fm.horizontalAdvance(min), fm.horizontalAdvance(max)) + 5;
} else if (!item->sparkline.isEmpty() && item->sig->type == cabana::Signal::Type::Multiplexed) { } else if (!item->sparkline.isEmpty() && item->sig->type == cabana::Signal::Type::Multiplexed) {
// display freq of multiplexed signal // display freq of multiplexed signal
painter->setFont(label_font); painter->setFont(label_font);
QString freq = QString("%1 hz").arg(item->sparkline.freq(), 0, 'g', 2); QString freq = QString("%1 hz").arg(item->sparkline.freq(), 0, 'g', 2);
painter->drawText(rect.adjusted(5, 0, 0, 0), Qt::AlignLeft | Qt::AlignVCenter, freq); painter->drawText(rect.adjusted(5, 0, 0, 0), Qt::AlignLeft | Qt::AlignVCenter, freq);
value_adjust = QFontMetrics(label_font).width(freq) + 10; value_adjust = QFontMetrics(label_font).horizontalAdvance(freq) + 10;
} }
// signal value // signal value
painter->setFont(option.font); painter->setFont(option.font);
@ -622,13 +622,13 @@ void SignalView::updateState(const std::set<MessageId> *msgs) {
double value = 0; double value = 0;
if (item->sig->getValue(last_msg.dat.data(), last_msg.dat.size(), &value)) { if (item->sig->getValue(last_msg.dat.data(), last_msg.dat.size(), &value)) {
item->sig_val = item->sig->formatValue(value); item->sig_val = item->sig->formatValue(value);
max_value_width = std::max(max_value_width, fontMetrics().width(item->sig_val)); max_value_width = std::max(max_value_width, fontMetrics().horizontalAdvance(item->sig_val));
} }
} }
auto [first_visible, last_visible] = visibleSignalRange(); auto [first_visible, last_visible] = visibleSignalRange();
if (first_visible.isValid() && last_visible.isValid()) { if (first_visible.isValid() && last_visible.isValid()) {
const static int min_max_width = QFontMetrics(delegate->minmax_font).width("-000.00") + 5; const static int min_max_width = QFontMetrics(delegate->minmax_font).horizontalAdvance("-000.00") + 5;
int available_width = value_column_width - delegate->button_size.width(); int available_width = value_column_width - delegate->button_size.width();
int value_width = std::min<int>(max_value_width + min_max_width, available_width / 2); int value_width = std::min<int>(max_value_width + min_max_width, available_width / 2);
QSize size(available_width - value_width, QSize size(available_width - value_width,

@ -1,7 +1,7 @@
#include "tools/cabana/utils/api.h" #include "tools/cabana/utils/api.h"
#include <openssl/evp.h>
#include <openssl/pem.h> #include <openssl/pem.h>
#include <openssl/rsa.h>
#include <QApplication> #include <QApplication>
#include <QCryptographicHash> #include <QCryptographicHash>
@ -39,29 +39,38 @@ std::optional<QString> getDongleId() {
namespace CommaApi { namespace CommaApi {
RSA *get_rsa_private_key() { EVP_PKEY *get_private_key() {
static std::unique_ptr<RSA, decltype(&RSA_free)> rsa_private(nullptr, RSA_free); static std::unique_ptr<EVP_PKEY, decltype(&EVP_PKEY_free)> pkey(nullptr, EVP_PKEY_free);
if (!rsa_private) { if (!pkey) {
FILE *fp = fopen(Path::rsa_file().c_str(), "rb"); FILE *fp = fopen(Path::rsa_file().c_str(), "rb");
if (!fp) { if (!fp) {
qDebug() << "No RSA private key found, please run manager.py or registration.py"; qDebug() << "No private key found, please run manager.py or registration.py";
return nullptr; return nullptr;
} }
rsa_private.reset(PEM_read_RSAPrivateKey(fp, NULL, NULL, NULL)); pkey.reset(PEM_read_PrivateKey(fp, nullptr, nullptr, nullptr));
fclose(fp); fclose(fp);
} }
return rsa_private.get(); return pkey.get();
} }
QByteArray rsa_sign(const QByteArray &data) { QByteArray rsa_sign(const QByteArray &data) {
RSA *rsa_private = get_rsa_private_key(); EVP_PKEY *pkey = get_private_key();
if (!rsa_private) return {}; if (!pkey) return {};
QByteArray sig(RSA_size(rsa_private), Qt::Uninitialized); EVP_MD_CTX *mdctx = EVP_MD_CTX_new();
unsigned int sig_len; if (!mdctx) return {};
int ret = RSA_sign(NID_sha256, (unsigned char*)data.data(), data.size(), (unsigned char*)sig.data(), &sig_len, rsa_private);
assert(ret == 1); QByteArray sig(EVP_PKEY_size(pkey), Qt::Uninitialized);
assert(sig.size() == sig_len); size_t sig_len = sig.size();
int ret = EVP_DigestSignInit(mdctx, nullptr, EVP_sha256(), nullptr, pkey);
ret &= EVP_DigestSignUpdate(mdctx, data.data(), data.size());
ret &= EVP_DigestSignFinal(mdctx, (unsigned char*)sig.data(), &sig_len);
EVP_MD_CTX_free(mdctx);
if (ret != 1) return {};
sig.resize(sig_len);
return sig; return sig;
} }

@ -134,7 +134,7 @@ void VideoWidget::createSpeedDropdown(QToolBar *toolbar) {
QFont font = speed_btn->font(); QFont font = speed_btn->font();
font.setBold(true); font.setBold(true);
speed_btn->setFont(font); speed_btn->setFont(font);
speed_btn->setMinimumWidth(speed_btn->fontMetrics().width("0.05x ") + style()->pixelMetric(QStyle::PM_MenuButtonIndicator)); speed_btn->setMinimumWidth(speed_btn->fontMetrics().horizontalAdvance("0.05x ") + style()->pixelMetric(QStyle::PM_MenuButtonIndicator));
} }
QWidget *VideoWidget::createCameraWidget() { QWidget *VideoWidget::createCameraWidget() {

Loading…
Cancel
Save