From 99ee2a9459e100ca0a1cecdf210fe499d5d75f89 Mon Sep 17 00:00:00 2001 From: grekiki Date: Fri, 11 Dec 2020 00:29:31 +0100 Subject: [PATCH] WiFI UI show IP (#2735) WiFi widget now shows the IP of currently connected network. old-commit-hash: c16c8f3c2c0c9cd982dd96c769f760185b837da8 --- selfdrive/ui/qt/offroad/wifi.cc | 9 ++++-- selfdrive/ui/qt/offroad/wifi.hpp | 3 +- selfdrive/ui/qt/offroad/wifiManager.cc | 40 +++++++++++++++++++++---- selfdrive/ui/qt/offroad/wifiManager.hpp | 2 ++ 4 files changed, 44 insertions(+), 10 deletions(-) diff --git a/selfdrive/ui/qt/offroad/wifi.cc b/selfdrive/ui/qt/offroad/wifi.cc index 225f3fd475..ae641f5091 100644 --- a/selfdrive/ui/qt/offroad/wifi.cc +++ b/selfdrive/ui/qt/offroad/wifi.cc @@ -43,8 +43,12 @@ WifiUI::WifiUI(QWidget *parent, int page_length) : QWidget(parent), networks_per wifi_widget = new QWidget; QVBoxLayout* networkLayout = new QVBoxLayout; QHBoxLayout *tethering_field = new QHBoxLayout; - tethering_field->addWidget(new QLabel("Enable Tethering")); + tethering_field->addSpacing(50); + ipv4 = new QLabel(""); + tethering_field->addWidget(ipv4); + tethering_field->addWidget(new QLabel("Enable Tethering")); + Toggle* toggle_switch = new Toggle(this); toggle_switch->setFixedSize(150, 100); tethering_field->addWidget(toggle_switch); @@ -58,7 +62,6 @@ WifiUI::WifiUI(QWidget *parent, int page_length) : QWidget(parent), networks_per tetheringWidget->setFixedHeight(150); networkLayout->addWidget(tetheringWidget); - vlayout = new QVBoxLayout; wifi_widget->setLayout(vlayout); networkLayout->addWidget(wifi_widget); @@ -99,7 +102,7 @@ void WifiUI::refresh() { wifi->request_scan(); wifi->refreshNetworks(); - + ipv4->setText(wifi->ipv4_address); clearLayout(vlayout); connectButtons = new QButtonGroup(this); diff --git a/selfdrive/ui/qt/offroad/wifi.hpp b/selfdrive/ui/qt/offroad/wifi.hpp index c007305461..bad8d9356c 100644 --- a/selfdrive/ui/qt/offroad/wifi.hpp +++ b/selfdrive/ui/qt/offroad/wifi.hpp @@ -18,7 +18,7 @@ public: explicit WifiUI(QWidget *parent = 0, int page_length = 5); private: - WifiManager* wifi = nullptr; + WifiManager *wifi = nullptr; const int networks_per_page; QStackedWidget *swidget; @@ -31,6 +31,7 @@ private: QString text; QButtonGroup *connectButtons; bool tetheringEnabled; + QLabel *ipv4; void connectToNetwork(Network n); QString getStringFromUser(); diff --git a/selfdrive/ui/qt/offroad/wifiManager.cc b/selfdrive/ui/qt/offroad/wifiManager.cc index b841ad2032..ff8977c9a7 100644 --- a/selfdrive/ui/qt/offroad/wifiManager.cc +++ b/selfdrive/ui/qt/offroad/wifiManager.cc @@ -32,6 +32,7 @@ QString device_iface = "org.freedesktop.NetworkManager.Device"; QString wireless_device_iface = "org.freedesktop.NetworkManager.Device.Wireless"; QString ap_iface = "org.freedesktop.NetworkManager.AccessPoint"; QString connection_iface = "org.freedesktop.NetworkManager.Connection.Active"; +QString ipv4config_iface = "org.freedesktop.NetworkManager.IP4Config"; QString nm_service = "org.freedesktop.NetworkManager"; @@ -87,7 +88,7 @@ void WifiManager::refreshNetworks() { bus = QDBusConnection::systemBus(); seen_networks.clear(); seen_ssids.clear(); - + ipv4_address = get_ipv4_address(); for (Network &network : get_networks()) { if (seen_ssids.count(network.ssid)) { continue; @@ -97,6 +98,32 @@ void WifiManager::refreshNetworks() { } } +QString WifiManager::get_ipv4_address(){ + if (raw_adapter_state != state_connected){ + return ""; + } + QVector conns = get_active_connections(); + for (auto p : conns){ + QString active_connection = p.path(); + QDBusInterface nm(nm_service, active_connection, props_iface, bus); + QDBusObjectPath pth = get_response(nm.call("Get", connection_iface, "Ip4Config")); + QString ip4config = pth.path(); + + QDBusInterface nm2(nm_service, ip4config, props_iface, bus); + const QDBusArgument &arr = get_response(nm2.call("Get", ipv4config_iface, "AddressData")); + QMap pth2; + arr.beginArray(); + while (!arr.atEnd()){ + arr >> pth2; + QString ipv4 = pth2.value("address").value(); + arr.endArray(); + return ipv4; + } + arr.endArray(); + } + return ""; +} + QList WifiManager::get_networks() { QList r; QDBusInterface nm(nm_service, adapter, wireless_device_iface, bus); @@ -207,7 +234,7 @@ void WifiManager::deactivate_connections(QString ssid) { QVector WifiManager::get_active_connections() { QDBusInterface nm(nm_service, nm_path, props_iface, bus); QDBusMessage response = nm.call("Get", nm_iface, "ActiveConnections"); - QDBusArgument arr = get_response(response); + const QDBusArgument &arr = get_response(response); QVector conns; QDBusObjectPath path; @@ -216,6 +243,7 @@ QVector WifiManager::get_active_connections() { arr >> path; conns.push_back(path); } + arr.endArray(); return conns; } @@ -346,10 +374,10 @@ void WifiManager::enableTethering() { connection["802-11-wireless-security"]["psk"] = "swagswagcomma"; connection["ipv4"]["method"] = "shared"; - QMap adress1; - adress1["address"] = "192.168.43.1"; - adress1["prefix"] = 24u; - connection["ipv4"]["address-data"] = QVariant::fromValue(IpConfig() << adress1); + QMap address; + address["address"] = "192.168.43.1"; + address["prefix"] = 24u; + connection["ipv4"]["address-data"] = QVariant::fromValue(IpConfig() << address); connection["ipv4"]["gateway"] = "192.168.43.1"; connection["ipv6"]["method"] = "ignore"; diff --git a/selfdrive/ui/qt/offroad/wifiManager.hpp b/selfdrive/ui/qt/offroad/wifiManager.hpp index 9beab2ac1e..13eb90f3fb 100644 --- a/selfdrive/ui/qt/offroad/wifiManager.hpp +++ b/selfdrive/ui/qt/offroad/wifiManager.hpp @@ -32,6 +32,7 @@ public: void request_scan(); QVector seen_networks; + QString ipv4_address; void refreshNetworks(); void connect(Network ssid); @@ -52,6 +53,7 @@ private: QString tethering_ssid; QString get_adapter(); + QString get_ipv4_address(); QList get_networks(); void connect(QByteArray ssid, QString username, QString password, SecurityType security_type); QString get_active_ap();