IQ.Pilot Prebuilt Release @ 27f668a
This commit is contained in:
55
iqpilot/selfdrive/ui/lib/wifi_ssid.py
Normal file
55
iqpilot/selfdrive/ui/lib/wifi_ssid.py
Normal file
@@ -0,0 +1,55 @@
|
||||
import time
|
||||
import threading
|
||||
import subprocess
|
||||
|
||||
# Shared, throttled current-Wi-Fi-SSID lookup for the status bars (home pill + onroad sidebar).
|
||||
# The SSID isn't in deviceState, so we shell out to NetworkManager on a background thread and cache
|
||||
# the result; the render thread only ever reads the cached string.
|
||||
|
||||
_ssid = ""
|
||||
_last_fetch = 0.0
|
||||
_fetching = False
|
||||
_lock = threading.Lock()
|
||||
REFRESH_SECONDS = 10.0
|
||||
|
||||
|
||||
def _read_ssid() -> str:
|
||||
try:
|
||||
out = subprocess.run(["nmcli", "-t", "-f", "active,ssid", "dev", "wifi"],
|
||||
capture_output=True, text=True, timeout=4).stdout
|
||||
for line in out.splitlines():
|
||||
if line.startswith("yes:"):
|
||||
name = line.split(":", 1)[1].strip()
|
||||
if name:
|
||||
return name
|
||||
except Exception:
|
||||
pass
|
||||
try:
|
||||
name = subprocess.run(["iwgetid", "-r"], capture_output=True, text=True, timeout=4).stdout.strip()
|
||||
if name:
|
||||
return name
|
||||
except Exception:
|
||||
pass
|
||||
return ""
|
||||
|
||||
|
||||
def _fetch() -> None:
|
||||
global _ssid, _last_fetch, _fetching
|
||||
name = _read_ssid()
|
||||
with _lock:
|
||||
_ssid = name
|
||||
_last_fetch = time.monotonic()
|
||||
_fetching = False
|
||||
|
||||
|
||||
def current_ssid(on_wifi: bool) -> str:
|
||||
"""Return the connected SSID (or "" if unknown / not on Wi-Fi). Kicks a throttled background
|
||||
refresh; never blocks the caller."""
|
||||
global _fetching
|
||||
if not on_wifi:
|
||||
return ""
|
||||
with _lock:
|
||||
if not _fetching and time.monotonic() - _last_fetch > REFRESH_SECONDS:
|
||||
_fetching = True
|
||||
threading.Thread(target=_fetch, daemon=True).start()
|
||||
return _ssid
|
||||
Reference in New Issue
Block a user