提交 d15e1b0e 编写于 作者: M me-no-dev

fix WiFi

上级 833e1394
...@@ -190,7 +190,7 @@ extern void IRAM_ATTR __pinMode(uint8_t pin, uint8_t mode) ...@@ -190,7 +190,7 @@ extern void IRAM_ATTR __pinMode(uint8_t pin, uint8_t mode)
} }
//RTC pins PULL settings //RTC pins PULL settings
if(rtc_reg) { if(esp32_gpioMux[pin].rtc != -1) {
ESP_REG(rtc_reg) = ESP_REG(rtc_reg) & ~(rtc_io_desc[pin].mux); ESP_REG(rtc_reg) = ESP_REG(rtc_reg) & ~(rtc_io_desc[pin].mux);
if(mode & PULLUP) { if(mode & PULLUP) {
ESP_REG(rtc_reg) = (ESP_REG(rtc_reg) | rtc_io_desc[pin].pullup) & ~(rtc_io_desc[pin].pulldown); ESP_REG(rtc_reg) = (ESP_REG(rtc_reg) | rtc_io_desc[pin].pullup) & ~(rtc_io_desc[pin].pulldown);
......
...@@ -10,15 +10,15 @@ static bool eth_connected = false; ...@@ -10,15 +10,15 @@ static bool eth_connected = false;
void WiFiEvent(WiFiEvent_t event) void WiFiEvent(WiFiEvent_t event)
{ {
switch (event) { switch (event) {
case SYSTEM_EVENT_ETH_START: case ARDUINO_EVENT_ETH_START:
Serial.println("ETH Started"); Serial.println("ETH Started");
//set eth hostname here //set eth hostname here
ETH.setHostname("esp32-ethernet"); ETH.setHostname("esp32-ethernet");
break; break;
case SYSTEM_EVENT_ETH_CONNECTED: case ARDUINO_EVENT_ETH_CONNECTED:
Serial.println("ETH Connected"); Serial.println("ETH Connected");
break; break;
case SYSTEM_EVENT_ETH_GOT_IP: case ARDUINO_EVENT_ETH_GOT_IP:
Serial.print("ETH MAC: "); Serial.print("ETH MAC: ");
Serial.print(ETH.macAddress()); Serial.print(ETH.macAddress());
Serial.print(", IPv4: "); Serial.print(", IPv4: ");
...@@ -31,11 +31,11 @@ void WiFiEvent(WiFiEvent_t event) ...@@ -31,11 +31,11 @@ void WiFiEvent(WiFiEvent_t event)
Serial.println("Mbps"); Serial.println("Mbps");
eth_connected = true; eth_connected = true;
break; break;
case SYSTEM_EVENT_ETH_DISCONNECTED: case ARDUINO_EVENT_ETH_DISCONNECTED:
Serial.println("ETH Disconnected"); Serial.println("ETH Disconnected");
eth_connected = false; eth_connected = false;
break; break;
case SYSTEM_EVENT_ETH_STOP: case ARDUINO_EVENT_ETH_STOP:
Serial.println("ETH Stopped"); Serial.println("ETH Stopped");
eth_connected = false; eth_connected = false;
break; break;
......
...@@ -16,15 +16,15 @@ static bool eth_connected = false; ...@@ -16,15 +16,15 @@ static bool eth_connected = false;
void WiFiEvent(WiFiEvent_t event) void WiFiEvent(WiFiEvent_t event)
{ {
switch (event) { switch (event) {
case SYSTEM_EVENT_ETH_START: case ARDUINO_EVENT_ETH_START:
Serial.println("ETH Started"); Serial.println("ETH Started");
//set eth hostname here //set eth hostname here
ETH.setHostname("esp32-ethernet"); ETH.setHostname("esp32-ethernet");
break; break;
case SYSTEM_EVENT_ETH_CONNECTED: case ARDUINO_EVENT_ETH_CONNECTED:
Serial.println("ETH Connected"); Serial.println("ETH Connected");
break; break;
case SYSTEM_EVENT_ETH_GOT_IP: case ARDUINO_EVENT_ETH_GOT_IP:
Serial.print("ETH MAC: "); Serial.print("ETH MAC: ");
Serial.print(ETH.macAddress()); Serial.print(ETH.macAddress());
Serial.print(", IPv4: "); Serial.print(", IPv4: ");
...@@ -37,11 +37,11 @@ void WiFiEvent(WiFiEvent_t event) ...@@ -37,11 +37,11 @@ void WiFiEvent(WiFiEvent_t event)
Serial.println("Mbps"); Serial.println("Mbps");
eth_connected = true; eth_connected = true;
break; break;
case SYSTEM_EVENT_ETH_DISCONNECTED: case ARDUINO_EVENT_ETH_DISCONNECTED:
Serial.println("ETH Disconnected"); Serial.println("ETH Disconnected");
eth_connected = false; eth_connected = false;
break; break;
case SYSTEM_EVENT_ETH_STOP: case ARDUINO_EVENT_ETH_STOP:
Serial.println("ETH Stopped"); Serial.println("ETH Stopped");
eth_connected = false; eth_connected = false;
break; break;
......
...@@ -47,39 +47,39 @@ String wpspin2string(uint8_t a[]){ ...@@ -47,39 +47,39 @@ String wpspin2string(uint8_t a[]){
return (String)wps_pin; return (String)wps_pin;
} }
void WiFiEvent(WiFiEvent_t event, system_event_info_t info){ void WiFiEvent(WiFiEvent_t event, arduino_event_info_t info){
switch(event){ switch(event){
case SYSTEM_EVENT_STA_START: case ARDUINO_EVENT_WIFI_STA_START:
Serial.println("Station Mode Started"); Serial.println("Station Mode Started");
break; break;
case SYSTEM_EVENT_STA_GOT_IP: case ARDUINO_EVENT_WIFI_STA_GOT_IP:
Serial.println("Connected to :" + String(WiFi.SSID())); Serial.println("Connected to :" + String(WiFi.SSID()));
Serial.print("Got IP: "); Serial.print("Got IP: ");
Serial.println(WiFi.localIP()); Serial.println(WiFi.localIP());
break; break;
case SYSTEM_EVENT_STA_DISCONNECTED: case ARDUINO_EVENT_WIFI_STA_DISCONNECTED:
Serial.println("Disconnected from station, attempting reconnection"); Serial.println("Disconnected from station, attempting reconnection");
WiFi.reconnect(); WiFi.reconnect();
break; break;
case SYSTEM_EVENT_STA_WPS_ER_SUCCESS: case ARDUINO_EVENT_WPS_ER_SUCCESS:
Serial.println("WPS Successful, stopping WPS and connecting to: " + String(WiFi.SSID())); Serial.println("WPS Successfull, stopping WPS and connecting to: " + String(WiFi.SSID()));
esp_wifi_wps_disable(); esp_wifi_wps_disable();
delay(10); delay(10);
WiFi.begin(); WiFi.begin();
break; break;
case SYSTEM_EVENT_STA_WPS_ER_FAILED: case ARDUINO_EVENT_WPS_ER_FAILED:
Serial.println("WPS Failed, retrying"); Serial.println("WPS Failed, retrying");
esp_wifi_wps_disable(); esp_wifi_wps_disable();
esp_wifi_wps_enable(&config); esp_wifi_wps_enable(&config);
esp_wifi_wps_start(0); esp_wifi_wps_start(0);
break; break;
case SYSTEM_EVENT_STA_WPS_ER_TIMEOUT: case ARDUINO_EVENT_WPS_ER_TIMEOUT:
Serial.println("WPS Timeout, retrying"); Serial.println("WPS Timedout, retrying");
esp_wifi_wps_disable(); esp_wifi_wps_disable();
esp_wifi_wps_enable(&config); esp_wifi_wps_enable(&config);
esp_wifi_wps_start(0); esp_wifi_wps_start(0);
break; break;
case SYSTEM_EVENT_STA_WPS_ER_PIN: case ARDUINO_EVENT_WPS_ER_PIN:
Serial.println("WPS_PIN = " + wpspin2string(info.sta_er_pin.pin_code)); Serial.println("WPS_PIN = " + wpspin2string(info.sta_er_pin.pin_code));
break; break;
default: default:
......
...@@ -75,33 +75,33 @@ void onButton(){ ...@@ -75,33 +75,33 @@ void onButton(){
void WiFiEvent(WiFiEvent_t event){ void WiFiEvent(WiFiEvent_t event){
switch(event) { switch(event) {
case SYSTEM_EVENT_AP_START: case ARDUINO_EVENT_WIFI_AP_START:
Serial.println("AP Started"); Serial.println("AP Started");
WiFi.softAPsetHostname(AP_SSID); WiFi.softAPsetHostname(AP_SSID);
break; break;
case SYSTEM_EVENT_AP_STOP: case ARDUINO_EVENT_WIFI_AP_STOP:
Serial.println("AP Stopped"); Serial.println("AP Stopped");
break; break;
case SYSTEM_EVENT_STA_START: case ARDUINO_EVENT_WIFI_STA_START:
Serial.println("STA Started"); Serial.println("STA Started");
WiFi.setHostname(AP_SSID); WiFi.setHostname(AP_SSID);
break; break;
case SYSTEM_EVENT_STA_CONNECTED: case ARDUINO_EVENT_WIFI_STA_CONNECTED:
Serial.println("STA Connected"); Serial.println("STA Connected");
WiFi.enableIpV6(); WiFi.enableIpV6();
break; break;
case SYSTEM_EVENT_AP_STA_GOT_IP6: case ARDUINO_EVENT_WIFI_AP_STA_GOT_IP6:
Serial.print("STA IPv6: "); Serial.print("STA IPv6: ");
Serial.println(WiFi.localIPv6()); Serial.println(WiFi.localIPv6());
break; break;
case SYSTEM_EVENT_STA_GOT_IP: case ARDUINO_EVENT_WIFI_STA_GOT_IP:
Serial.print("STA IPv4: "); Serial.print("STA IPv4: ");
Serial.println(WiFi.localIP()); Serial.println(WiFi.localIP());
break; break;
case SYSTEM_EVENT_STA_DISCONNECTED: case ARDUINO_EVENT_WIFI_STA_DISCONNECTED:
Serial.println("STA Disconnected"); Serial.println("STA Disconnected");
break; break;
case SYSTEM_EVENT_STA_STOP: case ARDUINO_EVENT_WIFI_STA_STOP:
Serial.println("STA Stopped"); Serial.println("STA Stopped");
break; break;
default: default:
......
...@@ -6,32 +6,34 @@ ...@@ -6,32 +6,34 @@
/* /*
* WiFi Events * WiFi Events
0 SYSTEM_EVENT_WIFI_READY < ESP32 WiFi ready 0 ARDUINO_EVENT_WIFI_READY < ESP32 WiFi ready
1 SYSTEM_EVENT_SCAN_DONE < ESP32 finish scanning AP 1 ARDUINO_EVENT_WIFI_SCAN_DONE < ESP32 finish scanning AP
2 SYSTEM_EVENT_STA_START < ESP32 station start 2 ARDUINO_EVENT_WIFI_STA_START < ESP32 station start
3 SYSTEM_EVENT_STA_STOP < ESP32 station stop 3 ARDUINO_EVENT_WIFI_STA_STOP < ESP32 station stop
4 SYSTEM_EVENT_STA_CONNECTED < ESP32 station connected to AP 4 ARDUINO_EVENT_WIFI_STA_CONNECTED < ESP32 station connected to AP
5 SYSTEM_EVENT_STA_DISCONNECTED < ESP32 station disconnected from AP 5 ARDUINO_EVENT_WIFI_STA_DISCONNECTED < ESP32 station disconnected from AP
6 SYSTEM_EVENT_STA_AUTHMODE_CHANGE < the auth mode of AP connected by ESP32 station changed 6 ARDUINO_EVENT_WIFI_STA_AUTHMODE_CHANGE < the auth mode of AP connected by ESP32 station changed
7 SYSTEM_EVENT_STA_GOT_IP < ESP32 station got IP from connected AP 7 ARDUINO_EVENT_WIFI_STA_GOT_IP < ESP32 station got IP from connected AP
8 SYSTEM_EVENT_STA_LOST_IP < ESP32 station lost IP and the IP is reset to 0 8 ARDUINO_EVENT_WIFI_STA_LOST_IP < ESP32 station lost IP and the IP is reset to 0
9 SYSTEM_EVENT_STA_WPS_ER_SUCCESS < ESP32 station wps succeeds in enrollee mode 9 ARDUINO_EVENT_WPS_ER_SUCCESS < ESP32 station wps succeeds in enrollee mode
10 SYSTEM_EVENT_STA_WPS_ER_FAILED < ESP32 station wps fails in enrollee mode 10 ARDUINO_EVENT_WPS_ER_FAILED < ESP32 station wps fails in enrollee mode
11 SYSTEM_EVENT_STA_WPS_ER_TIMEOUT < ESP32 station wps timeout in enrollee mode 11 ARDUINO_EVENT_WPS_ER_TIMEOUT < ESP32 station wps timeout in enrollee mode
12 SYSTEM_EVENT_STA_WPS_ER_PIN < ESP32 station wps pin code in enrollee mode 12 ARDUINO_EVENT_WPS_ER_PIN < ESP32 station wps pin code in enrollee mode
13 SYSTEM_EVENT_AP_START < ESP32 soft-AP start 13 ARDUINO_EVENT_WIFI_AP_START < ESP32 soft-AP start
14 SYSTEM_EVENT_AP_STOP < ESP32 soft-AP stop 14 ARDUINO_EVENT_WIFI_AP_STOP < ESP32 soft-AP stop
15 SYSTEM_EVENT_AP_STACONNECTED < a station connected to ESP32 soft-AP 15 ARDUINO_EVENT_WIFI_AP_STACONNECTED < a station connected to ESP32 soft-AP
16 SYSTEM_EVENT_AP_STADISCONNECTED < a station disconnected from ESP32 soft-AP 16 ARDUINO_EVENT_WIFI_AP_STADISCONNECTED < a station disconnected from ESP32 soft-AP
17 SYSTEM_EVENT_AP_STAIPASSIGNED < ESP32 soft-AP assign an IP to a connected station 17 ARDUINO_EVENT_WIFI_AP_STAIPASSIGNED < ESP32 soft-AP assign an IP to a connected station
18 SYSTEM_EVENT_AP_PROBEREQRECVED < Receive probe request packet in soft-AP interface 18 ARDUINO_EVENT_WIFI_AP_PROBEREQRECVED < Receive probe request packet in soft-AP interface
19 SYSTEM_EVENT_GOT_IP6 < ESP32 station or ap or ethernet interface v6IP addr is preferred 19 ARDUINO_EVENT_WIFI_AP_GOT_IP6 < ESP32 ap interface v6IP addr is preferred
20 SYSTEM_EVENT_ETH_START < ESP32 ethernet start 19 ARDUINO_EVENT_WIFI_STA_GOT_IP6 < ESP32 station interface v6IP addr is preferred
21 SYSTEM_EVENT_ETH_STOP < ESP32 ethernet stop 20 ARDUINO_EVENT_ETH_START < ESP32 ethernet start
22 SYSTEM_EVENT_ETH_CONNECTED < ESP32 ethernet phy link up 21 ARDUINO_EVENT_ETH_STOP < ESP32 ethernet stop
23 SYSTEM_EVENT_ETH_DISCONNECTED < ESP32 ethernet phy link down 22 ARDUINO_EVENT_ETH_CONNECTED < ESP32 ethernet phy link up
24 SYSTEM_EVENT_ETH_GOT_IP < ESP32 ethernet got IP from connected AP 23 ARDUINO_EVENT_ETH_DISCONNECTED < ESP32 ethernet phy link down
25 SYSTEM_EVENT_MAX 24 ARDUINO_EVENT_ETH_GOT_IP < ESP32 ethernet got IP from connected AP
19 ARDUINO_EVENT_ETH_GOT_IP6 < ESP32 ethernet interface v6IP addr is preferred
25 ARDUINO_EVENT_MAX
*/ */
#include <WiFi.h> #include <WiFi.h>
...@@ -45,80 +47,86 @@ void WiFiEvent(WiFiEvent_t event) ...@@ -45,80 +47,86 @@ void WiFiEvent(WiFiEvent_t event)
Serial.printf("[WiFi-event] event: %d\n", event); Serial.printf("[WiFi-event] event: %d\n", event);
switch (event) { switch (event) {
case SYSTEM_EVENT_WIFI_READY: case ARDUINO_EVENT_WIFI_READY:
Serial.println("WiFi interface ready"); Serial.println("WiFi interface ready");
break; break;
case SYSTEM_EVENT_SCAN_DONE: case ARDUINO_EVENT_WIFI_SCAN_DONE:
Serial.println("Completed scan for access points"); Serial.println("Completed scan for access points");
break; break;
case SYSTEM_EVENT_STA_START: case ARDUINO_EVENT_WIFI_STA_START:
Serial.println("WiFi client started"); Serial.println("WiFi client started");
break; break;
case SYSTEM_EVENT_STA_STOP: case ARDUINO_EVENT_WIFI_STA_STOP:
Serial.println("WiFi clients stopped"); Serial.println("WiFi clients stopped");
break; break;
case SYSTEM_EVENT_STA_CONNECTED: case ARDUINO_EVENT_WIFI_STA_CONNECTED:
Serial.println("Connected to access point"); Serial.println("Connected to access point");
break; break;
case SYSTEM_EVENT_STA_DISCONNECTED: case ARDUINO_EVENT_WIFI_STA_DISCONNECTED:
Serial.println("Disconnected from WiFi access point"); Serial.println("Disconnected from WiFi access point");
break; break;
case SYSTEM_EVENT_STA_AUTHMODE_CHANGE: case ARDUINO_EVENT_WIFI_STA_AUTHMODE_CHANGE:
Serial.println("Authentication mode of access point has changed"); Serial.println("Authentication mode of access point has changed");
break; break;
case SYSTEM_EVENT_STA_GOT_IP: case ARDUINO_EVENT_WIFI_STA_GOT_IP:
Serial.print("Obtained IP address: "); Serial.print("Obtained IP address: ");
Serial.println(WiFi.localIP()); Serial.println(WiFi.localIP());
break; break;
case SYSTEM_EVENT_STA_LOST_IP: case ARDUINO_EVENT_WIFI_STA_LOST_IP:
Serial.println("Lost IP address and IP address is reset to 0"); Serial.println("Lost IP address and IP address is reset to 0");
break; break;
case SYSTEM_EVENT_STA_WPS_ER_SUCCESS: case ARDUINO_EVENT_WPS_ER_SUCCESS:
Serial.println("WiFi Protected Setup (WPS): succeeded in enrollee mode"); Serial.println("WiFi Protected Setup (WPS): succeeded in enrollee mode");
break; break;
case SYSTEM_EVENT_STA_WPS_ER_FAILED: case ARDUINO_EVENT_WPS_ER_FAILED:
Serial.println("WiFi Protected Setup (WPS): failed in enrollee mode"); Serial.println("WiFi Protected Setup (WPS): failed in enrollee mode");
break; break;
case SYSTEM_EVENT_STA_WPS_ER_TIMEOUT: case ARDUINO_EVENT_WPS_ER_TIMEOUT:
Serial.println("WiFi Protected Setup (WPS): timeout in enrollee mode"); Serial.println("WiFi Protected Setup (WPS): timeout in enrollee mode");
break; break;
case SYSTEM_EVENT_STA_WPS_ER_PIN: case ARDUINO_EVENT_WPS_ER_PIN:
Serial.println("WiFi Protected Setup (WPS): pin code in enrollee mode"); Serial.println("WiFi Protected Setup (WPS): pin code in enrollee mode");
break; break;
case SYSTEM_EVENT_AP_START: case ARDUINO_EVENT_WIFI_AP_START:
Serial.println("WiFi access point started"); Serial.println("WiFi access point started");
break; break;
case SYSTEM_EVENT_AP_STOP: case ARDUINO_EVENT_WIFI_AP_STOP:
Serial.println("WiFi access point stopped"); Serial.println("WiFi access point stopped");
break; break;
case SYSTEM_EVENT_AP_STACONNECTED: case ARDUINO_EVENT_WIFI_AP_STACONNECTED:
Serial.println("Client connected"); Serial.println("Client connected");
break; break;
case SYSTEM_EVENT_AP_STADISCONNECTED: case ARDUINO_EVENT_WIFI_AP_STADISCONNECTED:
Serial.println("Client disconnected"); Serial.println("Client disconnected");
break; break;
case SYSTEM_EVENT_AP_STAIPASSIGNED: case ARDUINO_EVENT_WIFI_AP_STAIPASSIGNED:
Serial.println("Assigned IP address to client"); Serial.println("Assigned IP address to client");
break; break;
case SYSTEM_EVENT_AP_PROBEREQRECVED: case ARDUINO_EVENT_WIFI_AP_PROBEREQRECVED:
Serial.println("Received probe request"); Serial.println("Received probe request");
break; break;
case SYSTEM_EVENT_GOT_IP6: case ARDUINO_EVENT_WIFI_AP_GOT_IP6:
Serial.println("IPv6 is preferred"); Serial.println("AP IPv6 is preferred");
break; break;
case SYSTEM_EVENT_ETH_START: case ARDUINO_EVENT_WIFI_STA_GOT_IP6:
Serial.println("STA IPv6 is preferred");
break;
case ARDUINO_EVENT_ETH_GOT_IP6:
Serial.println("Ethernet IPv6 is preferred");
break;
case ARDUINO_EVENT_ETH_START:
Serial.println("Ethernet started"); Serial.println("Ethernet started");
break; break;
case SYSTEM_EVENT_ETH_STOP: case ARDUINO_EVENT_ETH_STOP:
Serial.println("Ethernet stopped"); Serial.println("Ethernet stopped");
break; break;
case SYSTEM_EVENT_ETH_CONNECTED: case ARDUINO_EVENT_ETH_CONNECTED:
Serial.println("Ethernet connected"); Serial.println("Ethernet connected");
break; break;
case SYSTEM_EVENT_ETH_DISCONNECTED: case ARDUINO_EVENT_ETH_DISCONNECTED:
Serial.println("Ethernet disconnected"); Serial.println("Ethernet disconnected");
break; break;
case SYSTEM_EVENT_ETH_GOT_IP: case ARDUINO_EVENT_ETH_GOT_IP:
Serial.println("Obtained IP address"); Serial.println("Obtained IP address");
break; break;
default: break; default: break;
...@@ -142,11 +150,11 @@ void setup() ...@@ -142,11 +150,11 @@ void setup()
// Examples of different ways to register wifi events // Examples of different ways to register wifi events
WiFi.onEvent(WiFiEvent); WiFi.onEvent(WiFiEvent);
WiFi.onEvent(WiFiGotIP, WiFiEvent_t::SYSTEM_EVENT_STA_GOT_IP); WiFi.onEvent(WiFiGotIP, WiFiEvent_t::ARDUINO_EVENT_WIFI_STA_GOT_IP);
WiFiEventId_t eventID = WiFi.onEvent([](WiFiEvent_t event, WiFiEventInfo_t info){ WiFiEventId_t eventID = WiFi.onEvent([](WiFiEvent_t event, WiFiEventInfo_t info){
Serial.print("WiFi lost connection. Reason: "); Serial.print("WiFi lost connection. Reason: ");
Serial.println(info.disconnected.reason); Serial.println(info.disconnected.reason);
}, WiFiEvent_t::SYSTEM_EVENT_STA_DISCONNECTED); }, WiFiEvent_t::ARDUINO_EVENT_WIFI_STA_DISCONNECTED);
// Remove WiFi event // Remove WiFi event
Serial.print("WiFi Event ID: "); Serial.print("WiFi Event ID: ");
......
...@@ -67,33 +67,34 @@ void wifiConnectedLoop(){ ...@@ -67,33 +67,34 @@ void wifiConnectedLoop(){
void WiFiEvent(WiFiEvent_t event){ void WiFiEvent(WiFiEvent_t event){
switch(event) { switch(event) {
case SYSTEM_EVENT_AP_START: case ARDUINO_EVENT_WIFI_AP_START:
//can set ap hostname here //can set ap hostname here
WiFi.softAPsetHostname(AP_SSID); WiFi.softAPsetHostname(AP_SSID);
//enable ap ipv6 here //enable ap ipv6 here
WiFi.softAPenableIpV6(); WiFi.softAPenableIpV6();
break; break;
case SYSTEM_EVENT_STA_START: case ARDUINO_EVENT_WIFI_STA_START:
//set sta hostname here //set sta hostname here
WiFi.setHostname(AP_SSID); WiFi.setHostname(AP_SSID);
break; break;
case SYSTEM_EVENT_STA_CONNECTED: case ARDUINO_EVENT_WIFI_STA_CONNECTED:
//enable sta ipv6 here //enable sta ipv6 here
WiFi.enableIpV6(); WiFi.enableIpV6();
break; break;
case SYSTEM_EVENT_AP_STA_GOT_IP6: case ARDUINO_EVENT_WIFI_STA_GOT_IP6:
//both interfaces get the same event
Serial.print("STA IPv6: "); Serial.print("STA IPv6: ");
Serial.println(WiFi.localIPv6()); Serial.println(WiFi.localIPv6());
break;
case ARDUINO_EVENT_WIFI_AP_GOT_IP6:
Serial.print("AP IPv6: "); Serial.print("AP IPv6: ");
Serial.println(WiFi.softAPIPv6()); Serial.println(WiFi.softAPIPv6());
break; break;
case SYSTEM_EVENT_STA_GOT_IP: case ARDUINO_EVENT_WIFI_STA_GOT_IP:
wifiOnConnect(); wifiOnConnect();
wifi_connected = true; wifi_connected = true;
break; break;
case SYSTEM_EVENT_STA_DISCONNECTED: case ARDUINO_EVENT_WIFI_STA_DISCONNECTED:
wifi_connected = false; wifi_connected = false;
wifiOnDisconnect(); wifiOnDisconnect();
break; break;
......
...@@ -58,7 +58,7 @@ void connectToWiFi(const char * ssid, const char * pwd){ ...@@ -58,7 +58,7 @@ void connectToWiFi(const char * ssid, const char * pwd){
//wifi event handler //wifi event handler
void WiFiEvent(WiFiEvent_t event){ void WiFiEvent(WiFiEvent_t event){
switch(event) { switch(event) {
case SYSTEM_EVENT_STA_GOT_IP: case ARDUINO_EVENT_WIFI_STA_GOT_IP:
//When connected set //When connected set
Serial.print("WiFi connected! IP address: "); Serial.print("WiFi connected! IP address: ");
Serial.println(WiFi.localIP()); Serial.println(WiFi.localIP());
...@@ -67,7 +67,7 @@ void WiFiEvent(WiFiEvent_t event){ ...@@ -67,7 +67,7 @@ void WiFiEvent(WiFiEvent_t event){
udp.begin(WiFi.localIP(),udpPort); udp.begin(WiFi.localIP(),udpPort);
connected = true; connected = true;
break; break;
case SYSTEM_EVENT_STA_DISCONNECTED: case ARDUINO_EVENT_WIFI_STA_DISCONNECTED:
Serial.println("WiFi lost connection"); Serial.println("WiFi lost connection");
connected = false; connected = false;
break; break;
......
...@@ -70,34 +70,6 @@ extern void tcpipInit(); ...@@ -70,34 +70,6 @@ extern void tcpipInit();
// Event handler for Ethernet
void ETHClass::eth_event_handler(void *arg, esp_event_base_t event_base, int32_t event_id, void *event_data)
{
system_event_t event;
switch (event_id) {
case ETHERNET_EVENT_CONNECTED:
event.event_id = SYSTEM_EVENT_ETH_CONNECTED;
((ETHClass*)(arg))->eth_link = ETH_LINK_UP;
break;
case ETHERNET_EVENT_DISCONNECTED:
event.event_id = SYSTEM_EVENT_ETH_DISCONNECTED;
((ETHClass*)(arg))->eth_link = ETH_LINK_DOWN;
break;
case ETHERNET_EVENT_START:
event.event_id = SYSTEM_EVENT_ETH_START;
((ETHClass*)(arg))->started = true;
break;
case ETHERNET_EVENT_STOP:
event.event_id = SYSTEM_EVENT_ETH_STOP;
((ETHClass*)(arg))->started = false;
break;
default:
break;
}
WiFi._eventCallback(arg, &event);
}
#else #else
static int _eth_phy_mdc_pin = -1; static int _eth_phy_mdc_pin = -1;
static int _eth_phy_mdio_pin = -1; static int _eth_phy_mdio_pin = -1;
...@@ -144,9 +116,6 @@ bool ETHClass::begin(uint8_t phy_addr, int power, int mdc, int mdio, eth_phy_typ ...@@ -144,9 +116,6 @@ bool ETHClass::begin(uint8_t phy_addr, int power, int mdc, int mdio, eth_phy_typ
tcpipInit(); tcpipInit();
tcpip_adapter_set_default_eth_handlers(); tcpip_adapter_set_default_eth_handlers();
esp_event_handler_register(ETH_EVENT, ESP_EVENT_ANY_ID, eth_event_handler, this);
//ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_ETH_GOT_IP, &got_ip_event_handler, NULL));
esp_eth_mac_t *eth_mac = NULL; esp_eth_mac_t *eth_mac = NULL;
#if CONFIG_ETH_SPI_ETHERNET_DM9051 #if CONFIG_ETH_SPI_ETHERNET_DM9051
if(type == ETH_PHY_DM9051){ if(type == ETH_PHY_DM9051){
......
...@@ -46,6 +46,8 @@ extern "C" { ...@@ -46,6 +46,8 @@ extern "C" {
// ---------------------------------------------------- Private functions ------------------------------------------------ // ---------------------------------------------------- Private functions ------------------------------------------------
// ----------------------------------------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------------------------------------
esp_netif_t* get_esp_interface_netif(esp_interface_t interface);
esp_err_t set_esp_interface_ip(esp_interface_t interface, IPAddress local_ip=IPAddress(), IPAddress gateway=IPAddress(), IPAddress subnet=IPAddress());
static bool softap_config_equal(const wifi_config_t& lhs, const wifi_config_t& rhs); static bool softap_config_equal(const wifi_config_t& lhs, const wifi_config_t& rhs);
...@@ -76,6 +78,25 @@ static bool softap_config_equal(const wifi_config_t& lhs, const wifi_config_t& r ...@@ -76,6 +78,25 @@ static bool softap_config_equal(const wifi_config_t& lhs, const wifi_config_t& r
return true; return true;
} }
void wifi_softap_config(wifi_config_t *wifi_config, const char * ssid=NULL, const char * password=NULL, uint8_t channel=6, wifi_auth_mode_t authmode=WIFI_AUTH_WPA_WPA2_PSK, uint8_t ssid_hidden=0, uint8_t max_connections=4, uint16_t beacon_interval=100){
wifi_config->ap.channel = channel;
wifi_config->ap.max_connection = max_connections;
wifi_config->ap.beacon_interval = beacon_interval;
wifi_config->ap.ssid_hidden = ssid_hidden;
wifi_config->ap.authmode = WIFI_AUTH_OPEN;
wifi_config->ap.ssid_len = 0;
wifi_config->ap.ssid[0] = 0;
wifi_config->ap.password[0] = 0;
if(ssid != NULL && ssid[0] != 0){
snprintf((char*)wifi_config->ap.ssid, 32, ssid);
wifi_config->ap.ssid_len = strlen(ssid);
if(password != NULL && password[0] != 0){
wifi_config->ap.authmode = authmode;
snprintf((char*)wifi_config->ap.password, 64, password);
}
}
}
// ----------------------------------------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------------------------------------
// ----------------------------------------------------- AP function ----------------------------------------------------- // ----------------------------------------------------- AP function -----------------------------------------------------
// ----------------------------------------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------------------------------------
...@@ -110,29 +131,21 @@ bool WiFiAPClass::softAP(const char* ssid, const char* passphrase, int channel, ...@@ -110,29 +131,21 @@ bool WiFiAPClass::softAP(const char* ssid, const char* passphrase, int channel,
return false; return false;
} }
esp_wifi_start();
wifi_config_t conf; wifi_config_t conf;
strlcpy(reinterpret_cast<char*>(conf.ap.ssid), ssid, sizeof(conf.ap.ssid));
conf.ap.channel = channel;
conf.ap.ssid_len = strlen(reinterpret_cast<char *>(conf.ap.ssid));
conf.ap.ssid_hidden = ssid_hidden;
conf.ap.max_connection = max_connection;
conf.ap.beacon_interval = 100;
if(!passphrase || strlen(passphrase) == 0) {
conf.ap.authmode = WIFI_AUTH_OPEN;
*conf.ap.password = 0;
} else {
conf.ap.authmode = WIFI_AUTH_WPA2_PSK;
strlcpy(reinterpret_cast<char*>(conf.ap.password), passphrase, sizeof(conf.ap.password));
}
wifi_config_t conf_current; wifi_config_t conf_current;
esp_wifi_get_config(WIFI_IF_AP, &conf_current); wifi_softap_config(&conf, ssid, passphrase, channel, WIFI_AUTH_WPA_WPA2_PSK, ssid_hidden, max_connection);
if(!softap_config_equal(conf, conf_current) && esp_wifi_set_config(WIFI_IF_AP, &conf) != ESP_OK) { esp_err_t err = esp_wifi_get_config(WIFI_IF_AP, &conf_current);
if(err){
log_e("get AP config failed");
return false; return false;
} }
if(!softap_config_equal(conf, conf_current)) {
err = esp_wifi_set_config(WIFI_IF_AP, &conf);
if(err){
log_e("set AP config failed");
return false;
}
}
return true; return true;
} }
...@@ -161,34 +174,15 @@ String WiFiAPClass::softAPSSID() const ...@@ -161,34 +174,15 @@ String WiFiAPClass::softAPSSID() const
*/ */
bool WiFiAPClass::softAPConfig(IPAddress local_ip, IPAddress gateway, IPAddress subnet) bool WiFiAPClass::softAPConfig(IPAddress local_ip, IPAddress gateway, IPAddress subnet)
{ {
esp_err_t err = ESP_OK;
if(!WiFi.enableAP(true)) { if(!WiFi.enableAP(true)) {
// enable AP failed // enable AP failed
return false; return false;
} }
esp_wifi_start(); err = set_esp_interface_ip(ESP_IF_WIFI_AP, local_ip, gateway, subnet);
return err == ESP_OK;
tcpip_adapter_ip_info_t info;
info.ip.addr = static_cast<uint32_t>(local_ip);
info.gw.addr = static_cast<uint32_t>(gateway);
info.netmask.addr = static_cast<uint32_t>(subnet);
tcpip_adapter_dhcps_stop(TCPIP_ADAPTER_IF_AP);
if(tcpip_adapter_set_ip_info(TCPIP_ADAPTER_IF_AP, &info) == ESP_OK) {
dhcps_lease_t lease;
lease.enable = true;
lease.start_ip.addr = static_cast<uint32_t>(local_ip) + (1 << 24);
lease.end_ip.addr = static_cast<uint32_t>(local_ip) + (11 << 24);
tcpip_adapter_dhcps_option(
(tcpip_adapter_dhcp_option_mode_t)TCPIP_ADAPTER_OP_SET,
(tcpip_adapter_dhcp_option_id_t)REQUESTED_IP_ADDRESS,
(void*)&lease, sizeof(dhcps_lease_t)
);
return tcpip_adapter_dhcps_start(TCPIP_ADAPTER_IF_AP) == ESP_OK;
}
return false;
} }
...@@ -202,17 +196,15 @@ bool WiFiAPClass::softAPdisconnect(bool wifioff) ...@@ -202,17 +196,15 @@ bool WiFiAPClass::softAPdisconnect(bool wifioff)
{ {
bool ret; bool ret;
wifi_config_t conf; wifi_config_t conf;
wifi_softap_config(&conf);
if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){ if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){
return false; return false;
} }
*conf.ap.ssid = 0;
*conf.ap.password = 0;
conf.ap.authmode = WIFI_AUTH_OPEN; // auth must be open if pass=0
ret = esp_wifi_set_config(WIFI_IF_AP, &conf) == ESP_OK; ret = esp_wifi_set_config(WIFI_IF_AP, &conf) == ESP_OK;
if(wifioff) { if(ret && wifioff) {
ret = WiFi.enableAP(false) == ESP_OK; ret = WiFi.enableAP(false) == ESP_OK;
} }
...@@ -242,11 +234,14 @@ uint8_t WiFiAPClass::softAPgetStationNum() ...@@ -242,11 +234,14 @@ uint8_t WiFiAPClass::softAPgetStationNum()
*/ */
IPAddress WiFiAPClass::softAPIP() IPAddress WiFiAPClass::softAPIP()
{ {
tcpip_adapter_ip_info_t ip;
if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){ if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){
return IPAddress(); return IPAddress();
} }
tcpip_adapter_get_ip_info(TCPIP_ADAPTER_IF_AP, &ip); esp_netif_ip_info_t ip;
if(esp_netif_get_ip_info(get_esp_interface_netif(ESP_IF_WIFI_AP), &ip) != ESP_OK){
log_e("Netif Get IP Failed!");
return IPAddress();
}
return IPAddress(ip.ip.addr); return IPAddress(ip.ip.addr);
} }
...@@ -256,11 +251,14 @@ IPAddress WiFiAPClass::softAPIP() ...@@ -256,11 +251,14 @@ IPAddress WiFiAPClass::softAPIP()
*/ */
IPAddress WiFiAPClass::softAPBroadcastIP() IPAddress WiFiAPClass::softAPBroadcastIP()
{ {
tcpip_adapter_ip_info_t ip; esp_netif_ip_info_t ip;
if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){ if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){
return IPAddress(); return IPAddress();
} }
tcpip_adapter_get_ip_info(TCPIP_ADAPTER_IF_AP, &ip); if(esp_netif_get_ip_info(get_esp_interface_netif(ESP_IF_WIFI_AP), &ip) != ESP_OK){
log_e("Netif Get IP Failed!");
return IPAddress();
}
return WiFiGenericClass::calculateBroadcast(IPAddress(ip.gw.addr), IPAddress(ip.netmask.addr)); return WiFiGenericClass::calculateBroadcast(IPAddress(ip.gw.addr), IPAddress(ip.netmask.addr));
} }
...@@ -270,11 +268,14 @@ IPAddress WiFiAPClass::softAPBroadcastIP() ...@@ -270,11 +268,14 @@ IPAddress WiFiAPClass::softAPBroadcastIP()
*/ */
IPAddress WiFiAPClass::softAPNetworkID() IPAddress WiFiAPClass::softAPNetworkID()
{ {
tcpip_adapter_ip_info_t ip; esp_netif_ip_info_t ip;
if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){ if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){
return IPAddress(); return IPAddress();
} }
tcpip_adapter_get_ip_info(TCPIP_ADAPTER_IF_AP, &ip); if(esp_netif_get_ip_info(get_esp_interface_netif(ESP_IF_WIFI_AP), &ip) != ESP_OK){
log_e("Netif Get IP Failed!");
return IPAddress();
}
return WiFiGenericClass::calculateNetworkID(IPAddress(ip.gw.addr), IPAddress(ip.netmask.addr)); return WiFiGenericClass::calculateNetworkID(IPAddress(ip.gw.addr), IPAddress(ip.netmask.addr));
} }
...@@ -284,11 +285,14 @@ IPAddress WiFiAPClass::softAPNetworkID() ...@@ -284,11 +285,14 @@ IPAddress WiFiAPClass::softAPNetworkID()
*/ */
uint8_t WiFiAPClass::softAPSubnetCIDR() uint8_t WiFiAPClass::softAPSubnetCIDR()
{ {
tcpip_adapter_ip_info_t ip; esp_netif_ip_info_t ip;
if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){ if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){
return (uint8_t)0; return IPAddress();
}
if(esp_netif_get_ip_info(get_esp_interface_netif(ESP_IF_WIFI_AP), &ip) != ESP_OK){
log_e("Netif Get IP Failed!");
return IPAddress();
} }
tcpip_adapter_get_ip_info(TCPIP_ADAPTER_IF_AP, &ip);
return WiFiGenericClass::calculateSubnetCIDR(IPAddress(ip.netmask.addr)); return WiFiGenericClass::calculateSubnetCIDR(IPAddress(ip.netmask.addr));
} }
...@@ -332,8 +336,8 @@ const char * WiFiAPClass::softAPgetHostname() ...@@ -332,8 +336,8 @@ const char * WiFiAPClass::softAPgetHostname()
if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){ if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){
return hostname; return hostname;
} }
if(tcpip_adapter_get_hostname(TCPIP_ADAPTER_IF_AP, &hostname)) { if(esp_netif_get_hostname(get_esp_interface_netif(ESP_IF_WIFI_AP), &hostname) != ESP_OK){
return hostname; log_e("Netif Get Hostname Failed!");
} }
return hostname; return hostname;
} }
...@@ -348,7 +352,7 @@ bool WiFiAPClass::softAPsetHostname(const char * hostname) ...@@ -348,7 +352,7 @@ bool WiFiAPClass::softAPsetHostname(const char * hostname)
if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){ if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){
return false; return false;
} }
return tcpip_adapter_set_hostname(TCPIP_ADAPTER_IF_AP, hostname) == ESP_OK; return esp_netif_set_hostname(get_esp_interface_netif(ESP_IF_WIFI_AP), hostname) == ESP_OK;
} }
/** /**
...@@ -360,7 +364,7 @@ bool WiFiAPClass::softAPenableIpV6() ...@@ -360,7 +364,7 @@ bool WiFiAPClass::softAPenableIpV6()
if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){ if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){
return false; return false;
} }
return tcpip_adapter_create_ip6_linklocal(TCPIP_ADAPTER_IF_AP) == ESP_OK; return esp_netif_create_ip6_linklocal(get_esp_interface_netif(ESP_IF_WIFI_AP)) == ESP_OK;
} }
/** /**
...@@ -369,11 +373,11 @@ bool WiFiAPClass::softAPenableIpV6() ...@@ -369,11 +373,11 @@ bool WiFiAPClass::softAPenableIpV6()
*/ */
IPv6Address WiFiAPClass::softAPIPv6() IPv6Address WiFiAPClass::softAPIPv6()
{ {
static ip6_addr_t addr; esp_ip6_addr_t addr;
if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){ if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){
return IPv6Address(); return IPv6Address();
} }
if(tcpip_adapter_get_ip6_linklocal(TCPIP_ADAPTER_IF_AP, &addr)) { if(esp_netif_get_ip6_linklocal(get_esp_interface_netif(ESP_IF_WIFI_AP), &addr)) {
return IPv6Address(); return IPv6Address();
} }
return IPv6Address(addr.addr); return IPv6Address(addr.addr);
......
此差异已折叠。
...@@ -23,29 +23,86 @@ ...@@ -23,29 +23,86 @@
#ifndef ESP32WIFIGENERIC_H_ #ifndef ESP32WIFIGENERIC_H_
#define ESP32WIFIGENERIC_H_ #define ESP32WIFIGENERIC_H_
#include <esp_err.h> #include "esp_err.h"
#include <esp_event.h> #include "esp_event.h"
#include <functional> #include <functional>
#include "WiFiType.h" #include "WiFiType.h"
#include "IPAddress.h" #include "IPAddress.h"
#include <wifi_provisioning/manager.h> #include "esp_smartconfig.h"
#include "wifi_provisioning/manager.h"
typedef struct ESP_EVENT_DECLARE_BASE(ARDUINO_EVENTS);
{
wifi_prov_cb_event_t event;
void *event_data;
}wifi_prov_event_t;
typedef struct
{
wifi_prov_event_t *prov_event;
system_event_t *sys_event;
}system_prov_event_t;
typedef void (*WiFiEventCb)(system_event_id_t event); typedef enum {
typedef std::function<void(system_event_id_t event, system_event_info_t info)> WiFiEventFuncCb; ARDUINO_EVENT_WIFI_READY = 0,
typedef void (*WiFiEventSysCb)(system_event_t *event); ARDUINO_EVENT_WIFI_SCAN_DONE,
typedef void (*WiFiProvEventCb)(system_event_t *sys_event, wifi_prov_event_t *prov_event); ARDUINO_EVENT_WIFI_STA_START,
ARDUINO_EVENT_WIFI_STA_STOP,
ARDUINO_EVENT_WIFI_STA_CONNECTED,
ARDUINO_EVENT_WIFI_STA_DISCONNECTED,
ARDUINO_EVENT_WIFI_STA_AUTHMODE_CHANGE,
ARDUINO_EVENT_WIFI_STA_GOT_IP,
ARDUINO_EVENT_WIFI_STA_GOT_IP6,
ARDUINO_EVENT_WIFI_STA_LOST_IP,
ARDUINO_EVENT_WIFI_AP_START,
ARDUINO_EVENT_WIFI_AP_STOP,
ARDUINO_EVENT_WIFI_AP_STACONNECTED,
ARDUINO_EVENT_WIFI_AP_STADISCONNECTED,
ARDUINO_EVENT_WIFI_AP_STAIPASSIGNED,
ARDUINO_EVENT_WIFI_AP_PROBEREQRECVED,
ARDUINO_EVENT_WIFI_AP_GOT_IP6,
ARDUINO_EVENT_ETH_START,
ARDUINO_EVENT_ETH_STOP,
ARDUINO_EVENT_ETH_CONNECTED,
ARDUINO_EVENT_ETH_DISCONNECTED,
ARDUINO_EVENT_ETH_GOT_IP,
ARDUINO_EVENT_ETH_GOT_IP6,
ARDUINO_EVENT_WPS_ER_SUCCESS,
ARDUINO_EVENT_WPS_ER_FAILED,
ARDUINO_EVENT_WPS_ER_TIMEOUT,
ARDUINO_EVENT_WPS_ER_PIN,
ARDUINO_EVENT_WPS_ER_PBC_OVERLAP,
ARDUINO_EVENT_SC_SCAN_DONE,
ARDUINO_EVENT_SC_FOUND_CHANNEL,
ARDUINO_EVENT_SC_GOT_SSID_PSWD,
ARDUINO_EVENT_SC_SEND_ACK_DONE,
ARDUINO_EVENT_PROV_INIT,
ARDUINO_EVENT_PROV_DEINIT,
ARDUINO_EVENT_PROV_START,
ARDUINO_EVENT_PROV_END,
ARDUINO_EVENT_PROV_CRED_RECV,
ARDUINO_EVENT_PROV_CRED_FAIL,
ARDUINO_EVENT_PROV_CRED_SUCCESS,
ARDUINO_EVENT_MAX
} arduino_event_id_t;
typedef union {
wifi_event_sta_scan_done_t wifi_scan_done;
wifi_event_sta_authmode_change_t wifi_sta_authmode_change;
wifi_event_sta_connected_t wifi_sta_connected;
wifi_event_sta_disconnected_t wifi_sta_disconnected;
wifi_event_sta_wps_er_pin_t wps_er_pin;
wifi_event_sta_wps_fail_reason_t wps_fail_reason;
wifi_event_ap_probe_req_rx_t wifi_ap_probereqrecved;
wifi_event_ap_staconnected_t wifi_ap_staconnected;
wifi_event_ap_stadisconnected_t wifi_ap_stadisconnected;
ip_event_ap_staipassigned_t wifi_ap_staipassigned;
ip_event_got_ip_t got_ip;
ip_event_got_ip6_t got_ip6;
smartconfig_event_got_ssid_pswd_t sc_got_ssid_pswd;
esp_eth_handle_t eth_connected;
wifi_sta_config_t prov_cred_recv;
wifi_prov_sta_fail_reason_t prov_fail_reason;
} arduino_event_info_t;
typedef struct{
arduino_event_id_t event_id;
arduino_event_info_t event_info;
} arduino_event_t;
typedef void (*WiFiEventCb)(arduino_event_id_t event);
typedef std::function<void(arduino_event_id_t event, arduino_event_info_t info)> WiFiEventFuncCb;
typedef void (*WiFiEventSysCb)(arduino_event_t *event);
typedef size_t wifi_event_id_t; typedef size_t wifi_event_id_t;
...@@ -85,12 +142,11 @@ class WiFiGenericClass ...@@ -85,12 +142,11 @@ class WiFiGenericClass
public: public:
WiFiGenericClass(); WiFiGenericClass();
wifi_event_id_t onEvent(WiFiEventCb cbEvent, system_event_id_t event = SYSTEM_EVENT_MAX); wifi_event_id_t onEvent(WiFiEventCb cbEvent, arduino_event_id_t event = ARDUINO_EVENT_MAX);
wifi_event_id_t onEvent(WiFiEventFuncCb cbEvent, system_event_id_t event = SYSTEM_EVENT_MAX); wifi_event_id_t onEvent(WiFiEventFuncCb cbEvent, arduino_event_id_t event = ARDUINO_EVENT_MAX);
wifi_event_id_t onEvent(WiFiEventSysCb cbEvent, system_event_id_t event = SYSTEM_EVENT_MAX); wifi_event_id_t onEvent(WiFiEventSysCb cbEvent, arduino_event_id_t event = ARDUINO_EVENT_MAX);
wifi_event_id_t onEvent(WiFiProvEventCb cbEvent, system_event_id_t event = SYSTEM_EVENT_MAX); void removeEvent(WiFiEventCb cbEvent, arduino_event_id_t event = ARDUINO_EVENT_MAX);
void removeEvent(WiFiEventCb cbEvent, system_event_id_t event = SYSTEM_EVENT_MAX); void removeEvent(WiFiEventSysCb cbEvent, arduino_event_id_t event = ARDUINO_EVENT_MAX);
void removeEvent(WiFiEventSysCb cbEvent, system_event_id_t event = SYSTEM_EVENT_MAX);
void removeEvent(wifi_event_id_t id); void removeEvent(wifi_event_id_t id);
static int getStatusBits(); static int getStatusBits();
...@@ -114,7 +170,10 @@ class WiFiGenericClass ...@@ -114,7 +170,10 @@ class WiFiGenericClass
bool setTxPower(wifi_power_t power); bool setTxPower(wifi_power_t power);
wifi_power_t getTxPower(); wifi_power_t getTxPower();
static esp_err_t _eventCallback(void *arg, system_event_t *event, wifi_prov_event_t *prov_event=NULL); static const char * getHostname();
static void setHostname(const char * hostname);
static esp_err_t _eventCallback(arduino_event_t *event);
protected: protected:
static bool _persistent; static bool _persistent;
......
...@@ -48,6 +48,9 @@ extern "C" { ...@@ -48,6 +48,9 @@ extern "C" {
// ---------------------------------------------------- Private functions ------------------------------------------------ // ---------------------------------------------------- Private functions ------------------------------------------------
// ----------------------------------------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------------------------------------
esp_netif_t* get_esp_interface_netif(esp_interface_t interface);
esp_err_t set_esp_interface_dns(esp_interface_t interface, IPAddress main_dns=IPAddress(), IPAddress backup_dns=IPAddress(), IPAddress fallback_dns=IPAddress());
esp_err_t set_esp_interface_ip(esp_interface_t interface, IPAddress local_ip=IPAddress(), IPAddress gateway=IPAddress(), IPAddress subnet=IPAddress());
static bool sta_config_equal(const wifi_config_t& lhs, const wifi_config_t& rhs); static bool sta_config_equal(const wifi_config_t& lhs, const wifi_config_t& rhs);
...@@ -65,6 +68,36 @@ static bool sta_config_equal(const wifi_config_t& lhs, const wifi_config_t& rhs) ...@@ -65,6 +68,36 @@ static bool sta_config_equal(const wifi_config_t& lhs, const wifi_config_t& rhs)
return true; return true;
} }
static void wifi_sta_config(wifi_config_t * wifi_config, const char * ssid=NULL, const char * password=NULL, const uint8_t * bssid=NULL, uint8_t channel=0, wifi_scan_method_t scan_method=WIFI_ALL_CHANNEL_SCAN, wifi_sort_method_t sort_method=WIFI_CONNECT_AP_BY_SIGNAL, uint16_t listen_interval=0, bool pmf_required=false){
wifi_config->sta.channel = channel;
wifi_config->sta.listen_interval = listen_interval;
wifi_config->sta.scan_method = scan_method;//WIFI_ALL_CHANNEL_SCAN or WIFI_FAST_SCAN
wifi_config->sta.sort_method = sort_method;//WIFI_CONNECT_AP_BY_SIGNAL or WIFI_CONNECT_AP_BY_SECURITY
wifi_config->sta.threshold.rssi = -75;
wifi_config->sta.pmf_cfg.capable = true;
wifi_config->sta.pmf_cfg.required = pmf_required;
wifi_config->sta.bssid_set = 0;
memset(wifi_config->sta.bssid, 0, 6);
wifi_config->sta.threshold.authmode = WIFI_AUTH_OPEN;
wifi_config->sta.ssid[0] = 0;
wifi_config->sta.password[0] = 0;
if(ssid != NULL && ssid[0] != 0){
snprintf((char*)wifi_config->sta.ssid, 32, ssid);
if(password != NULL && password[0] != 0){
wifi_config->sta.threshold.authmode = WIFI_AUTH_WEP;
if(strlen(password) == 64){
memcpy((char*)wifi_config->sta.password, password, 64);
} else {
snprintf((char*)wifi_config->sta.password, 64, password);
}
}
if(bssid != NULL){
wifi_config->sta.bssid_set = 1;
memcpy(wifi_config->sta.bssid, bssid, 6);
}
}
}
// ----------------------------------------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------------------------------------
// ---------------------------------------------------- STA function ----------------------------------------------------- // ---------------------------------------------------- STA function -----------------------------------------------------
// ----------------------------------------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------------------------------------
...@@ -144,42 +177,43 @@ wl_status_t WiFiSTAClass::begin(const char* ssid, const char *passphrase, int32_ ...@@ -144,42 +177,43 @@ wl_status_t WiFiSTAClass::begin(const char* ssid, const char *passphrase, int32_
} }
} }
if(bssid) { wifi_config_t current_conf;
conf.sta.bssid_set = 1; wifi_sta_config(&conf, ssid, passphrase, bssid, channel);
memcpy((void *) &conf.sta.bssid[0], (void *) bssid, 6);
}
if(channel > 0 && channel <= 13) { if(esp_wifi_get_config(ESP_IF_WIFI_STA, &current_conf) != ESP_OK){
conf.sta.channel = channel; log_e("get current config failed!");
return WL_CONNECT_FAILED;
} }
wifi_config_t current_conf;
esp_wifi_get_config(WIFI_IF_STA, &current_conf);
if(!sta_config_equal(current_conf, conf)) { if(!sta_config_equal(current_conf, conf)) {
if(esp_wifi_disconnect()){ if(esp_wifi_disconnect()){
log_e("disconnect failed!"); log_e("disconnect failed!");
return WL_CONNECT_FAILED; return WL_CONNECT_FAILED;
} }
esp_wifi_set_config(WIFI_IF_STA, &conf); if(esp_wifi_set_config(ESP_IF_WIFI_STA, &conf) != ESP_OK){
log_e("set config failed!");
return WL_CONNECT_FAILED;
}
} else if(status() == WL_CONNECTED){ } else if(status() == WL_CONNECTED){
return WL_CONNECTED; return WL_CONNECTED;
} else { } else {
esp_wifi_set_config(WIFI_IF_STA, &conf); if(esp_wifi_set_config(ESP_IF_WIFI_STA, &conf) != ESP_OK){
log_e("set config failed!");
return WL_CONNECT_FAILED;
}
} }
if(!_useStaticIp) { if(!_useStaticIp){
if(tcpip_adapter_dhcpc_start(TCPIP_ADAPTER_IF_STA) == ESP_ERR_TCPIP_ADAPTER_DHCPC_START_FAILED){ if(set_esp_interface_ip(ESP_IF_WIFI_STA) != ESP_OK) {
log_e("dhcp client start failed!");
return WL_CONNECT_FAILED; return WL_CONNECT_FAILED;
} }
} else {
tcpip_adapter_dhcpc_stop(TCPIP_ADAPTER_IF_STA);
} }
if(connect && esp_wifi_connect()) { if(connect){
log_e("connect failed!"); if(esp_wifi_connect() != ESP_OK) {
return WL_CONNECT_FAILED; log_e("connect failed!");
return WL_CONNECT_FAILED;
}
} }
return status(); return status();
...@@ -203,23 +237,22 @@ wl_status_t WiFiSTAClass::begin() ...@@ -203,23 +237,22 @@ wl_status_t WiFiSTAClass::begin()
} }
wifi_config_t current_conf; wifi_config_t current_conf;
if(esp_wifi_get_config(WIFI_IF_STA, &current_conf) != ESP_OK || esp_wifi_set_config(WIFI_IF_STA, &current_conf) != ESP_OK) { if(esp_wifi_get_config(ESP_IF_WIFI_STA, &current_conf) != ESP_OK || esp_wifi_set_config(ESP_IF_WIFI_STA, &current_conf) != ESP_OK) {
log_e("config failed"); log_e("config failed");
return WL_CONNECT_FAILED; return WL_CONNECT_FAILED;
} }
if(!_useStaticIp) { if(!_useStaticIp && set_esp_interface_ip(ESP_IF_WIFI_STA) != ESP_OK) {
if(tcpip_adapter_dhcpc_start(TCPIP_ADAPTER_IF_STA) == ESP_ERR_TCPIP_ADAPTER_DHCPC_START_FAILED){ log_e("set ip failed!");
log_e("dhcp client start failed!"); return WL_CONNECT_FAILED;
return WL_CONNECT_FAILED;
}
} else {
tcpip_adapter_dhcpc_stop(TCPIP_ADAPTER_IF_STA);
} }
if(status() != WL_CONNECTED && esp_wifi_connect()){ if(status() != WL_CONNECTED){
log_e("connect failed!"); esp_err_t err = esp_wifi_connect();
return WL_CONNECT_FAILED; if(err){
log_e("connect failed! 0x%x", err);
return WL_CONNECT_FAILED;
}
} }
return status(); return status();
...@@ -247,11 +280,11 @@ bool WiFiSTAClass::reconnect() ...@@ -247,11 +280,11 @@ bool WiFiSTAClass::reconnect()
bool WiFiSTAClass::disconnect(bool wifioff, bool eraseap) bool WiFiSTAClass::disconnect(bool wifioff, bool eraseap)
{ {
wifi_config_t conf; wifi_config_t conf;
wifi_sta_config(&conf);
if(WiFi.getMode() & WIFI_MODE_STA){ if(WiFi.getMode() & WIFI_MODE_STA){
if(eraseap){ if(eraseap){
memset(&conf, 0, sizeof(wifi_config_t)); if(esp_wifi_set_config(ESP_IF_WIFI_STA, &conf)){
if(esp_wifi_set_config(WIFI_IF_STA, &conf)){
log_e("clear config failed!"); log_e("clear config failed!");
} }
} }
...@@ -283,58 +316,11 @@ bool WiFiSTAClass::config(IPAddress local_ip, IPAddress gateway, IPAddress subne ...@@ -283,58 +316,11 @@ bool WiFiSTAClass::config(IPAddress local_ip, IPAddress gateway, IPAddress subne
if(!WiFi.enableSTA(true)) { if(!WiFi.enableSTA(true)) {
return false; return false;
} }
err = set_esp_interface_ip(ESP_IF_WIFI_STA, local_ip, gateway, subnet);
tcpip_adapter_ip_info_t info; if(err == ESP_OK){
err = set_esp_interface_dns(ESP_IF_WIFI_STA, dns1, dns2);
if(local_ip != (uint32_t)0x00000000 && local_ip != INADDR_NONE){
info.ip.addr = static_cast<uint32_t>(local_ip);
info.gw.addr = static_cast<uint32_t>(gateway);
info.netmask.addr = static_cast<uint32_t>(subnet);
} else {
info.ip.addr = 0;
info.gw.addr = 0;
info.netmask.addr = 0;
}
err = tcpip_adapter_dhcpc_stop(TCPIP_ADAPTER_IF_STA);
if(err != ESP_OK && err != ESP_ERR_TCPIP_ADAPTER_DHCP_ALREADY_STOPPED){
log_e("DHCP could not be stopped! Error: %d", err);
return false;
}
err = tcpip_adapter_set_ip_info(TCPIP_ADAPTER_IF_STA, &info);
if(err != ERR_OK){
log_e("STA IP could not be configured! Error: %d", err);
return false;
}
if(info.ip.addr){
_useStaticIp = true;
} else {
err = tcpip_adapter_dhcpc_start(TCPIP_ADAPTER_IF_STA);
if(err == ESP_ERR_TCPIP_ADAPTER_DHCPC_START_FAILED){
log_e("dhcp client start failed!");
return false;
}
_useStaticIp = false;
}
ip_addr_t d;
d.type = IPADDR_TYPE_V4;
if(dns1 != (uint32_t)0x00000000 && dns1 != INADDR_NONE) {
// Set DNS1-Server
d.u_addr.ip4.addr = static_cast<uint32_t>(dns1);
dns_setserver(0, &d);
}
if(dns2 != (uint32_t)0x00000000 && dns2 != INADDR_NONE) {
// Set DNS2-Server
d.u_addr.ip4.addr = static_cast<uint32_t>(dns2);
dns_setserver(1, &d);
} }
return err == ESP_OK;
return true;
} }
/** /**
...@@ -355,9 +341,6 @@ bool WiFiSTAClass::isConnected() ...@@ -355,9 +341,6 @@ bool WiFiSTAClass::isConnected()
*/ */
bool WiFiSTAClass::setAutoConnect(bool autoConnect) bool WiFiSTAClass::setAutoConnect(bool autoConnect)
{ {
/*bool ret;
ret = esp_wifi_set_auto_connect(autoConnect);
return ret;*/
return false;//now deprecated return false;//now deprecated
} }
...@@ -368,9 +351,6 @@ bool WiFiSTAClass::setAutoConnect(bool autoConnect) ...@@ -368,9 +351,6 @@ bool WiFiSTAClass::setAutoConnect(bool autoConnect)
*/ */
bool WiFiSTAClass::getAutoConnect() bool WiFiSTAClass::getAutoConnect()
{ {
/*bool autoConnect;
esp_wifi_get_auto_connect(&autoConnect);
return autoConnect;*/
return false;//now deprecated return false;//now deprecated
} }
...@@ -412,8 +392,11 @@ IPAddress WiFiSTAClass::localIP() ...@@ -412,8 +392,11 @@ IPAddress WiFiSTAClass::localIP()
if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){ if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){
return IPAddress(); return IPAddress();
} }
tcpip_adapter_ip_info_t ip; esp_netif_ip_info_t ip;
tcpip_adapter_get_ip_info(TCPIP_ADAPTER_IF_STA, &ip); if(esp_netif_get_ip_info(get_esp_interface_netif(ESP_IF_WIFI_STA), &ip) != ESP_OK){
log_e("Netif Get IP Failed!");
return IPAddress();
}
return IPAddress(ip.ip.addr); return IPAddress(ip.ip.addr);
} }
...@@ -426,7 +409,7 @@ IPAddress WiFiSTAClass::localIP() ...@@ -426,7 +409,7 @@ IPAddress WiFiSTAClass::localIP()
uint8_t* WiFiSTAClass::macAddress(uint8_t* mac) uint8_t* WiFiSTAClass::macAddress(uint8_t* mac)
{ {
if(WiFiGenericClass::getMode() != WIFI_MODE_NULL){ if(WiFiGenericClass::getMode() != WIFI_MODE_NULL){
esp_wifi_get_mac(WIFI_IF_STA, mac); esp_wifi_get_mac(ESP_IF_WIFI_STA, mac);
} }
else{ else{
esp_read_mac(mac, ESP_MAC_WIFI_STA); esp_read_mac(mac, ESP_MAC_WIFI_STA);
...@@ -446,7 +429,7 @@ String WiFiSTAClass::macAddress(void) ...@@ -446,7 +429,7 @@ String WiFiSTAClass::macAddress(void)
esp_read_mac(mac, ESP_MAC_WIFI_STA); esp_read_mac(mac, ESP_MAC_WIFI_STA);
} }
else{ else{
esp_wifi_get_mac(WIFI_IF_STA, mac); esp_wifi_get_mac(ESP_IF_WIFI_STA, mac);
} }
sprintf(macStr, "%02X:%02X:%02X:%02X:%02X:%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); sprintf(macStr, "%02X:%02X:%02X:%02X:%02X:%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
return String(macStr); return String(macStr);
...@@ -461,8 +444,11 @@ IPAddress WiFiSTAClass::subnetMask() ...@@ -461,8 +444,11 @@ IPAddress WiFiSTAClass::subnetMask()
if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){ if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){
return IPAddress(); return IPAddress();
} }
tcpip_adapter_ip_info_t ip; esp_netif_ip_info_t ip;
tcpip_adapter_get_ip_info(TCPIP_ADAPTER_IF_STA, &ip); if(esp_netif_get_ip_info(get_esp_interface_netif(ESP_IF_WIFI_STA), &ip) != ESP_OK){
log_e("Netif Get IP Failed!");
return IPAddress();
}
return IPAddress(ip.netmask.addr); return IPAddress(ip.netmask.addr);
} }
...@@ -475,8 +461,11 @@ IPAddress WiFiSTAClass::gatewayIP() ...@@ -475,8 +461,11 @@ IPAddress WiFiSTAClass::gatewayIP()
if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){ if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){
return IPAddress(); return IPAddress();
} }
tcpip_adapter_ip_info_t ip; esp_netif_ip_info_t ip;
tcpip_adapter_get_ip_info(TCPIP_ADAPTER_IF_STA, &ip); if(esp_netif_get_ip_info(get_esp_interface_netif(ESP_IF_WIFI_STA), &ip) != ESP_OK){
log_e("Netif Get IP Failed!");
return IPAddress();
}
return IPAddress(ip.gw.addr); return IPAddress(ip.gw.addr);
} }
...@@ -503,8 +492,11 @@ IPAddress WiFiSTAClass::broadcastIP() ...@@ -503,8 +492,11 @@ IPAddress WiFiSTAClass::broadcastIP()
if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){ if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){
return IPAddress(); return IPAddress();
} }
tcpip_adapter_ip_info_t ip; esp_netif_ip_info_t ip;
tcpip_adapter_get_ip_info(TCPIP_ADAPTER_IF_STA, &ip); if(esp_netif_get_ip_info(get_esp_interface_netif(ESP_IF_WIFI_STA), &ip) != ESP_OK){
log_e("Netif Get IP Failed!");
return IPAddress();
}
return WiFiGenericClass::calculateBroadcast(IPAddress(ip.gw.addr), IPAddress(ip.netmask.addr)); return WiFiGenericClass::calculateBroadcast(IPAddress(ip.gw.addr), IPAddress(ip.netmask.addr));
} }
...@@ -517,8 +509,11 @@ IPAddress WiFiSTAClass::networkID() ...@@ -517,8 +509,11 @@ IPAddress WiFiSTAClass::networkID()
if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){ if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){
return IPAddress(); return IPAddress();
} }
tcpip_adapter_ip_info_t ip; esp_netif_ip_info_t ip;
tcpip_adapter_get_ip_info(TCPIP_ADAPTER_IF_STA, &ip); if(esp_netif_get_ip_info(get_esp_interface_netif(ESP_IF_WIFI_STA), &ip) != ESP_OK){
log_e("Netif Get IP Failed!");
return IPAddress();
}
return WiFiGenericClass::calculateNetworkID(IPAddress(ip.gw.addr), IPAddress(ip.netmask.addr)); return WiFiGenericClass::calculateNetworkID(IPAddress(ip.gw.addr), IPAddress(ip.netmask.addr));
} }
...@@ -531,8 +526,11 @@ uint8_t WiFiSTAClass::subnetCIDR() ...@@ -531,8 +526,11 @@ uint8_t WiFiSTAClass::subnetCIDR()
if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){ if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){
return (uint8_t)0; return (uint8_t)0;
} }
tcpip_adapter_ip_info_t ip; esp_netif_ip_info_t ip;
tcpip_adapter_get_ip_info(TCPIP_ADAPTER_IF_STA, &ip); if(esp_netif_get_ip_info(get_esp_interface_netif(ESP_IF_WIFI_STA), &ip) != ESP_OK){
log_e("Netif Get IP Failed!");
return IPAddress();
}
return WiFiGenericClass::calculateSubnetCIDR(IPAddress(ip.netmask.addr)); return WiFiGenericClass::calculateSubnetCIDR(IPAddress(ip.netmask.addr));
} }
...@@ -562,7 +560,7 @@ String WiFiSTAClass::psk() const ...@@ -562,7 +560,7 @@ String WiFiSTAClass::psk() const
return String(); return String();
} }
wifi_config_t conf; wifi_config_t conf;
esp_wifi_get_config(WIFI_IF_STA, &conf); esp_wifi_get_config(ESP_IF_WIFI_STA, &conf);
return String(reinterpret_cast<char*>(conf.sta.password)); return String(reinterpret_cast<char*>(conf.sta.password));
} }
...@@ -654,7 +652,7 @@ bool WiFiSTAClass::enableIpV6() ...@@ -654,7 +652,7 @@ bool WiFiSTAClass::enableIpV6()
if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){ if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){
return false; return false;
} }
return tcpip_adapter_create_ip6_linklocal(TCPIP_ADAPTER_IF_STA) == 0; return esp_netif_create_ip6_linklocal(get_esp_interface_netif(ESP_IF_WIFI_STA)) == ESP_OK;
} }
/** /**
...@@ -663,11 +661,11 @@ bool WiFiSTAClass::enableIpV6() ...@@ -663,11 +661,11 @@ bool WiFiSTAClass::enableIpV6()
*/ */
IPv6Address WiFiSTAClass::localIPv6() IPv6Address WiFiSTAClass::localIPv6()
{ {
static ip6_addr_t addr; esp_ip6_addr_t addr;
if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){ if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){
return IPv6Address(); return IPv6Address();
} }
if(tcpip_adapter_get_ip6_linklocal(TCPIP_ADAPTER_IF_STA, &addr)){ if(esp_netif_get_ip6_linklocal(get_esp_interface_netif(ESP_IF_WIFI_STA), &addr)) {
return IPv6Address(); return IPv6Address();
} }
return IPv6Address(addr.addr); return IPv6Address(addr.addr);
...@@ -679,6 +677,7 @@ bool WiFiSTAClass::_smartConfigDone = false; ...@@ -679,6 +677,7 @@ bool WiFiSTAClass::_smartConfigDone = false;
bool WiFiSTAClass::beginSmartConfig() { bool WiFiSTAClass::beginSmartConfig() {
esp_err_t err;
if (_smartConfigStarted) { if (_smartConfigStarted) {
return false; return false;
} }
...@@ -686,23 +685,22 @@ bool WiFiSTAClass::beginSmartConfig() { ...@@ -686,23 +685,22 @@ bool WiFiSTAClass::beginSmartConfig() {
if (!WiFi.mode(WIFI_STA)) { if (!WiFi.mode(WIFI_STA)) {
return false; return false;
} }
esp_wifi_disconnect(); esp_wifi_disconnect();
esp_err_t err;
#ifdef ESP_IDF_VERSION_MAJOR
esp_event_handler_register(SC_EVENT, ESP_EVENT_ANY_ID, _smartConfigCallback, this);
smartconfig_start_config_t conf = SMARTCONFIG_START_CONFIG_DEFAULT(); smartconfig_start_config_t conf = SMARTCONFIG_START_CONFIG_DEFAULT();
err = esp_smartconfig_set_type(SC_TYPE_ESPTOUCH);
if (err != ESP_OK) {
log_e("SmartConfig Set Type Failed!");
return false;
}
err = esp_smartconfig_start(&conf); err = esp_smartconfig_start(&conf);
#else if (err != ESP_OK) {
err = esp_smartconfig_start(reinterpret_cast<sc_callback_t>(&WiFiSTAClass::_smartConfigCallback), 1); log_e("SmartConfig Start Failed!");
#endif return false;
if (err == ESP_OK) {
_smartConfigStarted = true;
_smartConfigDone = false;
return true;
} }
return false; _smartConfigStarted = true;
_smartConfigDone = false;
return true;
} }
bool WiFiSTAClass::stopSmartConfig() { bool WiFiSTAClass::stopSmartConfig() {
...@@ -725,79 +723,3 @@ bool WiFiSTAClass::smartConfigDone() { ...@@ -725,79 +723,3 @@ bool WiFiSTAClass::smartConfigDone() {
return _smartConfigDone; return _smartConfigDone;
} }
#if ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_DEBUG
const char * sc_type_strings[] = {
"ESPTOUCH",
"AIRKISS",
"ESPTOUCH_AIRKISS"
};
#endif
#ifdef ESP_IDF_VERSION_MAJOR //todo
void WiFiSTAClass::_smartConfigCallback(void *arg, esp_event_base_t event_base, int32_t event_id, void *event_data){
smartconfig_event_t event = (smartconfig_event_t)event_id;
switch(event){
case SC_EVENT_SCAN_DONE:
log_d("smartconfig has finished to scan for APs");
break;
case SC_EVENT_FOUND_CHANNEL:
log_d("smartconfig has found the channel of the target AP");
break;
case SC_EVENT_GOT_SSID_PSWD:
{
log_d("smartconfig got the SSID and password");
smartconfig_event_got_ssid_pswd_t * data = (smartconfig_event_got_ssid_pswd_t*)event_data;
log_d("Type: %s", sc_type_strings[data->type]);
log_d("SSID: %s", (const char *)data->ssid);
log_d("Password: %s", (const char *)data->password);
log_d("Sender IP: " IPSTR, data->cellphone_ip[3], data->cellphone_ip[2], data->cellphone_ip[1], data->cellphone_ip[0]);
WiFi.begin((const char *)data->ssid, (const char *)data->password);
}
break;
case SC_EVENT_SEND_ACK_DONE:
log_d("smartconfig has sent ACK to the sender");
WiFi.stopSmartConfig();
break;
default: break;
}
}
#else
#if ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_DEBUG
const char * sc_status_strings[] = {
"WAIT",
"FIND_CHANNEL",
"GETTING_SSID_PSWD",
"LINK",
"LINK_OVER"
};
#endif
void WiFiSTAClass::_smartConfigCallback(uint32_t st, void* result) {
smartconfig_status_t status = (smartconfig_status_t) st;
log_d("Status: %s", sc_status_strings[st % 5]);
if (status == SC_STATUS_GETTING_SSID_PSWD) {
#if ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_DEBUG
smartconfig_type_t * type = (smartconfig_type_t *)result;
log_d("Type: %s", sc_type_strings[*type % 3]);
#endif
} else if (status == SC_STATUS_LINK) {
wifi_sta_config_t *sta_conf = reinterpret_cast<wifi_sta_config_t *>(result);
log_d("SSID: %s", (char *)(sta_conf->ssid));
sta_conf->bssid_set = 0;
esp_wifi_set_config(WIFI_IF_STA, (wifi_config_t *)sta_conf);
esp_wifi_connect();
_smartConfigDone = true;
} else if (status == SC_STATUS_LINK_OVER) {
if(result){
#if ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_DEBUG
ip4_addr_t * ip = (ip4_addr_t *)result;
log_d("Sender IP: " IPSTR, IP2STR(ip));
#endif
}
WiFi.stopSmartConfig();
}
}
#endif
...@@ -100,14 +100,9 @@ public: ...@@ -100,14 +100,9 @@ public:
bool stopSmartConfig(); bool stopSmartConfig();
bool smartConfigDone(); bool smartConfigDone();
static bool _smartConfigDone;
protected: protected:
static bool _smartConfigStarted; static bool _smartConfigStarted;
static bool _smartConfigDone;
#ifdef ESP_IDF_VERSION_MAJOR //todo
static void _smartConfigCallback(void *arg, esp_event_base_t event_base, int32_t event_id, void *event_data);
#else
static void _smartConfigCallback(uint32_t status, void* result);
#endif
}; };
......
...@@ -42,6 +42,33 @@ extern "C" { ...@@ -42,6 +42,33 @@ extern "C" {
#include "lwip/err.h" #include "lwip/err.h"
} }
static const char * cipher_str(int cipher)
{
switch (cipher) {
case WIFI_CIPHER_TYPE_NONE:
return ("NONE");
break;
case WIFI_CIPHER_TYPE_WEP40:
return ("WEP40");
break;
case WIFI_CIPHER_TYPE_WEP104:
return ("WEP104");
break;
case WIFI_CIPHER_TYPE_TKIP:
return ("TKIP");
break;
case WIFI_CIPHER_TYPE_CCMP:
return ("CCMP");
break;
case WIFI_CIPHER_TYPE_TKIP_CCMP:
return ("TKIP_CCMP");
break;
default:
break;
}
return ("UNKNOWN");
}
bool WiFiScanClass::_scanAsync = false; bool WiFiScanClass::_scanAsync = false;
uint32_t WiFiScanClass::_scanStarted = 0; uint32_t WiFiScanClass::_scanStarted = 0;
uint32_t WiFiScanClass::_scanTimeout = 10000; uint32_t WiFiScanClass::_scanTimeout = 10000;
......
#include "WiFiProv.h" #include "WiFi.h"
void SysProvEvent(system_event_t *sys_event,wifi_prov_event_t *prov_event) void SysProvEvent(arduino_event_t *sys_event)
{ {
if(sys_event) { switch (sys_event->event_id) {
switch (sys_event->event_id) { case ARDUINO_EVENT_WIFI_STA_GOT_IP:
case SYSTEM_EVENT_STA_GOT_IP: Serial.print("\nConnected IP address : ");
Serial.print("\nConnected IP address : "); Serial.println(IPAddress(sys_event->event_info.got_ip.ip_info.ip.addr));
Serial.println(IPAddress(sys_event->event_info.got_ip.ip_info.ip.addr)); break;
break; case ARDUINO_EVENT_WIFI_STA_DISCONNECTED:
case SYSTEM_EVENT_STA_DISCONNECTED: Serial.println("\nDisconnected. Connecting to the AP again... ");
Serial.println("\nDisconnected. Connecting to the AP again... "); break;
break; case ARDUINO_EVENT_PROV_START:
default: Serial.println("\nProvisioning started\nGive Credentials of your access point using \" Android app \"");
break; break;
} case ARDUINO_EVENT_PROV_CRED_RECV: {
Serial.println("\nReceived Wi-Fi credentials");
Serial.print("\tSSID : ");
Serial.println((const char *) sys_event->event_info.prov_cred_recv.ssid);
Serial.print("\tPassword : ");
Serial.println((char const *) sys_event->event_info.prov_cred_recv.password);
break;
} }
case ARDUINO_EVENT_PROV_CRED_FAIL: {
if(prov_event) { Serial.println("\nProvisioning failed!\nPlease reset to factory and retry provisioning\n");
switch (prov_event->event) { if(sys_event->event_info.prov_fail_reason == WIFI_PROV_STA_AUTH_ERROR)
case WIFI_PROV_START: Serial.println("\nWi-Fi AP password incorrect");
Serial.println("\nProvisioning started\nGive Credentials of your access point using \" Android app \""); else
break; Serial.println("\nWi-Fi AP not found....Add API \" nvs_flash_erase() \" before beginProvision()");
case WIFI_PROV_CRED_RECV: { break;
Serial.println("\nReceived Wi-Fi credentials"); }
wifi_sta_config_t *wifi_sta_cfg = (wifi_sta_config_t *)prov_event->event_data; case ARDUINO_EVENT_PROV_CRED_SUCCESS:
Serial.print("\tSSID : "); Serial.println("\nProvisioning Successful");
Serial.println((const char *) wifi_sta_cfg->ssid); break;
Serial.print("\tPassword : "); case ARDUINO_EVENT_PROV_END:
Serial.println((char const *) wifi_sta_cfg->password); Serial.println("\nProvisioning Ends");
break; break;
} default:
case WIFI_PROV_CRED_FAIL: { break;
wifi_prov_sta_fail_reason_t *reason = (wifi_prov_sta_fail_reason_t *)prov_event->event_data;
Serial.println("\nProvisioning failed!\nPlease reset to factory and retry provisioning\n");
if(*reason == WIFI_PROV_STA_AUTH_ERROR)
Serial.println("\nWi-Fi AP password incorrect");
else
Serial.println("\nWi-Fi AP not found....Add API \" nvs_flash_erase() \" before beginProvision()");
break;
}
case WIFI_PROV_CRED_SUCCESS:
Serial.println("\nProvisioning Successful");
break;
case WIFI_PROV_END:
Serial.println("\nProvisioning Ends");
break;
default:
break;
}
} }
} }
...@@ -56,8 +45,8 @@ void setup() { ...@@ -56,8 +45,8 @@ void setup() {
/* uint8_t uuid[16] = {0xb4, 0xdf, 0x5a, 0x1c, 0x3f, 0x6b, 0xf4, 0xbf, /* uint8_t uuid[16] = {0xb4, 0xdf, 0x5a, 0x1c, 0x3f, 0x6b, 0xf4, 0xbf,
0xea, 0x4a, 0x82, 0x03, 0x04, 0x90, 0x1a, 0x02 };*/ 0xea, 0x4a, 0x82, 0x03, 0x04, 0x90, 0x1a, 0x02 };*/
WiFi.onEvent(SysProvEvent); WiFi.onEvent(SysProvEvent);
//WiFi.beginProvision(provSchemeBLE, WIFI_PROV_SCHEME_BLE_EVENT_HANDLER_FREE_BTDM, WIFI_PROV_SECURITY_1, "abcd1234", "PROV_XXX", NULL, NULL); //WiFi.beginProvision(WIFI_PROV_SCHEME_BLE, WIFI_PROV_SCHEME_BLE_EVENT_HANDLER_FREE_BTDM, WIFI_PROV_SECURITY_1, "abcd1234", "PROV_XXX", NULL, NULL);
WiFi.beginProvision(provSchemeSoftAP, WIFI_PROV_EVENT_HANDLER_NONE, WIFI_PROV_SECURITY_1, "abcd1234", "SOFTAP_XXX", NULL, NULL); WiFi.beginProvision(WIFI_PROV_SCHEME_SOFTAP, WIFI_PROV_EVENT_HANDLER_NONE, WIFI_PROV_SECURITY_1, "abcd1234", "SOFTAP_XXX", NULL, NULL);
} }
void loop() { void loop() {
......
...@@ -24,115 +24,107 @@ ...@@ -24,115 +24,107 @@
#include <string.h> #include <string.h>
#include <esp_err.h> #include <esp_err.h>
#include <esp_wifi.h> #include <esp_wifi.h>
#include <esp_event_loop.h> #include <esp_event.h>
#include <esp32-hal.h> #include <esp32-hal.h>
#include <wifi_provisioning/scheme_ble.h> #include <nvs_flash.h>
#if CONFIG_IDF_TARGET_ESP32
#include "wifi_provisioning/scheme_ble.h"
#endif
#include <wifi_provisioning/scheme_softap.h> #include <wifi_provisioning/scheme_softap.h>
#include <wifi_provisioning/manager.h> #include <wifi_provisioning/manager.h>
#undef IPADDR_NONE #undef IPADDR_NONE
#include "WiFiProv.h" #include "WiFi.h"
#include "SimpleBLE.h"
extern esp_err_t postToSysQueue(system_prov_event_t *); bool wifiLowLevelInit(bool persistent);
static wifi_prov_mgr_config_t config; #if CONFIG_IDF_TARGET_ESP32
static scheme_t prov_scheme;
static const uint8_t custom_service_uuid[16] = { 0xb4, 0xdf, 0x5a, 0x1c, 0x3f, 0x6b, 0xf4, 0xbf, static const uint8_t custom_service_uuid[16] = { 0xb4, 0xdf, 0x5a, 0x1c, 0x3f, 0x6b, 0xf4, 0xbf,
0xea, 0x4a, 0x82, 0x03, 0x04, 0x90, 0x1a, 0x02, }; 0xea, 0x4a, 0x82, 0x03, 0x04, 0x90, 0x1a, 0x02, };
#endif
#define SERV_NAME_PREFIX_PROV "PROV_" #define SERV_NAME_PREFIX_PROV "PROV_"
void provSchemeBLE() bool WiFiProvClass::prov_enable = true;
{
prov_scheme = WIFI_PROV_SCHEME_BLE;
config.scheme = wifi_prov_scheme_ble;
}
void provSchemeSoftAP() bool WiFiProvClass::isProvEnabled()
{ {
prov_scheme = WIFI_PROV_SCHEME_SOFTAP; return prov_enable;
config.scheme = wifi_prov_scheme_softap;
} }
static void prov_event_handler(void *user_data, wifi_prov_cb_event_t event, void *event_data) static void get_device_service_name(prov_scheme_t prov_scheme, char *service_name, size_t max)
{ {
if (!event) { uint8_t eth_mac[6] = {0,0,0,0,0,0};
return; if(esp_wifi_get_mac(WIFI_IF_STA, eth_mac) != ESP_OK){
} log_e("esp_wifi_get_mac failed!");
return;
system_prov_event_t *sys_prov = (system_prov_event_t *)malloc(sizeof(system_prov_event_t)); }
if(sys_prov == NULL) {
log_e("Malloc Failed");
return;
}
sys_prov->prov_event = (wifi_prov_event_t *)malloc(sizeof(wifi_prov_event_t));
if(sys_prov->prov_event == NULL) {
log_e("Malloc Failed");
free(sys_prov);
return;
}
sys_prov->sys_event = (system_event_t *)malloc(sizeof(system_event_t));
if(sys_prov->sys_event == NULL) {
log_e("Malloc Failed");
free(sys_prov->prov_event);
free(sys_prov);
return;
}
sys_prov->prov_event->event = event;
sys_prov->prov_event->event_data = event_data;
sys_prov->sys_event->event_id = SYSTEM_EVENT_MAX;
esp_err_t check = postToSysQueue(sys_prov);
if(check == ESP_FAIL) {
log_e("Provisioning event not send to queue");
free(sys_prov->sys_event);
free(sys_prov->prov_event);
free(sys_prov);
}
}
static void get_device_service_name(char *service_name, size_t max)
{
uint8_t eth_mac[6];
WiFi.macAddress(eth_mac);
#if CONFIG_IDF_TARGET_ESP32 #if CONFIG_IDF_TARGET_ESP32
if(prov_scheme == WIFI_PROV_SCHEME_BLE) { if(prov_scheme == WIFI_PROV_SCHEME_BLE) {
snprintf(service_name, max, "%s%02X%02X%02X",SERV_NAME_PREFIX_BLE, eth_mac[3], eth_mac[4], eth_mac[5]); snprintf(service_name, max, "%s%02X%02X%02X",SERV_NAME_PREFIX_BLE, eth_mac[3], eth_mac[4], eth_mac[5]);
} else { } else {
#endif #endif
snprintf(service_name, max, "%s%02X%02X%02X",SERV_NAME_PREFIX_WIFI, eth_mac[3], eth_mac[4], eth_mac[5]); snprintf(service_name, max, "%s%02X%02X%02X",SERV_NAME_PREFIX_WIFI, eth_mac[3], eth_mac[4], eth_mac[5]);
#if CONFIG_IDF_TARGET_ESP32 #if CONFIG_IDF_TARGET_ESP32
} }
#endif #endif
} }
void WiFiProvClass :: beginProvision(void (*scheme_cb)(), wifi_prov_event_handler_t scheme_event_handler, wifi_prov_security_t security, const char * pop, const char *service_name, const char *service_key, uint8_t * uuid) static esp_err_t custom_prov_data_handler(uint32_t session_id, const uint8_t *inbuf, ssize_t inlen, uint8_t **outbuf, ssize_t *outlen, void *priv_data){
if (inbuf) {
log_d("Received data: %.*s", inlen, (char *)inbuf);
}
*outbuf = NULL;
*outlen = 0;
return ESP_OK;
}
void WiFiProvClass :: beginProvision(prov_scheme_t prov_scheme, scheme_handler_t scheme_handler, wifi_prov_security_t security, const char * pop, const char *service_name, const char *service_key, uint8_t * uuid)
{ {
WiFi.enableProv(true); prov_enable = true;
bool provisioned = false; bool provisioned = false;
scheme_cb(); static char service_name_temp[32];
config.scheme_event_handler = scheme_event_handler;
config.app_event_handler = {
.event_cb = prov_event_handler,
.user_data = NULL
};
wifi_prov_mgr_config_t config;
#if CONFIG_IDF_TARGET_ESP32 #if CONFIG_IDF_TARGET_ESP32
if(prov_scheme == WIFI_PROV_SCHEME_BLE) { if(prov_scheme == WIFI_PROV_SCHEME_BLE) {
config.scheme = wifi_prov_scheme_ble; config.scheme = wifi_prov_scheme_ble;
} else { } else {
#endif #endif
config.scheme = wifi_prov_scheme_softap; config.scheme = wifi_prov_scheme_softap;
#if CONFIG_IDF_TARGET_ESP32 #if CONFIG_IDF_TARGET_ESP32
} }
if(scheme_handler == WIFI_PROV_SCHEME_HANDLER_NONE){
#endif #endif
wifi_prov_event_handler_t scheme_event_handler = WIFI_PROV_EVENT_HANDLER_NONE;
wifi_prov_mgr_init(config); memcpy(&config.scheme_event_handler, &scheme_event_handler, sizeof(wifi_prov_event_handler_t));
WiFi.mode(WIFI_MODE_AP); #if CONFIG_IDF_TARGET_ESP32
wifi_prov_mgr_is_provisioned(&provisioned); } else if(scheme_handler == WIFI_PROV_SCHEME_HANDLER_FREE_BTDM){
wifi_prov_event_handler_t scheme_event_handler = WIFI_PROV_SCHEME_BLE_EVENT_HANDLER_FREE_BTDM;
memcpy(&config.scheme_event_handler, &scheme_event_handler, sizeof(wifi_prov_event_handler_t));
} else if(scheme_handler == WIFI_PROV_SCHEME_HANDLER_FREE_BT){
wifi_prov_event_handler_t scheme_event_handler = WIFI_PROV_SCHEME_BLE_EVENT_HANDLER_FREE_BT;
memcpy(&config.scheme_event_handler, &scheme_event_handler, sizeof(wifi_prov_event_handler_t));
} else if(scheme_handler == WIFI_PROV_SCHEME_HANDLER_FREE_BLE){
wifi_prov_event_handler_t scheme_event_handler = WIFI_PROV_SCHEME_BLE_EVENT_HANDLER_FREE_BLE;
memcpy(&config.scheme_event_handler, &scheme_event_handler, sizeof(wifi_prov_event_handler_t));
} else {
log_e("Unknown scheme handler!");
return;
}
#endif
wifiLowLevelInit(true);
if(wifi_prov_mgr_init(config) != ESP_OK){
log_e("wifi_prov_mgr_init failed!");
return;
}
if(wifi_prov_mgr_is_provisioned(&provisioned) != ESP_OK){
log_e("wifi_prov_mgr_is_provisioned failed!");
wifi_prov_mgr_deinit();
return;
}
if(provisioned == false) { if(provisioned == false) {
#if CONFIG_IDF_TARGET_ESP32 #if CONFIG_IDF_TARGET_ESP32
if(prov_scheme == WIFI_PROV_SCHEME_BLE) { if(prov_scheme == WIFI_PROV_SCHEME_BLE) {
...@@ -145,38 +137,46 @@ void WiFiProvClass :: beginProvision(void (*scheme_cb)(), wifi_prov_event_handle ...@@ -145,38 +137,46 @@ void WiFiProvClass :: beginProvision(void (*scheme_cb)(), wifi_prov_event_handle
#endif #endif
if(service_name == NULL) { if(service_name == NULL) {
char service_name_temp[12]; get_device_service_name(prov_scheme, service_name_temp, 32);
get_device_service_name(service_name_temp,sizeof(service_name_temp));
service_name = (const char *)service_name_temp; service_name = (const char *)service_name_temp;
} }
#if CONFIG_IDF_TARGET_ESP32 #if CONFIG_IDF_TARGET_ESP32
if(prov_scheme == WIFI_PROV_SCHEME_BLE) { if(prov_scheme == WIFI_PROV_SCHEME_BLE) {
log_i("Starting AP using BLE\n service_name : %s\n pop : %s",service_name,pop); log_i("Starting AP using BLE. service_name : %s, pop : %s",service_name,pop);
} else { } else {
#endif #endif
if(service_key == NULL) { if(service_key == NULL) {
log_i("Starting AP using SOFTAP\n service_name : %s\n pop : %s",service_name,pop); log_i("Starting provisioning AP using SOFTAP. service_name : %s, pop : %s",service_name,pop);
} else { } else {
log_i("Starting AP using SOFTAP\n service_name : %s\n password : %s\n pop : %s",service_name,service_key,pop); log_i("Starting provisioning AP using SOFTAP. service_name : %s, password : %s, pop : %s",service_name,service_key,pop);
} }
#if CONFIG_IDF_TARGET_ESP32 #if CONFIG_IDF_TARGET_ESP32
} }
#endif #endif
wifi_prov_mgr_start_provisioning(security,pop,service_name,service_key);
if(wifi_prov_mgr_endpoint_create("custom-data") != ESP_OK){
log_e("wifi_prov_mgr_endpoint_create failed!");
return;
}
if(wifi_prov_mgr_start_provisioning(security, pop, service_name, service_key) != ESP_OK){
log_e("wifi_prov_mgr_start_provisioning failed!");
return;
}
if(wifi_prov_mgr_endpoint_register("custom-data", custom_prov_data_handler, NULL) != ESP_OK){
log_e("wifi_prov_mgr_endpoint_register failed!");
return;
}
} else { } else {
wifi_prov_mgr_deinit(); wifi_prov_mgr_deinit();
WiFi.mode(WIFI_MODE_STA); log_i("Aleardy Provisioned");
log_i("Already Provisioned, starting Wi-Fi STA");
#if ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_INFO #if ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_INFO
wifi_config_t conf; static wifi_config_t conf;
esp_wifi_get_config(WIFI_IF_STA,&conf); esp_wifi_get_config(WIFI_IF_STA,&conf);
log_i("SSID : %s\n",conf.sta.ssid); log_i("Attempting connect to AP: %s\n",conf.sta.ssid);
#endif #endif
log_i("CONNECTING TO THE ACCESS POINT : "); esp_wifi_start();
WiFi.begin(); WiFi.begin();
} }
} }
WiFiProvClass WiFiProv;
/* /*
WiFiProv.h - Base class for provisioning support WiFiProv.h - Base class for provisioning support
All right reserved. All right reserved.
...@@ -19,30 +19,38 @@ ...@@ -19,30 +19,38 @@
#include "WiFi.h" #include "WiFi.h"
#include "wifi_provisioning/manager.h" #include "wifi_provisioning/manager.h"
#include "wifi_provisioning/scheme_ble.h"
//Select the scheme using which you want to provision //Select the scheme using which you want to provision
typedef enum typedef enum {
{ WIFI_PROV_SCHEME_SOFTAP,
#if CONFIG_IDF_TARGET_ESP32
WIFI_PROV_SCHEME_BLE, WIFI_PROV_SCHEME_BLE,
WIFI_PROV_SCHEME_SOFTAP #endif
}scheme_t; WIFI_PROV_SCHEME_MAX
} prov_scheme_t;
extern void provSchemeSoftAP(); typedef enum {
extern void provSchemeBLE(); WIFI_PROV_SCHEME_HANDLER_NONE,
#if CONFIG_IDF_TARGET_ESP32
WIFI_PROV_SCHEME_HANDLER_FREE_BTDM,
WIFI_PROV_SCHEME_HANDLER_FREE_BLE,
WIFI_PROV_SCHEME_HANDLER_FREE_BT,
#endif
WIFI_PROV_SCHEME_HANDLER_MAX
} scheme_handler_t;
//Provisioning class //Provisioning class
class WiFiProvClass class WiFiProvClass
{ {
protected:
static bool prov_enable;
public: public:
WiFiProvClass() {
prov_enable = false;
}
void beginProvision(void (*scheme_cb)() = provSchemeSoftAP, wifi_prov_event_handler_t scheme_event_handler = WIFI_PROV_EVENT_HANDLER_NONE, wifi_prov_security_t security = WIFI_PROV_SECURITY_1, const char * pop = "abcd1234", const char * service_name = NULL, const char * service_key = NULL, uint8_t *uuid = NULL); bool isProvEnabled();
void beginProvision(prov_scheme_t prov_scheme = WIFI_PROV_SCHEME_SOFTAP, scheme_handler_t scheme_handler = WIFI_PROV_SCHEME_HANDLER_NONE,
wifi_prov_security_t security = WIFI_PROV_SECURITY_1, const char * pop = "abcd1234", const char * service_name = NULL, const char * service_key = NULL, uint8_t *uuid = NULL);
}; };
extern WiFiProvClass WiFiProv;
/*
Event Handler for BLE
- WIFI_PROV_SCHEME_BLE_EVENT_HANDLER_FREE_BTDM
- WIFI_PROV_SCHEME_BLE_EVENT_HANDLER_FREE_BLE
- WIFI_PROV_SCHEME_BLE_EVENT_HANDLER_FREE_BT
Event Handler for SOFTAP
- WIFI_PROV_EVENT_HANDLER_NONE
*/
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册