diff --git a/CMakeLists.txt b/CMakeLists.txt index cef5add4..a64afef7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,7 +13,7 @@ add_definitions(-DHIERARCHICAL_STATES=1) #add_definitions(-DNETWORK_ETHERNET_LOG_LEVEL=ESP_LOG_DEBUG) #uncomment line below to get network status debug logs #add_definitions(-DNETWORK_STATUS_LOG_LEVEL=ESP_LOG_DEBUG) -#add_definitions(-DNETWORK_HANDLERS_LOG_LEVEL=ESP_LOG_DEBUG) +#add_definitions(-DNETWORK_HANDLERS_LOG_LEVEL=ESP_LOG_DEBUG) #add_definitions(-DNETWORK_WIFI_LOG_LEVEL=ESP_LOG_DEBUG) #add_definitions(-DNETWORK_MANAGER_LOG_LEVEL=ESP_LOG_DEBUG) #add_definitions(-DNETWORK_HTTP_SERVER_LOG_LEVEL=ESP_LOG_DEBUG) diff --git a/components/driver_bt/bt_app_core.c b/components/driver_bt/bt_app_core.c index 4d986735..f8a392c6 100644 --- a/components/driver_bt/bt_app_core.c +++ b/components/driver_bt/bt_app_core.c @@ -83,25 +83,28 @@ static void bt_app_task_handler(void *arg) esp_bt_controller_mem_release(ESP_BT_MODE_BLE); esp_bt_controller_config_t bt_cfg = BT_CONTROLLER_INIT_CONFIG_DEFAULT(); - - if ((err = esp_bt_controller_init(&bt_cfg)) != ESP_OK) { - ESP_LOGE(TAG, "%s initialize controller failed: %s\n", __func__, esp_err_to_name(err)); - goto exit; - } + if(esp_bt_controller_get_status() == ESP_BT_CONTROLLER_STATUS_IDLE ){ + + + if ((err = esp_bt_controller_init(&bt_cfg)) != ESP_OK) { + ESP_LOGE(TAG, "%s initialize controller failed: %s\n", __func__, esp_err_to_name(err)); + goto exit; + } - if ((err = esp_bt_controller_enable(ESP_BT_MODE_CLASSIC_BT)) != ESP_OK) { - ESP_LOGE(TAG, "%s enable controller failed: %s\n", __func__, esp_err_to_name(err)); - goto exit; - } + if ((err = esp_bt_controller_enable(ESP_BT_MODE_BTDM)) != ESP_OK) { + ESP_LOGE(TAG, "%s enable controller failed: %s\n", __func__, esp_err_to_name(err)); + goto exit; + } - if ((err = esp_bluedroid_init()) != ESP_OK) { - ESP_LOGE(TAG, "%s initialize bluedroid failed: %s\n", __func__, esp_err_to_name(err)); - goto exit; - } + if ((err = esp_bluedroid_init()) != ESP_OK) { + ESP_LOGE(TAG, "%s initialize bluedroid failed: %s\n", __func__, esp_err_to_name(err)); + goto exit; + } - if ((err = esp_bluedroid_enable()) != ESP_OK) { - ESP_LOGE(TAG, "%s enable bluedroid failed: %s\n", __func__, esp_err_to_name(err)); - goto exit; + if ((err = esp_bluedroid_enable()) != ESP_OK) { + ESP_LOGE(TAG, "%s enable bluedroid failed: %s\n", __func__, esp_err_to_name(err)); + goto exit; + } } /* Bluetooth device name, connection mode and profile set up */ diff --git a/components/platform_config/platform_config.c b/components/platform_config/platform_config.c index d481634f..18b0d901 100644 --- a/components/platform_config/platform_config.c +++ b/components/platform_config/platform_config.c @@ -634,7 +634,7 @@ cJSON * config_alloc_get_cjson(const char *key){ } return conf_json; } -esp_err_t config_set_cjson_str(const char *key, cJSON *value){ +esp_err_t config_set_cjson_str_and_free(const char *key, cJSON *value){ char * value_str = cJSON_PrintUnformatted(value); if(value_str==NULL){ ESP_LOGE(TAG, "Unable to print cJSON for key [%s]", key); diff --git a/components/platform_config/platform_config.h b/components/platform_config/platform_config.h index 28089a87..2164ae06 100644 --- a/components/platform_config/platform_config.h +++ b/components/platform_config/platform_config.h @@ -53,7 +53,7 @@ void config_init(); void * config_alloc_get_default(nvs_type_t type, const char *key, void * default_value, size_t blob_size); void * config_alloc_get_str(const char *key, char *lead, char *fallback); cJSON * config_alloc_get_cjson(const char *key); -esp_err_t config_set_cjson_str(const char *key, cJSON *value); +esp_err_t config_set_cjson_str_and_free(const char *key, cJSON *value); void config_get_uint16t_from_str(const char *key, uint16_t *value, uint16_t default_value); void config_delete_key(const char *key); void config_set_default(nvs_type_t type, const char *key, void * default_value, size_t blob_size); diff --git a/components/platform_console/cmd_config.c b/components/platform_console/cmd_config.c index f25bc919..fb48a8a3 100644 --- a/components/platform_console/cmd_config.c +++ b/components/platform_console/cmd_config.c @@ -593,7 +593,6 @@ static int is_valid_gpio_number(int gpio, const char * name, FILE *f, bool manda return 0; } static int do_cspot_config(int argc, char **argv){ - char * name = NULL; int nerrors = arg_parse_msg(argc, argv,(struct arg_hdr **)&cspot_args); if (nerrors != 0) { return 1; @@ -610,25 +609,30 @@ static int do_cspot_config(int argc, char **argv){ cJSON * cspot_config = config_alloc_get_cjson("cspot_config"); if(!cspot_config){ nerrors++; - fprintf(f,"error: Unable to get cspot config.\n"); + fprintf(f,"error: Unable to get default cspot config.\n"); } - else { - cjson_update_string(&cspot_config,cspot_args.deviceName->hdr.longopts,cspot_args.deviceName->count>0?cspot_args.deviceName->sval[0]:NULL); -// cjson_update_number(&cspot_config,cspot_args.volume->hdr.longopts,cspot_args.volume->count>0?cspot_args.volume->ival[0]:0); - cjson_update_number(&cspot_config,cspot_args.bitrate->hdr.longopts,cspot_args.bitrate->count>0?cspot_args.bitrate->ival[0]:0); + if(cspot_args.deviceName->count>0){ + cjson_update_string(&cspot_config,cspot_args.deviceName->hdr.longopts,cspot_args.deviceName->sval[0]); } + if(cspot_args.bitrate->count>0){ + cjson_update_number(&cspot_config,cspot_args.bitrate->hdr.longopts,cspot_args.bitrate->ival[0]); + } if(!nerrors ){ fprintf(f,"Storing cspot parameters.\n"); - nerrors+=(config_set_cjson_str("cspot_config",cspot_config) !=ESP_OK); + nerrors+=(config_set_cjson_str_and_free("cspot_config",cspot_config) !=ESP_OK); } - if(nerrors==0){ - fprintf(f,"Device name changed to %s\n",name); + if(nerrors==0 ){ + if(cspot_args.deviceName->count>0){ + fprintf(f,"Device name changed to %s\n",cspot_args.deviceName->sval[0]); + } + if(cspot_args.bitrate->count>0){ + fprintf(f,"Bitrate changed to %u\n",cspot_args.bitrate->ival[0]); + } } if(!nerrors ){ fprintf(f,"Done.\n"); } - FREE_AND_NULL(name); fflush (f); cmd_send_messaging(argv[0],nerrors>0?MESSAGING_ERROR:MESSAGING_INFO,"%s", buf); fclose(f); @@ -761,10 +765,7 @@ cJSON * cspot_cb(){ if(cspot_values){ cJSON_AddNumberToObject(values,cspot_args.bitrate->hdr.longopts,cJSON_GetNumberValue(cspot_values)); } - // cspot_values = cJSON_GetObjectItem(cspot_config,cspot_args.volume->hdr.longopts); - // if(cspot_values){ - // cJSON_AddNumberToObject(values,cspot_args.volume->hdr.longopts,cJSON_GetNumberValue(cspot_values)); - // } + cJSON_Delete(cspot_config); return values; } diff --git a/main/esp_app_main.c b/main/esp_app_main.c index 0343e332..08db39a4 100644 --- a/main/esp_app_main.c +++ b/main/esp_app_main.c @@ -281,28 +281,39 @@ void register_default_string_val(const char * key, char * value){ FREE_AND_NULL(existing); } -void register_default_with_mac(const char* key, char* defval) { +char * alloc_get_string_with_mac(const char * val) { uint8_t mac[6]; char macStr[LOCAL_MAC_SIZE + 1]; char* fullvalue = NULL; esp_read_mac((uint8_t*)&mac, ESP_MAC_WIFI_STA); snprintf(macStr, LOCAL_MAC_SIZE - 1, "-%x%x%x", mac[3], mac[4], mac[5]); - fullvalue = malloc_init_external(strlen(defval)+sizeof(macStr)+1); + fullvalue = malloc_init_external(strlen(val)+sizeof(macStr)+1); if(fullvalue){ - strcpy(fullvalue, defval); + strcpy(fullvalue, val); strcat(fullvalue, macStr); + } + else { + ESP_LOGE(TAG,"Memory allocation failed when getting mac value for %s", val); + } + return fullvalue; + +} +void register_default_with_mac(const char* key, char* defval) { + char * fullvalue=alloc_get_string_with_mac(defval); + if(fullvalue){ register_default_string_val(key,fullvalue); FREE_AND_NULL(fullvalue); } else { ESP_LOGE(TAG,"Memory allocation failed when registering default value for %s", key); } - } void register_default_nvs(){ #ifdef CONFIG_CSPOT_SINK register_default_string_val("enable_cspot", STR(CONFIG_CSPOT_SINK)); +#else + register_default_string_val("enable_cspot", "0"); #endif #ifdef CONFIG_AIRPLAY_SINK @@ -368,10 +379,23 @@ void register_default_nvs(){ register_default_string_val("ethtmout","8"); register_default_string_val("dhcp_tmout","8"); register_default_string_val("target", CONFIG_TARGET); -#ifdef CONFIG_CSPOT_SINK - register_default_string_val("enable_cspot", STR(CONFIG_CSPOT_SINK)); - register_default_string_val("cspot_config", ""); -#endif + + cJSON * cspot_config=config_alloc_get_cjson("cspot_config"); + if(!cspot_config){ + char * name = alloc_get_string_with_mac(DEFAULT_HOST_NAME); + if(name){ + cjson_update_string(&cspot_config,"deviceName",name); + cjson_update_number(&cspot_config,"bitrate",160); + // the call below saves the config and frees the json pointer + config_set_cjson_str_and_free("cspot_config",cspot_config); + FREE_AND_NULL(name); + } + else { + register_default_string_val("cspot_config", ""); + } + + } + wait_for_commit(); ESP_LOGD(TAG,"Done setting default values in nvs."); } @@ -523,8 +547,7 @@ void app_main() network_register_state_callback(NETWORK_INITIALIZING_STATE,-1, "handle_ap_connect", &handle_ap_connect); network_register_state_callback(NETWORK_ETH_ACTIVE_STATE,ETH_ACTIVE_LINKDOWN_STATE, "handle_network_up", &handle_network_up); network_register_state_callback(NETWORK_WIFI_ACTIVE_STATE,WIFI_INITIALIZING_STATE, "handle_network_up", &handle_network_up); - MEMTRACE_PRINT_DELTA(); - + MEMTRACE_PRINT_DELTA(); } MEMTRACE_PRINT_DELTA_MESSAGE("Starting Console"); console_start(); diff --git a/sdkconfig_compare.js b/sdkconfig_compare.js index 646d1596..77e398e5 100644 --- a/sdkconfig_compare.js +++ b/sdkconfig_compare.js @@ -134,7 +134,7 @@ buildMap(sdkconfig).then((sdkConfigResult ) => { } } } - console.log(`\n\nproperties that are different between the 2 files \n**************************`); + console.log(`\n\nproperties that are different ${sdkconfig}<->${comparedFile} \n**************************`); for (const prop in sdkconfigMap) { entry = sdkconfigMap[prop]; if(entry.type==map_types.COMMENT) continue; @@ -159,7 +159,7 @@ buildMap(sdkconfig).then((sdkConfigResult ) => { } }); - console.log(`\n\${comparedFile} with missing properties\n**************************`); + console.log(`\n\n${comparedFile} with missing properties\n**************************`); newlines.forEach(line => { console.log(line); });