Select one of the symbols to view example projects that use it.
 
Outline
#include "freertos/FreeRTOS.h"
#include "freertos/event_groups.h"
#include "esp_wifi.h"
#include "esp_mac.h"
#include "esp_log.h"
#include "esp_wps.h"
#include "esp_event.h"
#include "nvs_flash.h"
#include <string.h>
#define WPS_MODE
#define EXAMPLE_WPS_PIN_VALUE
#define WPS_MODE
#define WPS_MODE
#define PIN2STR
#define PINSTR
#define EXAMPLE_ESP_WIFI_SSID
#define EXAMPLE_ESP_WIFI_PASS
#define EXAMPLE_ESP_WIFI_CHANNEL
#define EXAMPLE_MAX_STA_CONN
TAG
config
pin
wifi_event_handler(void *, esp_event_base_t, int32_t, void *)
start_wps_registrar()
app_main()
Files
loading (1/4)...
SourceVuESP-IDF Framework and Exampleswps_softap_registrar samplemain/wps.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
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
/* * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Unlicense OR CC0-1.0 *//* ... */ /* WPS Registrar example in softAP mode 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. *//* ... */ #include "freertos/FreeRTOS.h" #include "freertos/event_groups.h" #include "esp_wifi.h" #include "esp_mac.h" #include "esp_log.h" #include "esp_wps.h" #include "esp_event.h" #include "nvs_flash.h" #include <string.h>9 includes /*set wps mode via project configuration */ #if CONFIG_EXAMPLE_WPS_TYPE_PBC #define WPS_MODE WPS_TYPE_PBC #elif CONFIG_EXAMPLE_WPS_TYPE_PIN #if CONFIG_EXAMPLE_WPS_PIN_VALUE #define EXAMPLE_WPS_PIN_VALUE CONFIG_EXAMPLE_WPS_PIN_VALUE #endif #define WPS_MODE WPS_TYPE_PIN/* ... */ #else #define WPS_MODE WPS_TYPE_DISABLE #endif /*CONFIG_EXAMPLE_WPS_TYPE_PBC*/ #ifndef PIN2STR #define PIN2STR(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5], (a)[6], (a)[7] #define PINSTR "%c%c%c%c%c%c%c%c"/* ... */ #endif #define EXAMPLE_ESP_WIFI_SSID CONFIG_EXAMPLE_WIFI_SSID #define EXAMPLE_ESP_WIFI_PASS CONFIG_EXAMPLE_WIFI_PASSWORD #define EXAMPLE_ESP_WIFI_CHANNEL CONFIG_EXAMPLE_WIFI_CHANNEL #define EXAMPLE_MAX_STA_CONN CONFIG_EXAMPLE_MAX_STA_CONN static const char *TAG = "example_wps_registrar"; static esp_wps_config_t config = WPS_CONFIG_INIT_DEFAULT(WPS_MODE); static unsigned char pin[9]; static void wifi_event_handler(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data) { switch (event_id) { case WIFI_EVENT_AP_START: ESP_LOGI(TAG, "WIFI_EVENT_AP_START"); break;... case WIFI_EVENT_AP_STADISCONNECTED: { ESP_LOGI(TAG, "WIFI_EVENT_AP_STADISCONNECTED"); wifi_event_ap_stadisconnected_t* event = (wifi_event_ap_stadisconnected_t*) event_data; ESP_LOGI(TAG, "station "MACSTR" leave, AID=%d, reason=%d", MAC2STR(event->mac), event->aid, event->reason); }{...} break;... case WIFI_EVENT_AP_STACONNECTED: { ESP_LOGI(TAG, "WIFI_EVENT_AP_STACONNECTED"); wifi_event_ap_staconnected_t* event = (wifi_event_ap_staconnected_t*) event_data; ESP_LOGI(TAG, "station "MACSTR" join, AID=%d", MAC2STR(event->mac), event->aid); }{...} break;... case WIFI_EVENT_AP_WPS_RG_SUCCESS: { ESP_LOGI(TAG, "WIFI_EVENT_AP_WPS_RG_SUCCESS"); wifi_event_ap_wps_rg_success_t *evt = (wifi_event_ap_wps_rg_success_t *)event_data; ESP_LOGI(TAG, "station "MACSTR" WPS successful", MAC2STR(evt->peer_macaddr)); }{...} break;... case WIFI_EVENT_AP_WPS_RG_FAILED: { ESP_LOGI(TAG, "WIFI_EVENT_AP_WPS_RG_FAILED"); wifi_event_ap_wps_rg_fail_reason_t *evt = (wifi_event_ap_wps_rg_fail_reason_t *)event_data; ESP_LOGI(TAG, "station "MACSTR" WPS failed, reason=%d", MAC2STR(evt->peer_macaddr), evt->reason); ESP_ERROR_CHECK(esp_wifi_ap_wps_disable()); ESP_ERROR_CHECK(esp_wifi_ap_wps_enable(&config)); ESP_ERROR_CHECK(esp_wifi_ap_wps_start(pin)); }{...} break;... case WIFI_EVENT_AP_WPS_RG_TIMEOUT: { ESP_LOGI(TAG, "WIFI_EVENT_AP_WPS_RG_TIMEOUT"); ESP_ERROR_CHECK(esp_wifi_ap_wps_disable()); ESP_ERROR_CHECK(esp_wifi_ap_wps_enable(&config)); ESP_ERROR_CHECK(esp_wifi_ap_wps_start(pin)); }{...} break;... case WIFI_EVENT_AP_WPS_RG_PIN: { ESP_LOGI(TAG, "WIFI_EVENT_AP_WPS_RG_PIN"); /* display the PIN code */ wifi_event_ap_wps_rg_pin_t* event = (wifi_event_ap_wps_rg_pin_t *) event_data; ESP_LOGI(TAG, "WPS_PIN = " PINSTR, PIN2STR(event->pin_code)); }{...} break;... default: break;... }{...} }{ ... } /*init wifi as sta and start wps*/ static void start_wps_registrar(void) { ESP_ERROR_CHECK(esp_netif_init()); ESP_ERROR_CHECK(esp_event_loop_create_default()); esp_netif_create_default_wifi_ap(); wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); ESP_ERROR_CHECK(esp_wifi_init(&cfg)); ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &wifi_event_handler, NULL)); wifi_config_t wifi_config = { .ap = { .ssid = EXAMPLE_ESP_WIFI_SSID, .ssid_len = strlen(EXAMPLE_ESP_WIFI_SSID), .channel = EXAMPLE_ESP_WIFI_CHANNEL, .password = EXAMPLE_ESP_WIFI_PASS, .max_connection = EXAMPLE_MAX_STA_CONN, .authmode = WIFI_AUTH_WPA2_PSK, .pmf_cfg = { .required = false, }{...}, }{...}, }{...}; if (strlen(EXAMPLE_ESP_WIFI_PASS) == 0) { wifi_config.ap.authmode = WIFI_AUTH_OPEN; }{...} ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_AP)); ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_AP, &wifi_config)); ESP_ERROR_CHECK(esp_wifi_start()); ESP_LOGI(TAG, "start wps..."); ESP_ERROR_CHECK(esp_wifi_ap_wps_enable(&config)); #if EXAMPLE_WPS_PIN_VALUE ESP_LOGI(TAG, "Staring WPS registrar with user specified pin %s", pin); snprintf((char *)pin, 9, "%08d", EXAMPLE_WPS_PIN_VALUE); ESP_ERROR_CHECK(esp_wifi_ap_wps_start(pin));/* ... */ #else if (config.wps_type == WPS_TYPE_PBC) { ESP_LOGI(TAG, "Staring WPS registrar in PBC mode"); }{...} else { ESP_LOGI(TAG, "Staring WPS registrar with random generated pin"); }{...} ESP_ERROR_CHECK(esp_wifi_ap_wps_start(NULL));/* ... */ #endif }{ ... } void app_main(void) { /* Initialize NVS — it is used to store PHY calibration data */ 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 ); start_wps_registrar(); }{ ... }
Details
Show:
from
Types: Columns:
This file uses the notable symbols shown below. Click anywhere in the file to view more details.