/** * WPS callback * @param status wps_cb_status */ void wifi_wps_status_cb(wps_cb_status status) { DEBUGV("wps cb status: %d\r\n", status); switch(status) { case WPS_CB_ST_SUCCESS: if(!wifi_wps_disable()) { DEBUGV("wps disable failed\n"); } wifi_station_connect(); break; case WPS_CB_ST_FAILED: DEBUGV("wps FAILED\n"); break; case WPS_CB_ST_TIMEOUT: DEBUGV("wps TIMEOUT\n"); break; case WPS_CB_ST_WEP: DEBUGV("wps WEP\n"); break; case WPS_CB_ST_UNK: DEBUGV("wps UNKNOWN\n"); if(!wifi_wps_disable()) { DEBUGV("wps disable failed\n"); } break; } // TODO user function to get status esp_schedule(); // resume the beginWPSConfig function }
LOCAL void ICACHE_FLASH_ATTR user_wps_key_short_press(void) { wifi_wps_disable(); wifi_wps_enable(WPS_TYPE_PBC); wifi_set_wps_cb(user_wps_status_cb); wifi_wps_start(); }
LOCAL void ICACHE_FLASH_ATTR user_wps_status_cb(int status) { switch (status) { case WPS_CB_ST_SUCCESS: wifi_wps_disable(); wifi_station_connect(); break; case WPS_CB_ST_FAILED: case WPS_CB_ST_TIMEOUT: wifi_wps_start(); break; } }
// WPS Status callback // - use callback to signal success // - restart up to 10 times // - slow blink (0,5Hz) if no success -> restart necessary void wpsStatus(int status) { if (status == WPS_CB_ST_SUCCESS) { Serial.println("WPS config successful"); wifi_wps_disable(); WifiStation.connect(); blinkTimer->stop(); if (connectDelegate) connectDelegate(); } else { wifi_wps_disable(); wpsRepeatCounter--; if (wpsRepeatCounter>0) { Serial.print("WPS repeat"); wifi_wps_enable(WPS_TYPE_PBC); wifi_set_wps_cb(&wpsStatus); wpsTimer->initializeMs(15000,TimerDelegate(&wpsStart)).startOnce(); } else { wifi_wps_disable(); blinkTimer->initializeMs(1000, wpsBlinkIndicator).start(); wpsTimer->stop(); } } }
bool ESP8266WiFiClass::beginWPSConfig(void) { _useClientMode = true; if(_useApMode) { // turn on AP+STA mode mode(WIFI_AP_STA); } else { // turn on STA mode mode(WIFI_STA); } disconnect(); DEBUGV("wps begin\n"); if(!wifi_wps_disable()) { DEBUGV("wps disable faild\n"); return false; } // so far only WPS_TYPE_PBC is supported (SDK 1.2.0) if(!wifi_wps_enable(WPS_TYPE_PBC)) { DEBUGV("wps enable faild\n"); return false; } if(!wifi_set_wps_cb(&wifi_wps_status_cb)) { DEBUGV("wps cb faild\n"); return false; } if(!wifi_wps_start()) { DEBUGV("wps start faild\n"); return false; } esp_yield(); // will return here when wifi_wps_status_cb fires return true; }
void wifi_wps_status_cb(WPS_CB_STATUS_t status) { DEBUGV("wps cb status: %d\r\n", status); switch (status) { case WPS_CB_ST_SUCCESS: if(!wifi_wps_disable()) { DEBUGV("wps disable faild\n"); } wifi_station_connect(); break; case WPS_CB_ST_FAILED: DEBUGV("wps FAILD\n"); break; case WPS_CB_ST_TIMEOUT: DEBUGV("wps TIMEOUT\n"); break; } // todo user function to get status esp_schedule(); // resume the beginWPSConfig function }
/** * WPS config * so far only WPS_TYPE_PBC is supported (SDK 1.2.0) * @return ok */ bool ESP8266WiFiSTAClass::beginWPSConfig(void) { if(!WiFi.enableSTA(true)) { // enable STA failed return false; } disconnect(); DEBUGV("wps begin\n"); if(!wifi_wps_disable()) { DEBUGV("wps disable failed\n"); return false; } // so far only WPS_TYPE_PBC is supported (SDK 1.2.0) if(!wifi_wps_enable(WPS_TYPE_PBC)) { DEBUGV("wps enable failed\n"); return false; } if(!wifi_set_wps_cb((wps_st_cb_t) &wifi_wps_status_cb)) { DEBUGV("wps cb failed\n"); return false; } if(!wifi_wps_start()) { DEBUGV("wps start failed\n"); return false; } esp_yield(); // will return here when wifi_wps_status_cb fires return true; }