diff --git a/selfdrive/ui/qt/network/networking.cc b/selfdrive/ui/qt/network/networking.cc index 46fb6b7892..be1194f161 100644 --- a/selfdrive/ui/qt/network/networking.cc +++ b/selfdrive/ui/qt/network/networking.cc @@ -176,7 +176,7 @@ AdvancedNetworking::AdvancedNetworking(QWidget* parent, WifiManager* wifi): QWid // Metered toggle const bool metered = params.getBool("GsmMetered"); - cellularMeteredToggle = new ToggleControl(tr("Cellular Metered"), tr("Prevent large data uploads when on a metered connection"), "", metered); + cellularMeteredToggle = new ToggleControl(tr("Cellular Metered"), tr("Prevent large data uploads when on a metered cellular connection"), "", metered); QObject::connect(cellularMeteredToggle, &SshToggle::toggleFlipped, [=](bool state) { params.putBool("GsmMetered", state); wifi->updateGsmSettings(params.getBool("GsmRoaming"), QString::fromStdString(params.get("GsmApn")), state); @@ -207,7 +207,7 @@ AdvancedNetworking::AdvancedNetworking(QWidget* parent, WifiManager* wifi): QWid // Wi-Fi metered toggle std::vector longi_button_texts{tr("Unmetered"), tr("Default"), tr("Metered")}; - wifiMeteredToggle = new ToggleControl(tr("Metered Wi-Fi Network"), tr("Prevent large data uploads when on a metered connection"), "", false); + wifiMeteredToggle = new ToggleControl(tr("Metered Wi-Fi Network"), tr("Prevent large data uploads when on a metered Wi-FI connection"), "", false); wifiMeteredToggle->setEnabled(false); QObject::connect(wifiMeteredToggle, &ToggleControl::toggleFlipped, [=](bool state) { std::cout << "Set Wi-Fi metered to " << state << std::endl; @@ -238,13 +238,11 @@ void AdvancedNetworking::refresh() { ipLabel->setText(wifi->ipv4_address); tetheringToggle->setEnabled(true); - // TODO: which?! -// wifiMeteredToggle->setEnabled(wifi->currentNetworkType() == NetworkType::WIFI); if (wifi->isTetheringEnabled()) { wifiMeteredToggle->setEnabled(false); wifiMeteredToggle->setValue("Unsupported while tethering"); - wifiMeteredToggle->setToggled(false); - } else if (wifi->ipv4_address != "") { // TODO: ~check type~ fix type + wifiMeteredToggle->setToggled(true); + } else if (wifi->ipv4_address != "") { bool metered = wifi->currentNetworkMetered(); wifiMeteredToggle->setEnabled(true); wifiMeteredToggle->setValue(metered ? "Metered" : "Unmetered"); diff --git a/selfdrive/ui/qt/network/networking.h b/selfdrive/ui/qt/network/networking.h index cc63c829fb..a42dfb9c01 100644 --- a/selfdrive/ui/qt/network/networking.h +++ b/selfdrive/ui/qt/network/networking.h @@ -66,7 +66,6 @@ private: ButtonControl* editApnButton; ButtonControl* hiddenNetworkButton; ToggleControl* cellularMeteredToggle; -// ButtonParamControl* wifiMeteredToggle; ToggleControl* wifiMeteredToggle; WifiManager* wifi = nullptr; Params params; diff --git a/selfdrive/ui/qt/network/wifi_manager.cc b/selfdrive/ui/qt/network/wifi_manager.cc index 60dcf93ec6..747bed1f67 100644 --- a/selfdrive/ui/qt/network/wifi_manager.cc +++ b/selfdrive/ui/qt/network/wifi_manager.cc @@ -101,7 +101,6 @@ void WifiManager::refreshNetworks() { void WifiManager::refreshFinished(QDBusPendingCallWatcher *watcher) { ipv4_address = getIp4Address(); - seenNetworks.clear(); const QDBusReply> watcher_reply = *watcher; @@ -355,8 +354,8 @@ void WifiManager::activateModemConnection(const QDBusObjectPath &path) { } // function matches tici/hardware.py +// FIXME: it can mistakenly show CELL when connected to WIFI NetworkType WifiManager::currentNetworkType() { - // TODO: shows type 2 (CELL) while on wifi?! don't use this auto primary_conn = call(NM_DBUS_PATH, NM_DBUS_INTERFACE_PROPERTIES, "Get", NM_DBUS_INTERFACE, "PrimaryConnection"); auto primary_type = call(primary_conn.path(), NM_DBUS_INTERFACE_PROPERTIES, "Get", NM_DBUS_INTERFACE_ACTIVE_CONNECTION, "Type"); @@ -376,10 +375,6 @@ NetworkType WifiManager::currentNetworkType() { } bool WifiManager::currentNetworkMetered() { -// auto primary_conn = call(NM_DBUS_PATH, NM_DBUS_INTERFACE_PROPERTIES, "Get", NM_DBUS_INTERFACE, "PrimaryConnection"); -// auto primary_type = call(primary_conn.path(), NM_DBUS_INTERFACE_PROPERTIES, "Get", NM_DBUS_INTERFACE_ACTIVE_CONNECTION, "Type"); -// auto primary_devices = call(primary_conn.path(), NM_DBUS_INTERFACE_PROPERTIES, "Get", NM_DBUS_INTERFACE_ACTIVE_CONNECTION, "Devices"); - if (ipv4_address != "") { int metered_prop = call(adapter, NM_DBUS_INTERFACE_PROPERTIES, "Get", NM_DBUS_INTERFACE_DEVICE, "Metered"); std::cout << "Metered property: " << metered_prop << "\n"; @@ -387,63 +382,28 @@ bool WifiManager::currentNetworkMetered() { return true; } } - NetworkType type = currentNetworkType(); return type != NetworkType::NONE && type != NetworkType::WIFI && type != NetworkType::ETHERNET; } std::optional WifiManager::setCurrentNetworkMetered(bool metered) { -// auto primary_conn = call(NM_DBUS_PATH, NM_DBUS_INTERFACE_PROPERTIES, "Get", NM_DBUS_INTERFACE, "PrimaryConnection"); -// std::cout << "Primary connection: " << primary_conn.path() << "\n"; -// QDBusObjectPath settingsConnPath = call(primary_conn.path(), NM_DBUS_INTERFACE_PROPERTIES, "Get", NM_DBUS_INTERFACE_ACTIVE_CONNECTION, "Connection"); -// std::cout << "Settings connection path: " << settingsConnPath.path() << "\n"; -// auto primary_type = call(primary_conn.path(), NM_DBUS_INTERFACE_PROPERTIES, "Get", NM_DBUS_INTERFACE_ACTIVE_CONNECTION, "Type"); -// std::cout << "Primary type: " << primary_type.toStdString() << "\n"; - - for (const auto &p : getActiveConnections()) { - QString type = call(p.path(), NM_DBUS_INTERFACE_PROPERTIES, "Get", NM_DBUS_INTERFACE_ACTIVE_CONNECTION, "Type"); + for (const auto &active_conn : getActiveConnections()) { + QString type = call(active_conn.path(), NM_DBUS_INTERFACE_PROPERTIES, "Get", NM_DBUS_INTERFACE_ACTIVE_CONNECTION, "Type"); if (type == "802-11-wireless") { std::cout << "Setting metered to " << metered << " for type " << type.toStdString() << "\n"; std::cout << "tethering: " << isTetheringEnabled() << "\n"; if (!isTetheringEnabled()) { - QDBusObjectPath settingsConnPath = call(p.path(), NM_DBUS_INTERFACE_PROPERTIES, "Get", NM_DBUS_INTERFACE_ACTIVE_CONNECTION, "Connection"); - if (!settingsConnPath.path().isEmpty()) { - Connection settings = getConnectionSettings(settingsConnPath); + QDBusObjectPath conn = call(active_conn.path(), NM_DBUS_INTERFACE_PROPERTIES, "Get", NM_DBUS_INTERFACE_ACTIVE_CONNECTION, "Connection"); + if (!conn.path().isEmpty()) { int meteredInt = metered ? NM_METERED_YES : NM_METERED_NO; + Connection settings = getConnectionSettings(conn); settings["connection"]["metered"] = meteredInt; - - std::cout << "done setting metered to " << meteredInt << "\n"; - return asyncCall(settingsConnPath.path(), NM_DBUS_INTERFACE_SETTINGS_CONNECTION, "Update", QVariant::fromValue(settings)); + return asyncCall(conn.path(), NM_DBUS_INTERFACE_SETTINGS_CONNECTION, "Update", QVariant::fromValue(settings)); } } } } return std::nullopt; - -//// NetworkType type = currentNetworkType(); -// std::cout << "Setting metered to " << metered << " for type " << (int)type << "\n"; -// std::cout << "tethering: " << isTetheringEnabled() << "\n"; -// if (ipv4_address != "" && !isTetheringEnabled()) { // note: already checks tethering -// Connection settings = getConnectionSettings(settingsConnPath); -// int meteredInt = metered ? NM_METERED_YES : NM_METERED_NO; -// settings["connection"]["metered"] = meteredInt; -// -// std::cout << "done setting metered to " << meteredInt << "\n"; -// call(settingsConnPath.path(), NM_DBUS_INTERFACE_SETTINGS_CONNECTION, "Update", QVariant::fromValue(settings)); -// return true; -// } -// return false; -// -// // TODO: support eth? why not -// if (primary_type == "802-3-ethernet") { -// return false; -// } else if (primary_type == "802-11-wireless" && !isTetheringEnabled()) { -// int meteredInt = metered ? NM_METERED_UNKNOWN : NM_METERED_NO; -// settings["connection"]["metered"] = meteredInt; -//// call(primary_conn.path(), NM_DBUS_INTERFACE_SETTINGS_CONNECTION, "UpdateUnsaved", QVariant::fromValue(meteredInt)); -// call(settingsConnPath.path(), NM_DBUS_INTERFACE_SETTINGS_CONNECTION, "UpdateUnsaved", QVariant::fromValue(settings)); -// return true; -// } } void WifiManager::updateGsmSettings(bool roaming, QString apn, bool metered) {