From 52b063ae467834cff88da9da8df3cefbc5836f37 Mon Sep 17 00:00:00 2001 From: dannybackx Date: Tue, 21 Mar 2017 17:52:25 +0100 Subject: [PATCH] Add code to trigger a scan for wifi networks --- cmd/cmd.h | 1 + cmd/handlers.c | 1 + esp-link/cgiwifi.c | 15 ++++++++++++++- esp-link/cgiwifi.h | 1 + 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/cmd/cmd.h b/cmd/cmd.h index 0286c9a..85032df 100644 --- a/cmd/cmd.h +++ b/cmd/cmd.h @@ -66,6 +66,7 @@ typedef enum { CMD_WIFI_SELECT_SSID, CMD_WIFI_SIGNAL_STRENGTH, // Query RSSI CMD_WIFI_GET_SSID, // Query SSID currently connected to + CMD_WIFI_START_SCAN, // Trigger a scan (takes a long time) } CmdName; diff --git a/cmd/handlers.c b/cmd/handlers.c index 5b03a46..1be8b6e 100644 --- a/cmd/handlers.c +++ b/cmd/handlers.c @@ -62,6 +62,7 @@ const CmdList commands[] = { {CMD_WIFI_SELECT_SSID, "WIFI_SELECT_SSID", cmdWifiSelectSSID}, {CMD_WIFI_SIGNAL_STRENGTH, "WIFI_SIGNAL_STRENGTH", cmdWifiSignalStrength}, {CMD_WIFI_GET_SSID, "WIFI_GET_SSID", cmdWifiQuerySSID}, + {CMD_WIFI_START_SCAN, "WIFI_START_SCAN", cmdWifiStartScan}, #ifdef MQTT {CMD_MQTT_SETUP, "MQTT_SETUP", MQTTCMD_Setup}, diff --git a/esp-link/cgiwifi.c b/esp-link/cgiwifi.c index 2daf8b0..4543113 100644 --- a/esp-link/cgiwifi.c +++ b/esp-link/cgiwifi.c @@ -227,6 +227,7 @@ static void ICACHE_FLASH_ATTR scanStartCb(void *arg) { wifi_station_scan(NULL, wifiScanDoneCb); } +// Start scanning, web interface static int ICACHE_FLASH_ATTR cgiWiFiStartScan(HttpdConnData *connData) { if (connData->conn==NULL) return HTTPD_CGI_DONE; // Connection aborted. Clean up. jsonHeader(connData, 200); @@ -239,6 +240,16 @@ static int ICACHE_FLASH_ATTR cgiWiFiStartScan(HttpdConnData *connData) { return HTTPD_CGI_DONE; } +// Start scanning, API interface +void ICACHE_FLASH_ATTR cmdWifiStartScan(CmdPacket *cmd) { + if (!cgiWifiAps.scanInProgress) { + cgiWifiAps.scanInProgress = 1; + os_timer_disarm(&scanTimer); + os_timer_setfn(&scanTimer, scanStartCb, NULL); + os_timer_arm(&scanTimer, 200, 0); + } +} + static int ICACHE_FLASH_ATTR cgiWiFiGetScan(HttpdConnData *connData) { if (connData->conn==NULL) return HTTPD_CGI_DONE; // Connection aborted. Clean up. char buff[1460]; @@ -955,6 +966,8 @@ void ICACHE_FLASH_ATTR wifiInit() { // Access functions for cgiWifiAps int ICACHE_FLASH_ATTR wifiGetApCount() { + if (cgiWifiAps.scanInProgress) + return 0; return cgiWifiAps.noAps; } @@ -1002,6 +1015,6 @@ void ICACHE_FLASH_ATTR cmdWifiQuerySSID(CmdPacket *cmd) { os_printf("QuerySSID : %s\n", conf.ssid); cmdResponseStart(CMD_RESP_CB, callback, 1); - cmdResponseBody(conf.ssid, strlen(conf.ssid)+1); + cmdResponseBody(conf.ssid, strlen((char *)conf.ssid)+1); cmdResponseEnd(); } diff --git a/esp-link/cgiwifi.h b/esp-link/cgiwifi.h index c142649..bf5d803 100644 --- a/esp-link/cgiwifi.h +++ b/esp-link/cgiwifi.h @@ -29,5 +29,6 @@ void wifiGetApName(int, char *); int wifiSignalStrength(int); void connectToNetwork(char *, char *); void cmdWifiQuerySSID(CmdPacket *cmd); +void cmdWifiStartScan(CmdPacket *cmd); #endif