//Routine to start a WiFi access point scan. int ICACHE_FLASH_ATTR cgiWiFiStartScan(void (*callback)(void *data, int count), void *data) { if (scanCallback) return 0; scanCallback = callback; scanCallbackData = data; wifiStartScan(); return 1; }
//This CGI is called from the bit of AJAX-code in wifi.tpl. It will initiate a //scan for access points and if available will return the result of an earlier scan. //The result is embedded in a bit of JSON parsed by the javascript in wifi.tpl. int ICACHE_FLASH_ATTR cgiWiFiScan(HttpdConnData *connData) { int len; int i; char buff[1024]; httpdStartResponse(connData, 200); httpdHeader(connData, "Content-Type", "text/json"); httpdEndHeaders(connData); if (cgiWifiAps.scanInProgress==1) { len=os_sprintf(buff, "{\n \"result\": { \n\"inProgress\": \"1\"\n }\n}\n"); espconn_sent(connData->conn, (uint8 *)buff, len); } else { len=os_sprintf(buff, "{\n \"result\": { \n\"inProgress\": \"0\", \n\"APs\": [\n"); espconn_sent(connData->conn, (uint8 *)buff, len); if (cgiWifiAps.apData==NULL) cgiWifiAps.noAps=0; for (i=0; i<cgiWifiAps.noAps; i++) { len=os_sprintf(buff, "{\"essid\": \"%s\", \"rssi\": \"%d\", \"enc\": \"%d\"}%s\n", cgiWifiAps.apData[i]->ssid, cgiWifiAps.apData[i]->rssi, cgiWifiAps.apData[i]->enc, (i==cgiWifiAps.noAps-1)?"":","); espconn_sent(connData->conn, (uint8 *)buff, len); } len=os_sprintf(buff, "]\n}\n}\n"); espconn_sent(connData->conn, (uint8 *)buff, len); wifiStartScan(); } return HTTPD_CGI_DONE; }
//This CGI is called from the bit of AJAX-code in wifi.tpl. It will initiate a //scan for access points and if available will return the result of an earlier scan. //The result is embedded in a bit of JSON parsed by the javascript in wifi.tpl. int ICACHE_FLASH_ATTR cgiWiFiScan(HttpdConnData *connData) { int len; int i; char buff[1024]; httpdStartResponse(connData, 200); httpdHeader(connData, "Content-Type", "text/json"); httpdEndHeaders(connData); if (cgiWifiAps.scanInProgress==1) { //We're still scanning. Tell Javascript code that. len=os_sprintf(buff, "{\n \"result\": { \n\"inProgress\": \"1\"\n }\n}\n"); espconn_sent(connData->conn, (uint8 *)buff, len); } else { //We have a scan result. Pass it on. len=os_sprintf(buff, "{\n \"result\": { \n\"inProgress\": \"0\", \n\"APs\": [\n"); espconn_sent(connData->conn, (uint8 *)buff, len); if (cgiWifiAps.apData==NULL) cgiWifiAps.noAps=0; for (i=0; i<cgiWifiAps.noAps; i++) { //Fill in json code for an access point len=os_sprintf(buff, "{\"essid\": \"%s\", \"rssi\": \"%d\", \"enc\": \"%d\"}%s\n", cgiWifiAps.apData[i]->ssid, cgiWifiAps.apData[i]->rssi, cgiWifiAps.apData[i]->enc, (i==cgiWifiAps.noAps-1)?"":","); espconn_sent(connData->conn, (uint8 *)buff, len); } len=os_sprintf(buff, "]\n}\n}\n"); espconn_sent(connData->conn, (uint8 *)buff, len); //Also start a new scan. wifiStartScan(); } return HTTPD_CGI_DONE; }
// ---------------------------------------------------------------------------- // Commander functions: // ---------------------------------------------------------------------------- static void command(char cmd) { switch(cmd) { case 'l': ioLed(2); break; // Turn test LED off case 'm': scanLED(0); break; // Turn Motor off case 'M': scanLED(1); break; // Turn Motor on case 'h': menu(); break; // show menu case 'd': disconnect(); break; // disconnect station case 'c': connect_st_mode(); break; // connect case 'i': wifi_check_ip(NULL); break; // Test for IP and send case 'u': create_udp(); break; // send test message case 's': send_msg(); break; // send test message case 'w': wifiStartScan(); break; // Scan for AP's case 'a': logwifiaps(); break; // Scan for AP's and log via UDP default: break; } }
//This CGI is called from the bit of AJAX-code in wifi.tpl. It will initiate a //scan for access points and if available will return the result of an earlier scan. //The result is embedded in a bit of JSON parsed by the javascript in wifi.tpl. int ICACHE_FLASH_ATTR cgiWiFiScan(HttpdConnData *connData) { int pos=(int)connData->cgiData; int len; char buff[1024]; if (!cgiWifiAps.scanInProgress && pos!=0) { //Fill in json code for an access point if (pos-1<cgiWifiAps.noAps) { len=os_sprintf(buff, "{\"essid\": \"%s\", \"rssi\": \"%d\", \"enc\": \"%d\"}%s\n", cgiWifiAps.apData[pos-1]->ssid, cgiWifiAps.apData[pos-1]->rssi, cgiWifiAps.apData[pos-1]->enc, (pos-1==cgiWifiAps.noAps-1)?"":","); httpdSend(connData, buff, len); } pos++; if ((pos-1)>=cgiWifiAps.noAps) { len=os_sprintf(buff, "]\n}\n}\n"); httpdSend(connData, buff, len); //Also start a new scan. wifiStartScan(); return HTTPD_CGI_DONE; } else { connData->cgiData=(void*)pos; return HTTPD_CGI_MORE; } } httpdStartResponse(connData, 200); httpdHeader(connData, "Content-Type", "text/json"); httpdEndHeaders(connData); if (cgiWifiAps.scanInProgress==1) { //We're still scanning. Tell Javascript code that. len=os_sprintf(buff, "{\n \"result\": { \n\"inProgress\": \"1\"\n }\n}\n"); httpdSend(connData, buff, len); return HTTPD_CGI_DONE; } else { //We have a scan result. Pass it on. len=os_sprintf(buff, "{\n \"result\": { \n\"inProgress\": \"0\", \n\"APs\": [\n"); httpdSend(connData, buff, len); if (cgiWifiAps.apData==NULL) cgiWifiAps.noAps=0; connData->cgiData=(void *)1; return HTTPD_CGI_MORE; } }