Explorar el Código

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 hace 5 años
padre
commit
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,