add bssid to scan output
This commit is contained in:
parent
46f0cdb07b
commit
2a41edf491
|
|
@ -430,45 +430,72 @@ static struct {
|
||||||
} scan_args;
|
} scan_args;
|
||||||
|
|
||||||
static int cmd_scan(int argc, char **argv) {
|
static int cmd_scan(int argc, char **argv) {
|
||||||
int nerrors = arg_parse(argc, argv, (void **)&scan_args);
|
wifi_scan_config_t scan_config = {0};
|
||||||
if (nerrors > 0) {
|
scan_config.show_hidden = true;
|
||||||
arg_print_errors(stderr, scan_args.end, argv[0]);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (scan_args.help->count > 0) {
|
printf("Starting Wi-Fi Scan...\n");
|
||||||
printf("Usage: scan\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("Starting WiFi Scan...\n");
|
|
||||||
|
|
||||||
// Force STA mode to allow scanning
|
|
||||||
wifi_ctl_switch_to_sta(WIFI_BW_HT20);
|
|
||||||
|
|
||||||
wifi_scan_config_t scan_config = { .show_hidden = true };
|
|
||||||
esp_err_t err = esp_wifi_scan_start(&scan_config, true);
|
esp_err_t err = esp_wifi_scan_start(&scan_config, true);
|
||||||
|
|
||||||
|
// --- SMART RETRY LOGIC ---
|
||||||
|
if (err == ESP_ERR_WIFI_STATE) {
|
||||||
|
printf("WARN: WiFi is busy connecting. Forcing disconnect to allow scan...\n");
|
||||||
|
esp_wifi_disconnect(); // Stop the connection attempt
|
||||||
|
vTaskDelay(pdMS_TO_TICKS(100)); // Give the driver a moment to reset state
|
||||||
|
|
||||||
|
// Retry scan
|
||||||
|
err = esp_wifi_scan_start(&scan_config, true);
|
||||||
|
}
|
||||||
|
// -------------------------
|
||||||
|
|
||||||
if (err != ESP_OK) {
|
if (err != ESP_OK) {
|
||||||
printf("Scan failed: %s\n", esp_err_to_name(err));
|
printf("Error starting scan: %s\n", esp_err_to_name(err));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t ap_count = 0;
|
uint16_t ap_count = 0;
|
||||||
esp_wifi_scan_get_ap_num(&ap_count);
|
esp_wifi_scan_get_ap_num(&ap_count);
|
||||||
printf("Found %d APs:\n", ap_count);
|
if (ap_count == 0) {
|
||||||
|
printf("No APs found.\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
wifi_ap_record_t *ap_info = (wifi_ap_record_t *)malloc(sizeof(wifi_ap_record_t) * ap_count);
|
||||||
|
if (!ap_info) {
|
||||||
|
printf("Failed to allocate memory for scan results.\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
ESP_ERROR_CHECK(esp_wifi_scan_get_ap_records(&ap_count, ap_info));
|
||||||
|
printf("Found %u unique BSSIDs\n", ap_count);
|
||||||
|
printf("------------------------------------------------------------------------------------------------\n");
|
||||||
|
printf("SSID | BSSID | RSSI | Channel | Auth Mode\n");
|
||||||
|
printf("------------------------------------------------------------------------------------------------\n");
|
||||||
|
|
||||||
if (ap_count > 0) {
|
|
||||||
wifi_ap_record_t *ap_list = (wifi_ap_record_t *)malloc(sizeof(wifi_ap_record_t) * ap_count);
|
|
||||||
if (ap_list) {
|
|
||||||
esp_wifi_scan_get_ap_records(&ap_count, ap_list);
|
|
||||||
printf("%-32s | %-4s | %-4s | %-3s\n", "SSID", "RSSI", "CH", "Auth");
|
|
||||||
printf("----------------------------------------------------------\n");
|
|
||||||
for (int i = 0; i < ap_count; i++) {
|
for (int i = 0; i < ap_count; i++) {
|
||||||
printf("%-32s | %-4d | %-4d | %d\n", (char *)ap_list[i].ssid, ap_list[i].rssi, ap_list[i].primary, ap_list[i].authmode);
|
char *authmode;
|
||||||
}
|
switch (ap_info[i].authmode) {
|
||||||
free(ap_list);
|
case WIFI_AUTH_OPEN: authmode = "OPEN"; break;
|
||||||
|
case WIFI_AUTH_WEP: authmode = "WEP"; break;
|
||||||
|
case WIFI_AUTH_WPA_PSK: authmode = "WPA-PSK"; break;
|
||||||
|
case WIFI_AUTH_WPA2_PSK: authmode = "WPA2-PSK"; break;
|
||||||
|
case WIFI_AUTH_WPA_WPA2_PSK: authmode = "WPA/WPA2"; break;
|
||||||
|
case WIFI_AUTH_WPA2_ENTERPRISE: authmode = "WPA2-ENT"; break;
|
||||||
|
case WIFI_AUTH_WPA3_PSK: authmode = "WPA3-PSK"; break;
|
||||||
|
case WIFI_AUTH_WPA2_WPA3_PSK: authmode = "WPA2/WPA3"; break;
|
||||||
|
default: authmode = "UNKNOWN"; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
printf("%-32.32s | %02x:%02x:%02x:%02x:%02x:%02x | %4d | %7d | %s\n",
|
||||||
|
ap_info[i].ssid,
|
||||||
|
ap_info[i].bssid[0], ap_info[i].bssid[1], ap_info[i].bssid[2],
|
||||||
|
ap_info[i].bssid[3], ap_info[i].bssid[4], ap_info[i].bssid[5],
|
||||||
|
ap_info[i].rssi,
|
||||||
|
ap_info[i].primary,
|
||||||
|
authmode);
|
||||||
}
|
}
|
||||||
|
printf("------------------------------------------------------------------------------------------------\n");
|
||||||
|
|
||||||
|
free(ap_info);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -555,10 +582,6 @@ static void register_wifi_cmd(void) {
|
||||||
ESP_ERROR_CHECK(esp_console_cmd_register(&cmd));
|
ESP_ERROR_CHECK(esp_console_cmd_register(&cmd));
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "ping/ping_sock.h" // Add this include
|
|
||||||
|
|
||||||
// ... [Existing Includes] ...
|
|
||||||
|
|
||||||
static void cmd_ping_on_ping_success(esp_ping_handle_t hdl, void *args) {
|
static void cmd_ping_on_ping_success(esp_ping_handle_t hdl, void *args) {
|
||||||
uint8_t ttl;
|
uint8_t ttl;
|
||||||
uint16_t seqno;
|
uint16_t seqno;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue