mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-06-30 02:52:04 +08:00
WifiManager: update networks on scan (#37177)
* like c++ wifiman * rename to scan * can do this can do this * Revert "can do this" This reverts commit 295f7f49d448c6aacdde2ef810904df86357840b. * kinda useless now * clean up
This commit is contained in:
@@ -25,7 +25,7 @@ from openpilot.system.ui.lib.networkmanager import (NM, NM_WIRELESS_IFACE, NM_80
|
||||
NM_SETTINGS_IFACE, NM_CONNECTION_IFACE, NM_DEVICE_IFACE,
|
||||
NM_DEVICE_TYPE_WIFI, NM_DEVICE_TYPE_MODEM, NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT,
|
||||
NM_DEVICE_STATE_REASON_NEW_ACTIVATION, NM_ACTIVE_CONNECTION_IFACE,
|
||||
NM_IP4_CONFIG_IFACE, NMDeviceState)
|
||||
NM_IP4_CONFIG_IFACE, NM_PROPERTIES_IFACE, NMDeviceState)
|
||||
|
||||
try:
|
||||
from openpilot.common.params import Params
|
||||
@@ -153,7 +153,7 @@ class WifiManager:
|
||||
self._tethering_password: str = ""
|
||||
self._ipv4_forward = False
|
||||
|
||||
self._last_network_update: float = 0.0
|
||||
self._last_network_scan: float = 0.0
|
||||
self._callback_queue: list[Callable] = []
|
||||
|
||||
self._tethering_ssid = "weedle"
|
||||
@@ -232,10 +232,6 @@ class WifiManager:
|
||||
def set_active(self, active: bool):
|
||||
self._active = active
|
||||
|
||||
# Scan immediately if we haven't scanned in a while
|
||||
if active and time.monotonic() - self._last_network_update > SCAN_PERIOD_SECONDS / 2:
|
||||
self._last_network_update = 0.0
|
||||
|
||||
def _monitor_state(self):
|
||||
# Filter for signals
|
||||
rules = (
|
||||
@@ -256,7 +252,13 @@ class WifiManager:
|
||||
interface=NM_SETTINGS_IFACE,
|
||||
member="ConnectionRemoved",
|
||||
path=NM_SETTINGS_PATH,
|
||||
)
|
||||
),
|
||||
MatchRule(
|
||||
type="signal",
|
||||
interface=NM_PROPERTIES_IFACE,
|
||||
member="PropertiesChanged",
|
||||
path=self._wifi_device,
|
||||
),
|
||||
)
|
||||
|
||||
for rule in rules:
|
||||
@@ -264,7 +266,8 @@ class WifiManager:
|
||||
|
||||
with (self._conn_monitor.filter(rules[0], bufsize=SIGNAL_QUEUE_SIZE) as state_q,
|
||||
self._conn_monitor.filter(rules[1], bufsize=SIGNAL_QUEUE_SIZE) as new_conn_q,
|
||||
self._conn_monitor.filter(rules[2], bufsize=SIGNAL_QUEUE_SIZE) as removed_conn_q):
|
||||
self._conn_monitor.filter(rules[2], bufsize=SIGNAL_QUEUE_SIZE) as removed_conn_q,
|
||||
self._conn_monitor.filter(rules[3], bufsize=SIGNAL_QUEUE_SIZE) as props_q):
|
||||
while not self._exit:
|
||||
try:
|
||||
self._conn_monitor.recv_messages(timeout=1)
|
||||
@@ -279,6 +282,12 @@ class WifiManager:
|
||||
conn_path = new_conn_q.popleft().body[0]
|
||||
self._new_connection(conn_path)
|
||||
|
||||
# PropertiesChanged on wifi device (LastScan = scan complete)
|
||||
while len(props_q):
|
||||
iface, changed, _ = props_q.popleft().body
|
||||
if iface == NM_WIRELESS_IFACE and 'LastScan' in changed:
|
||||
self._update_networks()
|
||||
|
||||
# Device state changes
|
||||
while len(state_q):
|
||||
new_state, previous_state, change_reason = state_q.popleft().body
|
||||
@@ -302,12 +311,9 @@ class WifiManager:
|
||||
def _network_scanner(self):
|
||||
while not self._exit:
|
||||
if self._active:
|
||||
if time.monotonic() - self._last_network_update > SCAN_PERIOD_SECONDS:
|
||||
# Scan for networks every 10 seconds
|
||||
# TODO: should update when scan is complete (PropertiesChanged), but this is more than good enough for now
|
||||
self._update_networks()
|
||||
if time.monotonic() - self._last_network_scan > SCAN_PERIOD_SECONDS:
|
||||
self._request_scan()
|
||||
self._last_network_update = time.monotonic()
|
||||
self._last_network_scan = time.monotonic()
|
||||
time.sleep(1 / 2.)
|
||||
|
||||
def _wait_for_wifi_device(self):
|
||||
|
||||
Reference in New Issue
Block a user