pull/35293/head
Shane Smiskol 1 week ago
parent a33265a722
commit e4721c5f91
  1. 10
      selfdrive/ui/qt/network/networking.cc
  2. 1
      selfdrive/ui/qt/network/networking.h
  3. 54
      selfdrive/ui/qt/network/wifi_manager.cc

@ -176,7 +176,7 @@ AdvancedNetworking::AdvancedNetworking(QWidget* parent, WifiManager* wifi): QWid
// Metered toggle // Metered toggle
const bool metered = params.getBool("GsmMetered"); 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) { QObject::connect(cellularMeteredToggle, &SshToggle::toggleFlipped, [=](bool state) {
params.putBool("GsmMetered", state); params.putBool("GsmMetered", state);
wifi->updateGsmSettings(params.getBool("GsmRoaming"), QString::fromStdString(params.get("GsmApn")), 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 // Wi-Fi metered toggle
std::vector<QString> longi_button_texts{tr("Unmetered"), tr("Default"), tr("Metered")}; std::vector<QString> 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); wifiMeteredToggle->setEnabled(false);
QObject::connect(wifiMeteredToggle, &ToggleControl::toggleFlipped, [=](bool state) { QObject::connect(wifiMeteredToggle, &ToggleControl::toggleFlipped, [=](bool state) {
std::cout << "Set Wi-Fi metered to " << state << std::endl; std::cout << "Set Wi-Fi metered to " << state << std::endl;
@ -238,13 +238,11 @@ void AdvancedNetworking::refresh() {
ipLabel->setText(wifi->ipv4_address); ipLabel->setText(wifi->ipv4_address);
tetheringToggle->setEnabled(true); tetheringToggle->setEnabled(true);
// TODO: which?!
// wifiMeteredToggle->setEnabled(wifi->currentNetworkType() == NetworkType::WIFI);
if (wifi->isTetheringEnabled()) { if (wifi->isTetheringEnabled()) {
wifiMeteredToggle->setEnabled(false); wifiMeteredToggle->setEnabled(false);
wifiMeteredToggle->setValue("Unsupported while tethering"); wifiMeteredToggle->setValue("Unsupported while tethering");
wifiMeteredToggle->setToggled(false); wifiMeteredToggle->setToggled(true);
} else if (wifi->ipv4_address != "") { // TODO: ~check type~ fix type } else if (wifi->ipv4_address != "") {
bool metered = wifi->currentNetworkMetered(); bool metered = wifi->currentNetworkMetered();
wifiMeteredToggle->setEnabled(true); wifiMeteredToggle->setEnabled(true);
wifiMeteredToggle->setValue(metered ? "Metered" : "Unmetered"); wifiMeteredToggle->setValue(metered ? "Metered" : "Unmetered");

@ -66,7 +66,6 @@ private:
ButtonControl* editApnButton; ButtonControl* editApnButton;
ButtonControl* hiddenNetworkButton; ButtonControl* hiddenNetworkButton;
ToggleControl* cellularMeteredToggle; ToggleControl* cellularMeteredToggle;
// ButtonParamControl* wifiMeteredToggle;
ToggleControl* wifiMeteredToggle; ToggleControl* wifiMeteredToggle;
WifiManager* wifi = nullptr; WifiManager* wifi = nullptr;
Params params; Params params;

@ -101,7 +101,6 @@ void WifiManager::refreshNetworks() {
void WifiManager::refreshFinished(QDBusPendingCallWatcher *watcher) { void WifiManager::refreshFinished(QDBusPendingCallWatcher *watcher) {
ipv4_address = getIp4Address(); ipv4_address = getIp4Address();
seenNetworks.clear(); seenNetworks.clear();
const QDBusReply<QList<QDBusObjectPath>> watcher_reply = *watcher; const QDBusReply<QList<QDBusObjectPath>> watcher_reply = *watcher;
@ -355,8 +354,8 @@ void WifiManager::activateModemConnection(const QDBusObjectPath &path) {
} }
// function matches tici/hardware.py // function matches tici/hardware.py
// FIXME: it can mistakenly show CELL when connected to WIFI
NetworkType WifiManager::currentNetworkType() { NetworkType WifiManager::currentNetworkType() {
// TODO: shows type 2 (CELL) while on wifi?! don't use this
auto primary_conn = call<QDBusObjectPath>(NM_DBUS_PATH, NM_DBUS_INTERFACE_PROPERTIES, "Get", NM_DBUS_INTERFACE, "PrimaryConnection"); auto primary_conn = call<QDBusObjectPath>(NM_DBUS_PATH, NM_DBUS_INTERFACE_PROPERTIES, "Get", NM_DBUS_INTERFACE, "PrimaryConnection");
auto primary_type = call<QString>(primary_conn.path(), NM_DBUS_INTERFACE_PROPERTIES, "Get", NM_DBUS_INTERFACE_ACTIVE_CONNECTION, "Type"); auto primary_type = call<QString>(primary_conn.path(), NM_DBUS_INTERFACE_PROPERTIES, "Get", NM_DBUS_INTERFACE_ACTIVE_CONNECTION, "Type");
@ -376,10 +375,6 @@ NetworkType WifiManager::currentNetworkType() {
} }
bool WifiManager::currentNetworkMetered() { bool WifiManager::currentNetworkMetered() {
// auto primary_conn = call<QDBusObjectPath>(NM_DBUS_PATH, NM_DBUS_INTERFACE_PROPERTIES, "Get", NM_DBUS_INTERFACE, "PrimaryConnection");
// auto primary_type = call<QString>(primary_conn.path(), NM_DBUS_INTERFACE_PROPERTIES, "Get", NM_DBUS_INTERFACE_ACTIVE_CONNECTION, "Type");
// auto primary_devices = call<QDBusObjectPath>(primary_conn.path(), NM_DBUS_INTERFACE_PROPERTIES, "Get", NM_DBUS_INTERFACE_ACTIVE_CONNECTION, "Devices");
if (ipv4_address != "") { if (ipv4_address != "") {
int metered_prop = call<int>(adapter, NM_DBUS_INTERFACE_PROPERTIES, "Get", NM_DBUS_INTERFACE_DEVICE, "Metered"); int metered_prop = call<int>(adapter, NM_DBUS_INTERFACE_PROPERTIES, "Get", NM_DBUS_INTERFACE_DEVICE, "Metered");
std::cout << "Metered property: " << metered_prop << "\n"; std::cout << "Metered property: " << metered_prop << "\n";
@ -387,63 +382,28 @@ bool WifiManager::currentNetworkMetered() {
return true; return true;
} }
} }
NetworkType type = currentNetworkType(); NetworkType type = currentNetworkType();
return type != NetworkType::NONE && type != NetworkType::WIFI && type != NetworkType::ETHERNET; return type != NetworkType::NONE && type != NetworkType::WIFI && type != NetworkType::ETHERNET;
} }
std::optional<QDBusPendingCall> WifiManager::setCurrentNetworkMetered(bool metered) { std::optional<QDBusPendingCall> WifiManager::setCurrentNetworkMetered(bool metered) {
// auto primary_conn = call<QDBusObjectPath>(NM_DBUS_PATH, NM_DBUS_INTERFACE_PROPERTIES, "Get", NM_DBUS_INTERFACE, "PrimaryConnection"); for (const auto &active_conn : getActiveConnections()) {
// std::cout << "Primary connection: " << primary_conn.path() << "\n"; QString type = call<QString>(active_conn.path(), NM_DBUS_INTERFACE_PROPERTIES, "Get", NM_DBUS_INTERFACE_ACTIVE_CONNECTION, "Type");
// QDBusObjectPath settingsConnPath = call<QDBusObjectPath>(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<QString>(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<QString>(p.path(), NM_DBUS_INTERFACE_PROPERTIES, "Get", NM_DBUS_INTERFACE_ACTIVE_CONNECTION, "Type");
if (type == "802-11-wireless") { if (type == "802-11-wireless") {
std::cout << "Setting metered to " << metered << " for type " << type.toStdString() << "\n"; std::cout << "Setting metered to " << metered << " for type " << type.toStdString() << "\n";
std::cout << "tethering: " << isTetheringEnabled() << "\n"; std::cout << "tethering: " << isTetheringEnabled() << "\n";
if (!isTetheringEnabled()) { if (!isTetheringEnabled()) {
QDBusObjectPath settingsConnPath = call<QDBusObjectPath>(p.path(), NM_DBUS_INTERFACE_PROPERTIES, "Get", NM_DBUS_INTERFACE_ACTIVE_CONNECTION, "Connection"); QDBusObjectPath conn = call<QDBusObjectPath>(active_conn.path(), NM_DBUS_INTERFACE_PROPERTIES, "Get", NM_DBUS_INTERFACE_ACTIVE_CONNECTION, "Connection");
if (!settingsConnPath.path().isEmpty()) { if (!conn.path().isEmpty()) {
Connection settings = getConnectionSettings(settingsConnPath);
int meteredInt = metered ? NM_METERED_YES : NM_METERED_NO; int meteredInt = metered ? NM_METERED_YES : NM_METERED_NO;
Connection settings = getConnectionSettings(conn);
settings["connection"]["metered"] = meteredInt; settings["connection"]["metered"] = meteredInt;
return asyncCall(conn.path(), NM_DBUS_INTERFACE_SETTINGS_CONNECTION, "Update", QVariant::fromValue(settings));
std::cout << "done setting metered to " << meteredInt << "\n";
return asyncCall(settingsConnPath.path(), NM_DBUS_INTERFACE_SETTINGS_CONNECTION, "Update", QVariant::fromValue(settings));
} }
} }
} }
} }
return std::nullopt; 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) { void WifiManager::updateGsmSettings(bool roaming, QString apn, bool metered) {

Loading…
Cancel
Save