static int wifi_cli(int argc, char **argv) { struct wifi_if *wi; int i; if (argc < 2) { goto usage; } wi = wifi_if_lookup(0); if (!strcmp(argv[1], "start")) { wifi_start(wi); } else if (!strcmp(argv[1], "stop")) { wifi_stop(wi); } else if (!strcmp(argv[1], "scan")) { wifi_scan_start(wi); } else if (!strcmp(argv[1], "aps")) { int i; struct wifi_ap *ap; console_printf(" %32s %4s %4s %s\n", "SSID", "RSSI", "chan", "sec"); for (i = 0; i < wi->wi_scan_cnt; i++) { ap = (struct wifi_ap *)&wi->wi_scan[i]; console_printf("%2d:%32s %4d %4d %s\n", i, ap->wa_ssid, ap->wa_rssi, ap->wa_channel, ap->wa_key_type ? "X" : ""); } } else if (!strcmp(argv[1], "connect")) { if (argc < 2) { goto conn_usage; } i = strlen(argv[2]); if (i >= sizeof(wi->wi_ssid)) { goto conn_usage; } if (argc > 2) { i = strlen(argv[2]); if (i >= sizeof(wi->wi_key)) { goto conn_usage; } strcpy(wi->wi_key, argv[3]); } strcpy(wi->wi_ssid, argv[2]); if (wifi_connect(wi)) { conn_usage: console_printf("%s %s <ssid> [<key>]\n", argv[0], argv[1]); } } else { usage: console_printf("start|stop|scan|aps|connect <ssid> [<key>]\n"); } return 0; }
void ICACHE_FLASH_ATTR wifi_scan_get_result(char *response) { if (wifi_scan_in_progress) { webserver_set_status(0); return; } if (wifi_scan_ap_count == 0 || wifi_scan_result == NULL) { if (wifi_scan_start()) { webserver_set_status(0); return; } webserver_set_status(200); json_error(response, ESP8266, "Can not start scan", NULL); return; } webserver_set_status(200); char result[WEBSERVER_MAX_VALUE*wifi_scan_ap_count]; os_memset(result, '\0', sizeof(result)); uint8 i=0; for (i=0; i<wifi_scan_ap_count; i++) { os_sprintf( result + os_strlen(result), "%s{\"SSID\" : \"%s\", \"Strength\" : %d, \"Mode\" : \"%s\"}", i > 0 ? ", " : "", wifi_scan_result[i]->ssid, wifi_scan_result[i]->rssi, wifi_auth_mode_str(wifi_scan_result[i]->authmode) ); } char data_str[WEBSERVER_MAX_VALUE*wifi_scan_ap_count]; json_data( response, ESP8266, OK_STR, json_sprintf( data_str, "\"WiFi\" : [%s]", result ), NULL ); }