瀏覽代碼

Added wifi scanmode NVS option - release

f= default, fast scan
a= All channel scan
Sebastien 4 年之前
父節點
當前提交
3ffbe022e5
共有 2 個文件被更改,包括 92 次插入5 次删除
  1. 82 4
      components/platform_console/cmd_system.c
  2. 10 1
      components/wifi-manager/wifi_manager.c

+ 82 - 4
components/platform_console/cmd_system.c

@@ -41,7 +41,13 @@ static struct {
 	struct arg_str *name;
 	struct arg_end *end;
 } name_args;
-
+static struct {
+ 	struct arg_lit *telnet;
+ 	struct arg_lit *btspeaker;
+ 	struct arg_lit *airplay;
+ 	struct arg_lit *stats;
+    struct arg_end *end;
+} set_services_args;
 static const char * TAG = "cmd_system";
 
 static void register_setbtsource();
@@ -55,6 +61,7 @@ static void register_light_sleep();
 static void register_factory_boot();
 static void register_restart_ota();
 static void register_update_certs();
+static void register_set_services();
 #if WITH_TASKS_INFO
 static void register_tasks();
 #endif
@@ -63,6 +70,7 @@ void register_system()
 {
 	register_setbtsource();
     register_free();
+    register_set_services();
     register_heap();
     register_setdevicename();
     register_version();
@@ -110,9 +118,6 @@ static void register_version()
     ESP_ERROR_CHECK( esp_console_cmd_register(&cmd) );
 }
 
-/** 'restart' command restarts the program */
-
-
 esp_err_t guided_boot(esp_partition_subtype_t partition_subtype)
 {
 if(is_recovery_running){
@@ -582,7 +587,80 @@ static void register_deep_sleep()
     };
     ESP_ERROR_CHECK( esp_console_cmd_register(&cmd) );
 }
+static int enable_disable(FILE * f,char * nvs_name, struct arg_lit *arg){
+	esp_err_t err = config_set_value(NVS_TYPE_STR, nvs_name, arg->count>0?"Y":"N");
+	const char * name = arg->hdr.longopts?arg->hdr.longopts:arg->hdr.glossary;
+
+	if(err!=ESP_OK){
+		fprintf(f,"Error %s %s. %s\n",arg->count>0?"Enabling":"Disabling", name, esp_err_to_name(err));
+	}
+	else {
+		fprintf(f,"%s %s\n",arg->count>0?"Enabled":"Disabled",name);
+	}
+	return err;
+}
+static int do_set_services(int argc, char **argv)
+{
+    int nerrors = arg_parse_msg(argc, argv,(struct arg_hdr **)&set_services_args);
+    if (nerrors != 0) {
+        return 0;
+    }
+	char *buf = NULL;
+	size_t buf_size = 0;
+	FILE *f = open_memstream(&buf, &buf_size);
+	if (f == NULL) {
+		log_send_messaging(MESSAGING_ERROR,"Unable to open memory stream.");
+		return 0;
+	}
+
+	nerrors += enable_disable(f,"enable_airplay",set_services_args.airplay);
+	nerrors += enable_disable(f,"enable_bt_sink",set_services_args.btspeaker);
+	nerrors += enable_disable(f,"telnet_enable",set_services_args.telnet);
+	nerrors += enable_disable(f,"stats",set_services_args.stats);
+	fflush (f);
+	log_send_messaging(nerrors>0?MESSAGING_ERROR:MESSAGING_INFO,"%s", buf);
+	fclose(f);
+	FREE_AND_NULL(buf);
+	return nerrors==0;
+}
+
+cJSON * set_services_cb(){
+	cJSON * values = cJSON_CreateObject();
+	char * p=NULL;
+	if ((p = config_alloc_get(NVS_TYPE_STR, "enable_bt_sink")) != NULL) {
+		cJSON_AddBoolToObject(values,"BT_Speaker",strcmp(p,"1") == 0 || strcasecmp(p,"y") == 0);
+		FREE_AND_NULL(p);
+	}
+	if ((p = config_alloc_get(NVS_TYPE_STR, "enable_airplay")) != NULL) {
+		cJSON_AddBoolToObject(values,"AirPlay",strcmp(p,"1") == 0 || strcasecmp(p,"y") == 0);
+		FREE_AND_NULL(p);
+	}
+	if ((p = config_alloc_get(NVS_TYPE_STR, "telnet_enable")) != NULL) {
+		cJSON_AddBoolToObject(values,"telnet",strcasestr("YXD",p)!=NULL);
+		FREE_AND_NULL(p);
+	}
+	if((p = config_alloc_get_default(NVS_TYPE_STR, "stats", "n", 0))!=NULL){
+		cJSON_AddBoolToObject(values,"stats",(*p == '1' || *p == 'Y' || *p == 'y')) ;
+	}
+	return values;
+}
 
+static void register_set_services(){
+	set_services_args.airplay = arg_lit0(NULL, "AirPlay", "AirPlay");
+	set_services_args.btspeaker = arg_lit0(NULL, "BT_Speaker", "Bluetooth Speaker");
+	set_services_args.telnet= arg_lit0(NULL, "telnet", "Telnet server. Use only for troubleshooting");
+	set_services_args.stats= arg_lit0(NULL, "stats", "System Statistics. Use only for troubleshooting");
+    set_services_args.end=arg_end(2);
+	const esp_console_cmd_t cmd = {
+        .command = "set_services",
+        .help = "Services",
+		.argtable = &set_services_args,
+        .hint = NULL,
+        .func = &do_set_services,
+    };
+	cmd_to_json_with_cb(&cmd,&set_services_cb);
+    ESP_ERROR_CHECK( esp_console_cmd_register(&cmd) );
+}
 /** 'light_sleep' command puts the chip into light sleep mode */
 
 static struct {

+ 10 - 1
components/wifi-manager/wifi_manager.c

@@ -1284,7 +1284,16 @@ void wifi_manager( void * pvParameters ){
 						}
 					}
 					ESP_LOGD(TAG,   "MESSAGE: ORDER_CONNECT_STA - setting config for WIFI_IF_STA");
-					if((err=esp_wifi_set_config(WIFI_IF_STA, wifi_manager_get_wifi_sta_config()))!=ESP_OK) {
+					wifi_config_t* cfg = wifi_manager_get_wifi_sta_config();
+				    char * scan_mode = config_alloc_get_default(NVS_TYPE_STR, "wifi_smode", "f", 0);
+				    if (scan_mode && strcasecmp(scan_mode,"a")==0) {
+				    	cfg->sta.scan_method=WIFI_ALL_CHANNEL_SCAN;
+				    }
+				    else {
+				    	cfg->sta.scan_method=WIFI_FAST_SCAN;
+				    }
+				    FREE_AND_NULL(scan_mode);
+					if((err=esp_wifi_set_config(WIFI_IF_STA, cfg))!=ESP_OK) {
 						ESP_LOGE(TAG,  "Failed to set STA configuration. Error %s",esp_err_to_name(err));
 						break;
 					}