wifi connect without requiring reboot
This commit is contained in:
parent
099c28f9c7
commit
b4b40de64d
|
|
@ -298,7 +298,10 @@ static struct {
|
|||
struct arg_end *end;
|
||||
} connect_args;
|
||||
|
||||
// ... [Keep existing includes and declarations] ...
|
||||
|
||||
static int wifi_do_connect(int argc, char **argv) {
|
||||
// Initialize argtable members
|
||||
connect_args.ssid = arg_str1(NULL, NULL, "<ssid>", "SSID");
|
||||
connect_args.password = arg_str0(NULL, NULL, "<pass>", "Password");
|
||||
connect_args.bssid = arg_str0("b", "bssid", "<xx:xx...>", "Lock BSSID");
|
||||
|
|
@ -320,13 +323,50 @@ static int wifi_do_connect(int argc, char **argv) {
|
|||
const char *pass = (connect_args.password->count > 0) ? connect_args.password->sval[0] : "";
|
||||
const char *bssid = (connect_args.bssid->count > 0) ? connect_args.bssid->sval[0] : "";
|
||||
|
||||
// 1. Ensure we are in Station Mode
|
||||
wifi_ctl_mode_t current_mode = wifi_ctl_get_mode();
|
||||
if (current_mode != WIFI_CTL_MODE_STA) {
|
||||
printf("Switching to Station Mode first...\n");
|
||||
wifi_ctl_switch_to_sta(WIFI_BW_HT20);
|
||||
}
|
||||
|
||||
printf("Connecting to '%s' (BSSID: %s)...\n", ssid, bssid[0] ? bssid : "Any");
|
||||
|
||||
// 2. Save to NVS (Persistent)
|
||||
wifi_cfg_set_credentials(ssid, pass, bssid);
|
||||
wifi_cfg_set_dhcp(true);
|
||||
|
||||
printf("Credentials saved. Rebooting to apply...\n");
|
||||
esp_restart();
|
||||
// 3. Apply to Runtime Driver (Hot Reload)
|
||||
wifi_config_t wifi_config = {0};
|
||||
strlcpy((char *)wifi_config.sta.ssid, ssid, sizeof(wifi_config.sta.ssid));
|
||||
strlcpy((char *)wifi_config.sta.password, pass, sizeof(wifi_config.sta.password));
|
||||
|
||||
// Default security settings
|
||||
wifi_config.sta.threshold.authmode = WIFI_AUTH_WPA2_PSK;
|
||||
wifi_config.sta.pmf_cfg.capable = true;
|
||||
wifi_config.sta.pmf_cfg.required = false;
|
||||
|
||||
// Handle BSSID Locking
|
||||
if (bssid[0]) {
|
||||
unsigned int mac[6];
|
||||
if (sscanf(bssid, "%02x:%02x:%02x:%02x:%02x:%02x",
|
||||
&mac[0], &mac[1], &mac[2], &mac[3], &mac[4], &mac[5]) == 6) {
|
||||
for(int i=0; i<6; i++) wifi_config.sta.bssid[i] = (uint8_t)mac[i];
|
||||
wifi_config.sta.bssid_set = true;
|
||||
} else {
|
||||
printf("Warning: Invalid BSSID format ignored.\n");
|
||||
}
|
||||
}
|
||||
|
||||
// Force Disconnect -> Set Config -> Reconnect
|
||||
esp_wifi_disconnect();
|
||||
esp_err_t err = esp_wifi_set_config(WIFI_IF_STA, &wifi_config);
|
||||
if (err == ESP_OK) {
|
||||
esp_wifi_connect();
|
||||
printf("Connection initiated (Check 'wifi status').\n");
|
||||
} else {
|
||||
printf("Failed to apply configuration: %s\n", esp_err_to_name(err));
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue