瀏覽代碼

Refactor configuration. needs new recovery image! -- release

In order to use this new release, it is recommended to erase the flash
and replace the recovery partition with one that is at least at this
level.
Sebastien 5 年之前
父節點
當前提交
e9ba659b4f

+ 1 - 1
build-scripts/16M-sdkconfig.defaults

@@ -143,4 +143,4 @@ CONFIG_DEFAULT_AP_PASSWORD="squeezelite"
 CONFIG_DEFAULT_AP_IP="192.168.4.1"
 CONFIG_DEFAULT_AP_GATEWAY="192.168.4.1"
 CONFIG_DEFAULT_AP_NETMASK="255.255.255.0"
-CONFIG_DEFAULT_COMMAND_LINE="squeezelite -o I2S -b 500:2000 -d all=info -s %s"
+CONFIG_DEFAULT_COMMAND_LINE="squeezelite -o I2S -b 500:2000 -d all=info "

+ 1 - 1
build-scripts/I2S-16MFlash-sdkconfig.defaults

@@ -116,7 +116,7 @@ CONFIG_DEFAULT_AP_GATEWAY="192.168.4.1"
 CONFIG_DEFAULT_AP_NETMASK="255.255.255.0"
 CONFIG_DEFAULT_AP_MAX_CONNECTIONS=4
 CONFIG_DEFAULT_AP_BEACON_INTERVAL=100
-CONFIG_DEFAULT_COMMAND_LINE="squeezelite -o I2S -b 500:2000 -d all=info -s %s"
+CONFIG_DEFAULT_COMMAND_LINE="squeezelite -o I2S -b 500:2000 -d all=info "
 
 CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE=y
 CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y

+ 1 - 1
build-scripts/I2S-4MFlash-sdkconfig.defaults

@@ -116,7 +116,7 @@ CONFIG_DEFAULT_AP_GATEWAY="192.168.4.1"
 CONFIG_DEFAULT_AP_NETMASK="255.255.255.0"
 CONFIG_DEFAULT_AP_MAX_CONNECTIONS=4
 CONFIG_DEFAULT_AP_BEACON_INTERVAL=100
-CONFIG_DEFAULT_COMMAND_LINE="squeezelite -o I2S -b 500:2000 -d all=info -s %s"
+CONFIG_DEFAULT_COMMAND_LINE="squeezelite -o I2S -b 500:2000 -d all=info "
 
 CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE=y
 CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y

+ 1 - 1
build-scripts/NonOTA-16M-sdkconfig.defaults

@@ -139,4 +139,4 @@ CONFIG_DEFAULT_AP_PASSWORD="squeezelite"
 CONFIG_DEFAULT_AP_IP="192.168.4.1"
 CONFIG_DEFAULT_AP_GATEWAY="192.168.4.1"
 CONFIG_DEFAULT_AP_NETMASK="255.255.255.0"
-CONFIG_DEFAULT_COMMAND_LINE="squeezelite -o I2S -b 500:2000 -d all=info -s %s"
+CONFIG_DEFAULT_COMMAND_LINE="squeezelite -o I2S -b 500:2000 -d all=info "

+ 1 - 1
build-scripts/NonOTA-I2S-16MFlash-sdkconfig.defaults

@@ -116,7 +116,7 @@ CONFIG_DEFAULT_AP_GATEWAY="192.168.4.1"
 CONFIG_DEFAULT_AP_NETMASK="255.255.255.0"
 CONFIG_DEFAULT_AP_MAX_CONNECTIONS=4
 CONFIG_DEFAULT_AP_BEACON_INTERVAL=100
-CONFIG_DEFAULT_COMMAND_LINE="squeezelite -o I2S -b 500:2000 -d all=info -s %s"
+CONFIG_DEFAULT_COMMAND_LINE="squeezelite -o I2S -b 500:2000 -d all=info "
 
 CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE=y
 CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y

+ 1 - 1
build-scripts/NonOTA-I2S-4MFlash-sdkconfig.defaults

@@ -116,7 +116,7 @@ CONFIG_DEFAULT_AP_GATEWAY="192.168.4.1"
 CONFIG_DEFAULT_AP_NETMASK="255.255.255.0"
 CONFIG_DEFAULT_AP_MAX_CONNECTIONS=4
 CONFIG_DEFAULT_AP_BEACON_INTERVAL=100
-CONFIG_DEFAULT_COMMAND_LINE="squeezelite -o I2S -b 500:2000 -d all=info -s %s"
+CONFIG_DEFAULT_COMMAND_LINE="squeezelite -o I2S -b 500:2000 -d all=info "
 
 CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE=y
 CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y

+ 1 - 1
build-scripts/NonOTA-SqueezeAmp-sdkconfig.defaults

@@ -104,7 +104,7 @@ CONFIG_DEFAULT_AP_GATEWAY="192.168.4.1"
 CONFIG_DEFAULT_AP_NETMASK="255.255.255.0"
 CONFIG_DEFAULT_AP_MAX_CONNECTIONS=4
 CONFIG_DEFAULT_AP_BEACON_INTERVAL=100
-CONFIG_DEFAULT_COMMAND_LINE="squeezelite -o I2S -b 500:2000 -d all=info -s %s"
+CONFIG_DEFAULT_COMMAND_LINE="squeezelite -o I2S -b 500:2000 -d all=info "
 
 CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE=y
 CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y

+ 1 - 1
build-scripts/SqueezeAmp4MBFlash-sdkconfig.defaults

@@ -104,7 +104,7 @@ CONFIG_DEFAULT_AP_GATEWAY="192.168.4.1"
 CONFIG_DEFAULT_AP_NETMASK="255.255.255.0"
 CONFIG_DEFAULT_AP_MAX_CONNECTIONS=4
 CONFIG_DEFAULT_AP_BEACON_INTERVAL=100
-CONFIG_DEFAULT_COMMAND_LINE="squeezelite -o I2S -b 500:2000 -d all=info -s %s"
+CONFIG_DEFAULT_COMMAND_LINE="squeezelite -o I2S -b 500:2000 -d all=info "
 
 CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE=y
 CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y

+ 1 - 1
build-scripts/SqueezeAmp8MBFlash-sdkconfig.defaults

@@ -71,7 +71,7 @@ CONFIG_DEFAULT_AP_GATEWAY="192.168.4.1"
 CONFIG_DEFAULT_AP_NETMASK="255.255.255.0"
 CONFIG_DEFAULT_AP_MAX_CONNECTIONS=4
 CONFIG_DEFAULT_AP_BEACON_INTERVAL=100
-CONFIG_DEFAULT_COMMAND_LINE="squeezelite -o I2S -b 500:2000 -d all=info -s %s"
+CONFIG_DEFAULT_COMMAND_LINE="squeezelite -o I2S -b 500:2000 -d all=info "
 CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE=y
 CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y
 CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y

+ 1 - 1
build-scripts/squeezelite-esp32-16M-sdkconfig.defaults

@@ -137,4 +137,4 @@ CONFIG_DEFAULT_AP_PASSWORD="squeezelite"
 CONFIG_DEFAULT_AP_IP="192.168.4.1"
 CONFIG_DEFAULT_AP_GATEWAY="192.168.4.1"
 CONFIG_DEFAULT_AP_NETMASK="255.255.255.0"
-CONFIG_DEFAULT_COMMAND_LINE="squeezelite -o I2S -b 500:2000 -d all=info -s %s"
+CONFIG_DEFAULT_COMMAND_LINE="squeezelite -o I2S -b 500:2000 -d all=info "

+ 1 - 1
build-scripts/squeezelite-esp32-I2S-16MFlash-sdkconfig.defaults

@@ -115,7 +115,7 @@ CONFIG_DEFAULT_AP_GATEWAY="192.168.4.1"
 CONFIG_DEFAULT_AP_NETMASK="255.255.255.0"
 CONFIG_DEFAULT_AP_MAX_CONNECTIONS=4
 CONFIG_DEFAULT_AP_BEACON_INTERVAL=100
-CONFIG_DEFAULT_COMMAND_LINE="squeezelite -o I2S -b 500:2000 -d all=info -s %s"
+CONFIG_DEFAULT_COMMAND_LINE="squeezelite -o I2S -b 500:2000 -d all=info "
 
 CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE=y
 CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y

+ 1 - 1
build-scripts/squeezelite-esp32-I2S-4MFlash-NOAirplay-sdkconfig.defaults

@@ -112,7 +112,7 @@ CONFIG_DEFAULT_AP_GATEWAY="192.168.4.1"
 CONFIG_DEFAULT_AP_NETMASK="255.255.255.0"
 CONFIG_DEFAULT_AP_MAX_CONNECTIONS=4
 CONFIG_DEFAULT_AP_BEACON_INTERVAL=100
-CONFIG_DEFAULT_COMMAND_LINE="squeezelite -o I2S -b 500:2000 -d all=info -s %s"
+CONFIG_DEFAULT_COMMAND_LINE="squeezelite -o I2S -b 500:2000 -d all=info "
 
 CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE=y
 CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y

+ 1 - 1
build-scripts/squeezelite-esp32-I2S-4MFlash-sdkconfig.defaults

@@ -132,7 +132,7 @@ CONFIG_DEFAULT_AP_GATEWAY="192.168.4.1"
 CONFIG_DEFAULT_AP_NETMASK="255.255.255.0"
 CONFIG_DEFAULT_AP_MAX_CONNECTIONS=4
 CONFIG_DEFAULT_AP_BEACON_INTERVAL=100
-CONFIG_DEFAULT_COMMAND_LINE="squeezelite -o I2S -b 500:2000 -d all=info -s %s"
+CONFIG_DEFAULT_COMMAND_LINE="squeezelite -o I2S -b 500:2000 -d all=info "
 
 CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE=y
 CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y

+ 1 - 1
build-scripts/squeezelite-esp32-SqueezeAmp-sdkconfig.defaults

@@ -103,7 +103,7 @@ CONFIG_DEFAULT_AP_GATEWAY="192.168.4.1"
 CONFIG_DEFAULT_AP_NETMASK="255.255.255.0"
 CONFIG_DEFAULT_AP_MAX_CONNECTIONS=4
 CONFIG_DEFAULT_AP_BEACON_INTERVAL=100
-CONFIG_DEFAULT_COMMAND_LINE="squeezelite -o I2S -b 500:2000 -d all=info -s %s"
+CONFIG_DEFAULT_COMMAND_LINE="squeezelite -o I2S -b 500:2000 -d all=info "
 
 CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE=y
 CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y

+ 2 - 3
components/cmd_nvs/cmd_nvs.c

@@ -6,7 +6,7 @@
    software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
    CONDITIONS OF ANY KIND, either express or implied.
 */
-
+//#define LOG_LOCAL_LEVEL ESP_LOG_VERBOSE
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -494,8 +494,7 @@ static int list_entries(int argc, char **argv)
 }
 void register_nvs()
 {
-	esp_log_level_set(TAG, ESP_LOG_VERBOSE);
-    set_args.key = arg_str1(NULL, NULL, "<key>", "key of the value to be set");
+	set_args.key = arg_str1(NULL, NULL, "<key>", "key of the value to be set");
     set_args.type = arg_str1(NULL, NULL, "<type>", ARG_TYPE_STR);
     set_args.value = arg_str1("v", "value", "<value>", "value to be stored");
     set_args.end = arg_end(2);

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

@@ -247,7 +247,6 @@ void wifi_manager_init_wifi(){
     taskYIELD();
     ESP_LOGD(TAG,   "Initializing wifi. done");
 }
-
 void wifi_manager_start(){
 
 
@@ -259,6 +258,7 @@ void wifi_manager_start(){
 	wifi_manager_sta_ip_mutex = xSemaphoreCreateMutex();
 
 	ESP_LOGD(TAG,   "wifi_manager_start.  Creating access point json structure");
+
 	accessp_cjson = NULL;
 	accessp_cjson = wifi_manager_clear_ap_list_json(&accessp_cjson);
 	ip_info_json = NULL;

+ 0 - 1
components/wifi-manager/wifi_manager.h

@@ -54,7 +54,6 @@ extern "C" {
 #endif
 
 
-#define DEFAULT_COMMAND_LINE  CONFIG_DEFAULT_COMMAND_LINE
 
 /**
  * @brief Defines the maximum size of a SSID name. 32 is IEEE standard.

+ 2 - 1
main/component.mk

@@ -6,7 +6,8 @@
 # lib(subdirectory_name).a in the build directory. This behaviour is entirely configurable,
 # please read the SDK documents if you need to do this.
 #
-CFLAGS += -D LOG_LOCAL_LEVEL=ESP_LOG_DEBUG
+#CFLAGS += -D LOG_LOCAL_LEVEL=ESP_LOG_DEBUG
+CFLAGS += -D LOG_LOCAL_LEVEL=ESP_LOG_INFO
 COMPONENT_ADD_INCLUDEDIRS += $(COMPONENT_PATH)/../tools
 COMPONENT_EXTRA_INCLUDES += $(PROJECT_PATH)/components/tools/
 LDFLAGS += -s

+ 49 - 13
main/config.c

@@ -44,13 +44,13 @@
 #define CONFIG_COMMIT_DELAY 1000
 #define LOCK_MAX_WAIT 20*CONFIG_COMMIT_DELAY
 static const char * TAG = "config";
-cJSON * nvs_json=NULL;
-TimerHandle_t timer;
-SemaphoreHandle_t config_mutex = NULL;
-EventGroupHandle_t config_group;
+static cJSON * nvs_json=NULL;
+static TimerHandle_t timer;
+static SemaphoreHandle_t config_mutex = NULL;
+static EventGroupHandle_t config_group;
 /* @brief indicate that the ESP32 is currently connected. */
-const int CONFIG_PENDING_CHANGE_BIT = BIT0;
-const int CONFIG_LOAD_BIT = BIT1;
+static const int CONFIG_PENDING_CHANGE_BIT = BIT0;
+static const int CONFIG_LOAD_BIT = BIT1;
 
 bool config_lock(TickType_t xTicksToWait);
 void config_unlock();
@@ -62,12 +62,38 @@ cJSON * config_set_value_safe(nvs_type_t nvs_type, const char *key, void * value
 static void vCallbackFunction( TimerHandle_t xTimer );
 void config_set_entry_changed_flag(cJSON * entry, cJSON_bool flag);
 
+static void * malloc_fn(size_t sz){
+	void * ptr = heap_caps_malloc(sz, MALLOC_CAP_SPIRAM);
+	if(ptr==NULL){
+		ESP_LOGE(TAG,"malloc_fn:  unable to allocate memory!");
+	}
+	return ptr;
+}
+static void * free_fn(void * ptr){
+	if(ptr!=NULL){
+		free(ptr);
+	}
+	else {
+		ESP_LOGW(TAG,"free_fn: Cannot free null pointer!");
+	}
+	return NULL;
+}
+void init_cJSON(){
+	static cJSON_Hooks hooks;
+	// initialize cJSON hooks it uses SPIRAM memory
+	// as opposed to IRAM
+	hooks.malloc_fn=&malloc_fn;
+    hooks.free_fn=&free_fn;
+	cJSON_InitHooks(&hooks);
+}
 void config_init(){
 	ESP_LOGD(TAG, "Creating mutex for Config");
 	config_mutex = xSemaphoreCreateMutex();
 	ESP_LOGD(TAG, "Creating event group");
 	config_group = xEventGroupCreate();
 	ESP_LOGD(TAG, "Loading config from nvs");
+
+	init_cJSON();
 	if(nvs_json !=NULL){
 		cJSON_Delete(nvs_json);
 	}
@@ -154,7 +180,6 @@ cJSON * config_set_value_safe(nvs_type_t nvs_type, const char *key, void * value
 			else {
 				ESP_LOGD(TAG,"Failed to print entry");
 			}
-			cJSON_Delete(chg_flag);
 			ESP_LOGI(TAG, "Setting changed flag config [%s]", key);
 			config_set_entry_changed_flag(entry,true);
 			ESP_LOGI(TAG, "Updating config [%s]", key);
@@ -195,28 +220,35 @@ nvs_type_t config_get_entry_type(cJSON * entry){
 	return entry_type->valuedouble;
 }
 void config_set_entry_changed_flag(cJSON * entry, cJSON_bool flag){
+	ESP_LOGV(TAG, "config_set_entry_changed_flag: begin");
 	if(entry==NULL){
 		ESP_LOGE(TAG,"null pointer received!");
 		return;
 	}
 	bool bIsConfigLoading=((xEventGroupGetBits(config_group) & CONFIG_LOAD_BIT)!=0);
 	bool changedFlag=bIsConfigLoading?false:flag;
+	ESP_LOGV(TAG, "config_set_entry_changed_flag: retrieving chg flag from entry");
 	cJSON * changed = cJSON_GetObjectItemCaseSensitive(entry, "chg");
 	if(changed ==NULL ) {
-		ESP_LOGV(TAG, "Adding change flag. ");
+		ESP_LOGV(TAG, "config_set_entry_changed_flag: chg flag not found. Adding. ");
 		cJSON_AddBoolToObject(entry,"chg",changedFlag);
 	}
 	else {
+		ESP_LOGV(TAG, "config_set_entry_changed_flag: Existing change flag found. ");
 		if(cJSON_IsTrue(changed) && changedFlag){
 			ESP_LOGW(TAG, "Commit flag not changed!");
 		}
 		else{
-			ESP_LOGV(TAG, "Updating change flag to %s",changedFlag?"TRUE":"FALSE");
-			cJSON_Delete(changed);
-			cJSON_AddBoolToObject(entry,"chg",changedFlag);
+			ESP_LOGV(TAG, "config_set_entry_changed_flag: Updating change flag to %s",changedFlag?"TRUE":"FALSE");
+			changed->type = changedFlag?cJSON_True:cJSON_False ;
 		}
 	}
-	if(changedFlag) config_raise_change(true);
+
+	if(changedFlag) {
+		ESP_LOGV(TAG, "config_set_entry_changed_flag: Calling config_raise_change. ");
+		config_raise_change(true);
+	}
+	ESP_LOGV(TAG, "config_set_entry_changed_flag: done. ");
 }
 cJSON_bool config_is_entry_changed(cJSON * entry){
 	if(entry==NULL){
@@ -427,12 +459,16 @@ void config_unlock() {
 }
 
 static void vCallbackFunction( TimerHandle_t xTimer ) {
+	static int cnt=0;
 	if(config_has_changes()){
 		ESP_LOGI(TAG, "configuration has some uncommitted entries");
 		config_commit_to_nvs();
 	}
 	else{
-		ESP_LOGV(TAG,"commit timer: commit flag not set");
+		if(++cnt>=15){
+			ESP_LOGV(TAG,"commit timer: commit flag not set");
+			cnt=0;
+		}
 	}
 	xTimerReset( xTimer, 10 );
 }

+ 0 - 1
main/console.c

@@ -258,7 +258,6 @@ static void * console_thread() {
 		run_command(line);
 		/* linenoise allocates line buffer on the heap, so need to free it */
 		linenoiseFree(line);
-		config_commit_to_nvs();
 		taskYIELD();
 	}
 	return NULL;

+ 4 - 8
main/esp_app_main.c

@@ -150,14 +150,10 @@ void register_default_nvs(){
 	strcpy(default_host_name,DEFAULT_HOST_NAME);
 	strcat(default_host_name,macStr);
 
-	if(!strstr(CONFIG_DEFAULT_COMMAND_LINE, "-n %s")){
-		snprintf(default_command_line, sizeof(default_command_line)-1,CONFIG_DEFAULT_COMMAND_LINE,default_host_name);
-	}
-	else{
-		strncpy(default_command_line, CONFIG_DEFAULT_COMMAND_LINE,sizeof(default_command_line)-1);
-		strncat(default_command_line, "-n ",sizeof(default_command_line)-1);
-		strncat(default_command_line, default_host_name,sizeof(default_command_line)-1);
-	}
+
+	strncpy(default_command_line, CONFIG_DEFAULT_COMMAND_LINE,sizeof(default_command_line)-1);
+	strncat(default_command_line, " -n ",sizeof(default_command_line)-1);
+	strncat(default_command_line, default_host_name,sizeof(default_command_line)-1);
 
 
 	ESP_LOGD(TAG,"Registering default value for key %s, value %s", "autoexec", "1");

+ 2 - 0
partitions.csv

@@ -5,4 +5,6 @@ otadata,  data,  ota,  0xD000,  0x2000,
 phy_init,  data,  phy,  0xF000,  0x1000,
 recovery,  app,  factory,  0x10000,  0x140000,
 ota_0,  app,  ota_0,  ,  0x2A0000,
+#ota_0,  app,  ota_0,  0x10000,  0x140000,
+#recovery,  app,  factory,  ,  0x2A0000,
 settings,  data,  nvs,  ,  0x10000,