2 Commits

Author SHA1 Message Date
677ec5b639 Rename WiFi to WLAN for consistent terminology
Updated variable names, function names, and comments to replace "WiFi"
with "WLAN" throughout the codebase. This ensures alignment with
standardized terminology and improves clarity in functionality and
configuration handling. Adjusted related configurations and interface
mappings accordingly.
2025-04-21 13:33:42 +02:00
fc82ec0eb9 feat(revpiconfig): Replace rfkill subprocess calls with sysfs writes
Updated Bluetooth and WiFi rfkill handling by replacing subprocess calls
to "rfkill" with direct writes to sysfs files. This change simplifies
the implementation and improves performance by avoiding external
command execution.
2025-04-21 13:25:56 +02:00
2 changed files with 41 additions and 37 deletions

View File

@@ -13,7 +13,7 @@ from .revpi_config import (
configure_dphys_swapfile,
configure_external_antenna,
configure_gui,
configure_wifi,
configure_wlan,
simple_systemd,
)
from ..dbus_helper import DbusInterface
@@ -94,7 +94,7 @@ AVAILABLE_FEATURES = {
),
"revpipyload": FeatureFunction(simple_systemd, ["revpipyload.service"]),
"bluetooth": FeatureFunction(configure_bluetooth, []),
"ieee80211": FeatureFunction(configure_wifi, []),
"wlan": FeatureFunction(configure_wlan, []),
"avahi": FeatureFunction(configure_avahi_daemon, []),
"external-antenna": FeatureFunction(configure_external_antenna, []),
}

View File

@@ -21,7 +21,7 @@ log = getLogger(__name__)
ConfigVariable = namedtuple("ConfigVariable", ["name", "value", "line_index"])
LINUX_BT_CLASS_PATH = "/sys/class/bluetooth"
LINUX_WIFI_CLASS_PATH = "/sys/class/ieee80211"
LINUX_WLAN_CLASS_PATH = "/sys/class/ieee80211"
CONFIG_TXT_LOCATIONS = ("/boot/firmware/config.txt", "/boot/config.txt")
@@ -81,19 +81,19 @@ class RevPiConfig:
except ValueError:
pass
# Detect WiFi on CM module
could_have_wifi = self._cm_type in (ComputeModuleTypes.CM4, ComputeModuleTypes.CM5)
if could_have_wifi:
wifi_interface = join(LINUX_WIFI_CLASS_PATH, "phy0")
if grep("DRIVER=brcmfmac", join(wifi_interface, "device", "uevent")):
self._wlan_class_path = wifi_interface
# Detect WLAN on CM module
could_have_wlan = self._cm_type in (ComputeModuleTypes.CM4, ComputeModuleTypes.CM5)
if could_have_wlan:
wlan_interface = join(LINUX_WLAN_CLASS_PATH, "phy0")
if grep("DRIVER=brcmfmac", join(wlan_interface, "device", "uevent")):
self._wlan_class_path = wlan_interface
# If no build in Wi-Fi on the CM, detect third party Wi-Fi on RevPi Flat
# If no build in WLAN on the CM, detect third party WLAN on RevPi Flat
if not self._wlan_class_path and grep("revpi-flat", "/proc/device-tree/compatible"):
lst_wifi_interfaces = glob("/sys/class/ieee80211/*")
for wifi_interface in lst_wifi_interfaces:
if grep("DRIVER=mwifiex_sdio", join(wifi_interface, "device", "uevent")):
self._wlan_class_path = wifi_interface
lst_wlan_interfaces = glob("/sys/class/ieee80211/*")
for wlan_interface in lst_wlan_interfaces:
if grep("DRIVER=mwifiex_sdio", join(wlan_interface, "device", "uevent")):
self._wlan_class_path = wlan_interface
# Detect ConBridge
could_have_con_bridge = self._cm_type in (ComputeModuleTypes.CM3, ComputeModuleTypes.CM4S)
@@ -102,7 +102,7 @@ class RevPiConfig:
self._revpi_with_con_bridge = len(lst_grep) > 0
@property
def class_path_wifi(self) -> str:
def class_path_wlan(self) -> str:
return self._wlan_class_path
@property
@@ -114,7 +114,7 @@ class RevPiConfig:
return self._revpi_with_con_bridge
@property
def with_wifi(self) -> bool:
def with_wlan(self) -> bool:
return bool(self._wlan_class_path)
@@ -224,11 +224,13 @@ def configure_bluetooth(action: ConfigActions):
if action is ConfigActions.ENABLE:
if bt_rfkill_index is not None:
subprocess.call(["rfkill", "unblock", str(bt_rfkill_index)])
with open(f"/sys/class/rfkill/rfkill{bt_rfkill_index}/soft", "w") as f:
f.write("0")
elif action is ConfigActions.DISABLE:
if bt_rfkill_index is not None:
subprocess.call(["rfkill", "block", str(bt_rfkill_index)])
with open(f"/sys/class/rfkill/rfkill{bt_rfkill_index}/soft", "w") as f:
f.write("1")
elif action is ConfigActions.STATUS:
if bt_rfkill_index is None:
@@ -293,21 +295,21 @@ def configure_dphys_swapfile(action: ConfigActions):
def configure_external_antenna(action: ConfigActions):
revpi = RevPiConfig()
if action is ConfigActions.AVAILABLE:
return revpi.with_wifi
return revpi.with_wlan
config_txt = ConfigTxt()
if action is ConfigActions.ENABLE and revpi.with_wifi:
if action is ConfigActions.ENABLE and revpi.with_wlan:
config_txt.clear_dtparams(["ant1", "ant2"])
config_txt.add_name_value("dtparam", "ant2")
config_txt.save_config()
elif action is ConfigActions.DISABLE and revpi.with_wifi:
elif action is ConfigActions.DISABLE and revpi.with_wlan:
config_txt.clear_dtparams(["ant1", "ant2"])
config_txt.save_config()
elif action is ConfigActions.STATUS:
return revpi.with_wifi and "ant2" in config_txt.get_values("dtparam")
return revpi.with_wlan and "ant2" in config_txt.get_values("dtparam")
else:
raise ValueError(f"action {action} not supported")
@@ -337,28 +339,30 @@ def configure_gui(action: ConfigActions):
raise ValueError(f"action {action} not supported")
def configure_wifi(action: ConfigActions):
def configure_wlan(action: ConfigActions):
revpi = RevPiConfig()
if action is ConfigActions.ENABLE:
if revpi.with_wifi:
wifi_rfkill_index = get_rfkill_index(revpi.class_path_wifi)
subprocess.call(["rfkill", "unblock", str(wifi_rfkill_index)])
if revpi.with_wlan:
wlan_rfkill_index = get_rfkill_index(revpi.class_path_wlan)
with open(f"/sys/class/rfkill/rfkill{wlan_rfkill_index}/soft", "w") as f:
f.write("0")
elif action is ConfigActions.DISABLE:
if revpi.with_wifi:
wifi_rfkill_index = get_rfkill_index(revpi.class_path_wifi)
subprocess.call(["rfkill", "block", str(wifi_rfkill_index)])
if revpi.with_wlan:
wlan_rfkill_index = get_rfkill_index(revpi.class_path_wlan)
with open(f"/sys/class/rfkill/rfkill{wlan_rfkill_index}/soft", "w") as f:
f.write("1")
elif action is ConfigActions.AVAILABLE:
return revpi.with_wifi
return revpi.with_wlan
elif action is ConfigActions.STATUS:
if not revpi.with_wifi:
if not revpi.with_wlan:
return False
wifi_rfkill_index = get_rfkill_index(revpi.class_path_wifi)
with open(f"/sys/class/rfkill/rfkill{wifi_rfkill_index}/soft", "r") as f:
wlan_rfkill_index = get_rfkill_index(revpi.class_path_wlan)
with open(f"/sys/class/rfkill/rfkill{wlan_rfkill_index}/soft", "r") as f:
buffer = f.read().strip()
return buffer == "0"
@@ -420,10 +424,10 @@ if __name__ == "__main__":
print("Model:", rc.model)
print("Serial: ", rc.serial)
print("CM Type: ", rc.cm_type.name)
print("With wifi: ", rc.with_wifi)
if rc.with_wifi:
print(" class path: ", rc.class_path_wifi)
print(" rfkill index: ", get_rfkill_index(rc.class_path_wifi))
print("With WLAN: ", rc.with_wlan)
if rc.with_wlan:
print(" class path: ", rc.class_path_wlan)
print(" rfkill index: ", get_rfkill_index(rc.class_path_wlan))
print("With con-bridge:", rc.with_con_bridge)
config_txt = ConfigTxt()