From 485a383e6d5950648a5d4bc701be5ae094acb9c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Hru=C5=A1ka?= Date: Sat, 7 May 2016 22:03:12 +0200 Subject: [PATCH] working WPS and cmd to set AP Former-commit-id: a2a02ab2dfb61e6f3552ccae7b7831b6647ead56 --- libesphttpd/util/cgiwifi.c | 4 ++-- user/datalink.h | 2 ++ user/utils.c | 2 +- user/utils.h | 2 +- user/wificontrol.c | 27 +++++++++++++++++++-------- 5 files changed, 25 insertions(+), 12 deletions(-) diff --git a/libesphttpd/util/cgiwifi.c b/libesphttpd/util/cgiwifi.c index 0cde23a..f948a6c 100644 --- a/libesphttpd/util/cgiwifi.c +++ b/libesphttpd/util/cgiwifi.c @@ -316,7 +316,7 @@ httpd_cgi_state ICACHE_FLASH_ATTR cgiWiFiConnStatus(HttpdConnData *connData) { //Template code for the WLAN page. httpd_cgi_state ICACHE_FLASH_ATTR tplWlan(HttpdConnData *connData, char *token, void **arg) { char buff[256]; - int x; + WIFI_MODE x; static struct station_config stconf; if (token==NULL) return HTTPD_CGI_DONE; wifi_station_get_config(&stconf); @@ -331,7 +331,7 @@ httpd_cgi_state ICACHE_FLASH_ATTR tplWlan(HttpdConnData *connData, char *token, // strcpy(buff, (char*)stconf.password); } else if (strcmp(token, "WiFiapwarn")==0) { x=wifi_get_opmode(); - if (x==2) { + if (x==SOFTAP_MODE) { strcpy(buff, "Can't scan in this mode. Click here to go to STA+AP mode."); } else { strcpy(buff, "Click here to go to stand-alone AP mode."); diff --git a/user/datalink.h b/user/datalink.h index fd34834..392a692 100644 --- a/user/datalink.h +++ b/user/datalink.h @@ -7,9 +7,11 @@ // request to capture data... #define DG_REQUEST_RAW 40 #define DG_REQUEST_FFT 41 + // reporting #define DG_REQUEST_STORE_REF 42 // request to capture & store reference FFT #define DG_REQUEST_COMPARE_REF 43 // request to capture FFT & compare with reference + // wifi status & control #define DG_SETMODE_AP 44 // request AP mode (AP button pressed) #define DG_WPS_START 45 // start WPS diff --git a/user/utils.c b/user/utils.c index 30f8472..8514179 100644 --- a/user/utils.c +++ b/user/utils.c @@ -29,7 +29,7 @@ const FLASH_FN char *auth2str(AUTH_MODE auth) } } -const FLASH_FN char *opmode2str(int opmode) +const FLASH_FN char *opmode2str(WIFI_MODE opmode) { switch (opmode) { case NULL_MODE: return "Disabled"; diff --git a/user/utils.h b/user/utils.h index 3ab70cd..5efc93e 100644 --- a/user/utils.h +++ b/user/utils.h @@ -5,6 +5,6 @@ int rssi2perc(int rssi); const char *auth2str(AUTH_MODE auth); -const char *opmode2str(int opmode); +const char *opmode2str(WIFI_MODE opmode); #endif // UTILS_H diff --git a/user/wificontrol.c b/user/wificontrol.c index 7eeb993..f0f80de 100644 --- a/user/wificontrol.c +++ b/user/wificontrol.c @@ -10,9 +10,9 @@ void FLASH_FN wificontrol_setmode_ap(void) { wifi_station_disconnect(); // disconnect - wifi_set_opmode(SOFTAP_MODE); // enter AP mode + wifi_set_opmode(STATIONAP_MODE); // enter AP mode - warn("SBMP request to switch to SoftAP mode. Restarting...\n"); + warn("Received Rq to enable AP.\n");// Restarting... system_restart(); // TODO check if restart is needed } @@ -42,10 +42,13 @@ static void FLASH_FN my_wps_cb(int status) info("WPS success!"); wifi_wps_disable(); wifi_station_connect(); + os_timer_disarm(&wps_abort_timer); break; default: error("WPS failed."); + wifi_wps_disable(); + os_timer_disarm(&wps_abort_timer); break; } @@ -54,23 +57,31 @@ static void FLASH_FN my_wps_cb(int status) void FLASH_FN wificontrol_start_wps(void) { + if (wps_in_progress) { + warn("Request to abort WPS."); + wifi_wps_disable(); + wps_in_progress = false; + return; + } + info("Starting WPS..."); // Make sure station is enabled - if (wifi_get_opmode() == SOFTAP_MODE) { - wifi_set_opmode(STATIONAP_MODE); - } - + wifi_set_opmode(STATION_MODE); // Disconnect if connected to any station wifi_station_disconnect(); + os_delay_us(1000000); + // enable WPS - wifi_set_wps_cb(my_wps_cb); + wifi_wps_disable(); wifi_wps_enable(WPS_TYPE_PBC); + wifi_set_wps_cb(my_wps_cb); + wifi_wps_start(); os_timer_disarm(&wps_abort_timer); os_timer_setfn(&wps_abort_timer, abort_wps_cb, NULL); - os_timer_arm(&wps_abort_timer, 15000, false); // 15 seconds + os_timer_arm(&wps_abort_timer, 60000, false); // 15 seconds wps_in_progress = true; }