driver: wifi: siwx91x: Add roaming configuration
- Defined Kconfig macros for Roam config - Added set roam configuration API call after BGSCAN Signed-off-by: Nitin Pandey <nitin.pandey@silabs.com>
This commit is contained in:
parent
bf22b61540
commit
50e36095dd
3 changed files with 59 additions and 0 deletions
|
@ -45,6 +45,44 @@ config NET_MGMT_EVENT_STACK_SIZE
|
|||
config NET_MGMT_EVENT_QUEUE_SIZE
|
||||
default 10
|
||||
|
||||
config WIFI_SILABS_SIWX91X_ENABLE_ROAMING
|
||||
bool "WiFi roaming support"
|
||||
help
|
||||
Enable this option to configure roaming parameters.
|
||||
Roaming will be enabled automatically when the
|
||||
background scan is active, improving connectivity
|
||||
and performance during transitions between access points.
|
||||
|
||||
config WIFI_SILABS_SIWX91X_ROAMING_USE_DEAUTH
|
||||
bool "Use deauth frames for roaming"
|
||||
depends on WIFI_SILABS_SIWX91X_ENABLE_ROAMING
|
||||
help
|
||||
Enable this option to allow roaming using
|
||||
deauthentication frames. By default, roaming
|
||||
is performed using Null data packets.
|
||||
|
||||
config WIFI_SILABS_SIWX91X_ROAMING_TRIGGER_LEVEL
|
||||
int "Default value of roam trigger level (in dBm)"
|
||||
default -70
|
||||
range -10 -100
|
||||
depends on WIFI_SILABS_SIWX91X_ENABLE_ROAMING
|
||||
help
|
||||
Sets the default roam trigger level. Higher values trigger
|
||||
earlier roaming; lower values delay it. It determines
|
||||
when to start searching for a new AP.
|
||||
|
||||
config WIFI_SILABS_SIWX91X_ROAMING_TRIGGER_LEVEL_CHANGE
|
||||
int "Default value of roam trigger level change (in dBm)"
|
||||
default 5
|
||||
range 0 90
|
||||
depends on WIFI_SILABS_SIWX91X_ENABLE_ROAMING
|
||||
help
|
||||
Configure the default trigger level change for WiFi roaming.
|
||||
This value determines the change in signal strength (in dBm)
|
||||
required to initiate a roaming event. A smaller value may result
|
||||
in more sensitive roaming behavior, while a larger value can
|
||||
reduce the frequency of roaming events. It determines
|
||||
the signal difference needed to switch to a new AP.
|
||||
|
||||
config WIFI_SILABS_SIWX91X_ADV_SCAN_THRESHOLD
|
||||
int "Advanced scan threshold (in dBm)"
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
#include "sl_net_default_values.h"
|
||||
#include "sl_wifi.h"
|
||||
#include "sl_net.h"
|
||||
#include "sl_wifi_constants.h"
|
||||
|
||||
#define SIWX91X_DRIVER_VERSION KERNEL_VERSION_STRING
|
||||
|
||||
|
@ -537,6 +538,15 @@ static int siwx91x_scan(const struct device *dev, struct wifi_scan_params *z_sca
|
|||
.enable_multi_probe = CONFIG_WIFI_SILABS_SIWX91X_ADV_MULTIPROBE,
|
||||
.enable_instant_scan = CONFIG_WIFI_SILABS_SIWX91X_ENABLE_INSTANT_SCAN,
|
||||
};
|
||||
sl_wifi_roam_configuration_t roam_configuration = {
|
||||
#ifdef CONFIG_WIFI_SILABS_SIWX91X_ENABLE_ROAMING
|
||||
.trigger_level = CONFIG_WIFI_SILABS_SIWX91X_ROAMING_TRIGGER_LEVEL,
|
||||
.trigger_level_change = CONFIG_WIFI_SILABS_SIWX91X_ROAMING_TRIGGER_LEVEL_CHANGE,
|
||||
#else
|
||||
.trigger_level = SL_WIFI_NEVER_ROAM,
|
||||
.trigger_level_change = 0,
|
||||
#endif
|
||||
};
|
||||
struct siwx91x_dev *sidev = dev->data;
|
||||
sl_wifi_interface_t interface;
|
||||
sl_wifi_ssid_t ssid = { };
|
||||
|
@ -573,6 +583,12 @@ static int siwx91x_scan(const struct device *dev, struct wifi_scan_params *z_sca
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
ret = sl_wifi_set_roam_configuration(interface, &roam_configuration);
|
||||
if (ret != SL_STATUS_OK) {
|
||||
LOG_ERR("roaming configuration failed with status %x", ret);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
sl_scan_config.type = SL_WIFI_SCAN_TYPE_ADV_SCAN;
|
||||
sl_scan_config.periodic_scan_interval =
|
||||
CONFIG_WIFI_SILABS_SIWX91X_ADV_SCAN_PERIODICITY;
|
||||
|
|
|
@ -45,6 +45,11 @@ int siwg91x_get_nwp_config(int wifi_oper_mode, sl_wifi_device_configuration_t *g
|
|||
if (wifi_oper_mode == SL_SI91X_CLIENT_MODE) {
|
||||
boot_config->oper_mode = SL_SI91X_CLIENT_MODE;
|
||||
|
||||
if (IS_ENABLED(CONFIG_WIFI_SILABS_SIWX91X_ROAMING_USE_DEAUTH)) {
|
||||
boot_config->custom_feature_bit_map |=
|
||||
SL_SI91X_CUSTOM_FEAT_ROAM_WITH_DEAUTH_OR_NULL_DATA;
|
||||
}
|
||||
|
||||
if (IS_ENABLED(CONFIG_WIFI_SILABS_SIWX91X) &&
|
||||
IS_ENABLED(CONFIG_BT_SILABS_SIWX91X)) {
|
||||
boot_config->coex_mode = SL_SI91X_WLAN_BLE_MODE;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue