Select one of the symbols to view example projects that use it.
 
Outline
#include <string.h>
#include "freertos/FreeRTOS.h"
#include "freertos/event_groups.h"
#include "esp_wifi.h"
#include "esp_log.h"
#include "esp_event.h"
#include "nvs_flash.h"
#include "regex.h"
#define DEFAULT_SCAN_LIST_SIZE
#define USE_CHANNEL_BITMAP
#define CHANNEL_LIST_SIZE
TAG
print_auth_mode(int)
print_cipher_type(int, int)
wifi_scan()
app_main()
Files
loading...
SourceVuESP-IDF Framework and Examplesscan samplemain/scan.c
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
/* Scan Example This example code is in the Public Domain (or CC0 licensed, at your option.) Unless required by applicable law or agreed to in writing, this software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *//* ... */ /* This example shows how to scan for available set of APs. *//* ... */ #include <string.h> #include "freertos/FreeRTOS.h" #include "freertos/event_groups.h" #include "esp_wifi.h" #include "esp_log.h" #include "esp_event.h" #include "nvs_flash.h" #include "regex.h"8 includes #define DEFAULT_SCAN_LIST_SIZE CONFIG_EXAMPLE_SCAN_LIST_SIZE #ifdef CONFIG_EXAMPLE_USE_SCAN_CHANNEL_BITMAP #define USE_CHANNEL_BITMAP 1 #define CHANNEL_LIST_SIZE 3 static uint8_t channel_list[CHANNEL_LIST_SIZE] = {1, 6, 11};/* ... */ #endif /*CONFIG_EXAMPLE_USE_SCAN_CHANNEL_BITMAP*/ static const char *TAG = "scan"; static void print_auth_mode(int authmode) { switch (authmode) { case WIFI_AUTH_OPEN: ESP_LOGI(TAG, "Authmode \tWIFI_AUTH_OPEN"); break;... case WIFI_AUTH_OWE: ESP_LOGI(TAG, "Authmode \tWIFI_AUTH_OWE"); break;... case WIFI_AUTH_WEP: ESP_LOGI(TAG, "Authmode \tWIFI_AUTH_WEP"); break;... case WIFI_AUTH_WPA_PSK: ESP_LOGI(TAG, "Authmode \tWIFI_AUTH_WPA_PSK"); break;... case WIFI_AUTH_WPA2_PSK: ESP_LOGI(TAG, "Authmode \tWIFI_AUTH_WPA2_PSK"); break;... case WIFI_AUTH_WPA_WPA2_PSK: ESP_LOGI(TAG, "Authmode \tWIFI_AUTH_WPA_WPA2_PSK"); break;... case WIFI_AUTH_ENTERPRISE: ESP_LOGI(TAG, "Authmode \tWIFI_AUTH_ENTERPRISE"); break;... case WIFI_AUTH_WPA3_PSK: ESP_LOGI(TAG, "Authmode \tWIFI_AUTH_WPA3_PSK"); break;... case WIFI_AUTH_WPA2_WPA3_PSK: ESP_LOGI(TAG, "Authmode \tWIFI_AUTH_WPA2_WPA3_PSK"); break;... case WIFI_AUTH_WPA3_ENTERPRISE: ESP_LOGI(TAG, "Authmode \tWIFI_AUTH_WPA3_ENTERPRISE"); break;... case WIFI_AUTH_WPA2_WPA3_ENTERPRISE: ESP_LOGI(TAG, "Authmode \tWIFI_AUTH_WPA2_WPA3_ENTERPRISE"); break;... case WIFI_AUTH_WPA3_ENT_192: ESP_LOGI(TAG, "Authmode \tWIFI_AUTH_WPA3_ENT_192"); break;... default: ESP_LOGI(TAG, "Authmode \tWIFI_AUTH_UNKNOWN"); break;... }{...} }{ ... } static void print_cipher_type(int pairwise_cipher, int group_cipher) { switch (pairwise_cipher) { case WIFI_CIPHER_TYPE_NONE: ESP_LOGI(TAG, "Pairwise Cipher \tWIFI_CIPHER_TYPE_NONE"); break;... case WIFI_CIPHER_TYPE_WEP40: ESP_LOGI(TAG, "Pairwise Cipher \tWIFI_CIPHER_TYPE_WEP40"); break;... case WIFI_CIPHER_TYPE_WEP104: ESP_LOGI(TAG, "Pairwise Cipher \tWIFI_CIPHER_TYPE_WEP104"); break;... case WIFI_CIPHER_TYPE_TKIP: ESP_LOGI(TAG, "Pairwise Cipher \tWIFI_CIPHER_TYPE_TKIP"); break;... case WIFI_CIPHER_TYPE_CCMP: ESP_LOGI(TAG, "Pairwise Cipher \tWIFI_CIPHER_TYPE_CCMP"); break;... case WIFI_CIPHER_TYPE_TKIP_CCMP: ESP_LOGI(TAG, "Pairwise Cipher \tWIFI_CIPHER_TYPE_TKIP_CCMP"); break;... case WIFI_CIPHER_TYPE_AES_CMAC128: ESP_LOGI(TAG, "Pairwise Cipher \tWIFI_CIPHER_TYPE_AES_CMAC128"); break;... case WIFI_CIPHER_TYPE_SMS4: ESP_LOGI(TAG, "Pairwise Cipher \tWIFI_CIPHER_TYPE_SMS4"); break;... case WIFI_CIPHER_TYPE_GCMP: ESP_LOGI(TAG, "Pairwise Cipher \tWIFI_CIPHER_TYPE_GCMP"); break;... case WIFI_CIPHER_TYPE_GCMP256: ESP_LOGI(TAG, "Pairwise Cipher \tWIFI_CIPHER_TYPE_GCMP256"); break;... default: ESP_LOGI(TAG, "Pairwise Cipher \tWIFI_CIPHER_TYPE_UNKNOWN"); break;... }{...} switch (group_cipher) { case WIFI_CIPHER_TYPE_NONE: ESP_LOGI(TAG, "Group Cipher \tWIFI_CIPHER_TYPE_NONE"); break;... case WIFI_CIPHER_TYPE_WEP40: ESP_LOGI(TAG, "Group Cipher \tWIFI_CIPHER_TYPE_WEP40"); break;... case WIFI_CIPHER_TYPE_WEP104: ESP_LOGI(TAG, "Group Cipher \tWIFI_CIPHER_TYPE_WEP104"); break;... case WIFI_CIPHER_TYPE_TKIP: ESP_LOGI(TAG, "Group Cipher \tWIFI_CIPHER_TYPE_TKIP"); break;... case WIFI_CIPHER_TYPE_CCMP: ESP_LOGI(TAG, "Group Cipher \tWIFI_CIPHER_TYPE_CCMP"); break;... case WIFI_CIPHER_TYPE_TKIP_CCMP: ESP_LOGI(TAG, "Group Cipher \tWIFI_CIPHER_TYPE_TKIP_CCMP"); break;... case WIFI_CIPHER_TYPE_SMS4: ESP_LOGI(TAG, "Group Cipher \tWIFI_CIPHER_TYPE_SMS4"); break;... case WIFI_CIPHER_TYPE_GCMP: ESP_LOGI(TAG, "Group Cipher \tWIFI_CIPHER_TYPE_GCMP"); break;... case WIFI_CIPHER_TYPE_GCMP256: ESP_LOGI(TAG, "Group Cipher \tWIFI_CIPHER_TYPE_GCMP256"); break;... default: ESP_LOGI(TAG, "Group Cipher \tWIFI_CIPHER_TYPE_UNKNOWN"); break;... }{...} }{ ... } #ifdef USE_CHANNEL_BITMAP static void array_2_channel_bitmap(const uint8_t channel_list[], const uint8_t channel_list_size, wifi_scan_config_t *scan_config) { for(uint8_t i = 0; i < channel_list_size; i++) { uint8_t channel = channel_list[i]; scan_config->channel_bitmap.ghz_2_channels |= (1 << channel); }{...} }{...} /* ... */#endif /*USE_CHANNEL_BITMAP*/ /* Initialize Wi-Fi as sta and set scan method */ static void wifi_scan(void) { ESP_ERROR_CHECK(esp_netif_init()); ESP_ERROR_CHECK(esp_event_loop_create_default()); esp_netif_t *sta_netif = esp_netif_create_default_wifi_sta(); assert(sta_netif); wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); ESP_ERROR_CHECK(esp_wifi_init(&cfg)); uint16_t number = DEFAULT_SCAN_LIST_SIZE; wifi_ap_record_t ap_info[DEFAULT_SCAN_LIST_SIZE]; uint16_t ap_count = 0; memset(ap_info, 0, sizeof(ap_info)); ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA)); ESP_ERROR_CHECK(esp_wifi_start()); #ifdef USE_CHANNEL_BITMAP wifi_scan_config_t *scan_config = (wifi_scan_config_t *)calloc(1,sizeof(wifi_scan_config_t)); if (!scan_config) { ESP_LOGE(TAG, "Memory Allocation for scan config failed!"); return; }{...} array_2_channel_bitmap(channel_list, CHANNEL_LIST_SIZE, scan_config); esp_wifi_scan_start(scan_config, true); free(scan_config); /* ... */ #else esp_wifi_scan_start(NULL, true); #endif /*USE_CHANNEL_BITMAP*/ ESP_LOGI(TAG, "Max AP number ap_info can hold = %u", number); ESP_ERROR_CHECK(esp_wifi_scan_get_ap_num(&ap_count)); ESP_ERROR_CHECK(esp_wifi_scan_get_ap_records(&number, ap_info)); ESP_LOGI(TAG, "Total APs scanned = %u, actual AP number ap_info holds = %u", ap_count, number); for (int i = 0; i < number; i++) { ESP_LOGI(TAG, "SSID \t\t%s", ap_info[i].ssid); ESP_LOGI(TAG, "RSSI \t\t%d", ap_info[i].rssi); print_auth_mode(ap_info[i].authmode); if (ap_info[i].authmode != WIFI_AUTH_WEP) { print_cipher_type(ap_info[i].pairwise_cipher, ap_info[i].group_cipher); }{...} ESP_LOGI(TAG, "Channel \t\t%d", ap_info[i].primary); }{...} }{ ... } void app_main(void) { // Initialize NVS esp_err_t ret = nvs_flash_init(); if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) { ESP_ERROR_CHECK(nvs_flash_erase()); ret = nvs_flash_init(); }{...} ESP_ERROR_CHECK( ret ); wifi_scan(); }{ ... }
Details
Show:
from
Types: Columns:
This file uses the notable symbols shown below. Click anywhere in the file to view more details.