From 31bf68c622b38844a50c59ba1224e2dda13a8c0c Mon Sep 17 00:00:00 2001 From: Dean Lee Date: Tue, 14 Dec 2021 19:14:51 +0800 Subject: [PATCH] C2: display ip address in network panel (#23215) * display ipv4 address * refactor to class * only display ip address old-commit-hash: 084ef394891360d05b272f502029f9e7e23886db --- selfdrive/ui/qt/offroad/settings.cc | 38 +++++++++++++++++++++++------ selfdrive/ui/qt/offroad/settings.h | 11 +++++++++ 2 files changed, 42 insertions(+), 7 deletions(-) diff --git a/selfdrive/ui/qt/offroad/settings.cc b/selfdrive/ui/qt/offroad/settings.cc index c01da2140c..b91b507e9f 100644 --- a/selfdrive/ui/qt/offroad/settings.cc +++ b/selfdrive/ui/qt/offroad/settings.cc @@ -286,15 +286,14 @@ void SoftwarePanel::updateLabels() { osVersionLbl->setText(QString::fromStdString(Hardware::get_os_version()).trimmed()); } -QWidget * network_panel(QWidget * parent) { -#ifdef QCOM - QWidget *w = new QWidget(parent); - QVBoxLayout *layout = new QVBoxLayout(w); +C2NetworkPanel::C2NetworkPanel(QWidget *parent) : QWidget(parent) { + QVBoxLayout *layout = new QVBoxLayout(this); layout->setContentsMargins(50, 0, 50, 0); ListWidget *list = new ListWidget(); list->setSpacing(30); // wifi + tethering buttons +#ifdef QCOM auto wifiBtn = new ButtonControl("Wi-Fi Settings", "OPEN"); QObject::connect(wifiBtn, &ButtonControl::clicked, [=]() { HardwareEon::launch_wifi(); }); list->addItem(wifiBtn); @@ -302,17 +301,42 @@ QWidget * network_panel(QWidget * parent) { auto tetheringBtn = new ButtonControl("Tethering Settings", "OPEN"); QObject::connect(tetheringBtn, &ButtonControl::clicked, [=]() { HardwareEon::launch_tethering(); }); list->addItem(tetheringBtn); +#endif + ipaddress = new LabelControl("IP Address", ""); + list->addItem(ipaddress); // SSH key management list->addItem(new SshToggle()); list->addItem(new SshControl()); - layout->addWidget(list); layout->addStretch(1); +} + +void C2NetworkPanel::showEvent(QShowEvent *event) { + ipaddress->setText(getIPAddress()); +} + +QString C2NetworkPanel::getIPAddress() { + std::string result = util::check_output("ifconfig wlan0"); + if (result.empty()) return ""; + + const std::string inetaddrr = "inet addr:"; + std::string::size_type begin = result.find(inetaddrr); + if (begin == std::string::npos) return ""; + + begin += inetaddrr.length(); + std::string::size_type end = result.find(' ', begin); + if (end == std::string::npos) return ""; + + return result.substr(begin, end - begin).c_str(); +} + +QWidget *network_panel(QWidget *parent) { +#ifdef QCOM + return new C2NetworkPanel(parent); #else - Networking *w = new Networking(parent); + return new Networking(parent); #endif - return w; } void SettingsWindow::showEvent(QShowEvent *event) { diff --git a/selfdrive/ui/qt/offroad/settings.h b/selfdrive/ui/qt/offroad/settings.h index 7fc5a8581f..f69c080ee7 100644 --- a/selfdrive/ui/qt/offroad/settings.h +++ b/selfdrive/ui/qt/offroad/settings.h @@ -77,3 +77,14 @@ private: Params params; QFileSystemWatcher *fs_watch; }; + +class C2NetworkPanel: public QWidget { + Q_OBJECT +public: + explicit C2NetworkPanel(QWidget* parent = nullptr); + +private: + void showEvent(QShowEvent *event) override; + QString getIPAddress(); + LabelControl *ipaddress; +};