diff --git a/components/wifi-manager/wifi_manager.c b/components/wifi-manager/wifi_manager.c index 91118336..237c4707 100644 --- a/components/wifi-manager/wifi_manager.c +++ b/components/wifi-manager/wifi_manager.c @@ -108,11 +108,11 @@ static TaskHandle_t task_wifi_manager = NULL; /** * The actual WiFi settings in use */ -struct wifi_settings_t wifi_settings = { - .sta_only = DEFAULT_STA_ONLY, - .sta_power_save = DEFAULT_STA_POWER_SAVE, - .sta_static_ip = 0 -}; +//struct wifi_settings_t wifi_settings = { +// .sta_only = DEFAULT_STA_ONLY, +// .sta_power_save = DEFAULT_STA_POWER_SAVE, +// .sta_static_ip = 0 +//}; /* wifi scanner config */ @@ -253,7 +253,7 @@ void wifi_manager_start(){ ESP_LOGD(TAG, "wifi_manager_start. Allocating memory for wifi configuration structure"); wifi_manager_config_sta = (wifi_config_t*)malloc(sizeof(wifi_config_t)); memset(wifi_manager_config_sta, 0x00, sizeof(wifi_config_t)); - memset(&wifi_settings, 0x00, sizeof(wifi_settings)); +// memset(&wifi_settings, 0x00, sizeof(wifi_settings)); ESP_LOGD(TAG, "wifi_manager_start. Allocating memory for callback functions registration"); cb_ptr_arr = malloc( sizeof( sizeof( void (*)( void* ) )) * MESSAGE_CODE_COUNT); @@ -286,11 +286,6 @@ void wifi_manager_start(){ ESP_LOGD(TAG, "About to call init wifi"); wifi_manager_init_wifi(); - - /* Fetch configuration from nvs */ - ESP_LOGD(TAG, "About to fetch wifi sta config structure"); - wifi_manager_fetch_wifi_sta_config(); - /* start wifi manager task */ ESP_LOGD(TAG, "Creating wifi manager task"); xTaskCreate(&wifi_manager, "wifi_manager", 4096, NULL, WIFI_MANAGER_TASK_PRIORITY, &task_wifi_manager); @@ -321,11 +316,11 @@ esp_err_t wifi_manager_save_sta_config(){ return esp_err; } - esp_err = nvs_set_blob(handle, "settings", &wifi_settings, sizeof(wifi_settings)); - if (esp_err != ESP_OK) { - ESP_LOGE(TAG,"Unable to save wifi_settings in name namespace %s. Error %s", wifi_manager_nvs_namespace, esp_err_to_name(esp_err)); - return esp_err; - } +// esp_err = nvs_set_blob(handle, "settings", &wifi_settings, sizeof(wifi_settings)); +// if (esp_err != ESP_OK) { +// ESP_LOGE(TAG,"Unable to save wifi_settings in name namespace %s. Error %s", wifi_manager_nvs_namespace, esp_err_to_name(esp_err)); +// return esp_err; +// } esp_err = nvs_commit(handle); if (esp_err != ESP_OK) { @@ -335,10 +330,10 @@ esp_err_t wifi_manager_save_sta_config(){ nvs_close(handle); ESP_LOGD(TAG, "wifi_manager_wrote wifi_sta_config: ssid:%s password:%s",wifi_manager_config_sta->sta.ssid,wifi_manager_config_sta->sta.password); - ESP_LOGD(TAG, "wifi_manager_wrote wifi_settings: sta_static_ip (0 = dhcp client, 1 = static ip): %i",wifi_settings.sta_static_ip); - ESP_LOGD(TAG, "wifi_manager_wrote wifi_settings: sta_ip_addr: %s", ip4addr_ntoa(&wifi_settings.sta_static_ip_config.ip)); - ESP_LOGD(TAG, "wifi_manager_wrote wifi_settings: sta_gw_addr: %s", ip4addr_ntoa(&wifi_settings.sta_static_ip_config.gw)); - ESP_LOGD(TAG, "wifi_manager_wrote wifi_settings: sta_netmask: %s", ip4addr_ntoa(&wifi_settings.sta_static_ip_config.netmask)); +// ESP_LOGD(TAG, "wifi_manager_wrote wifi_settings: sta_static_ip (0 = dhcp client, 1 = static ip): %i",wifi_settings.sta_static_ip); +// ESP_LOGD(TAG, "wifi_manager_wrote wifi_settings: sta_ip_addr: %s", ip4addr_ntoa(&wifi_settings.sta_static_ip_config.ip)); +// ESP_LOGD(TAG, "wifi_manager_wrote wifi_settings: sta_gw_addr: %s", ip4addr_ntoa(&wifi_settings.sta_static_ip_config.gw)); +// ESP_LOGD(TAG, "wifi_manager_wrote wifi_settings: sta_netmask: %s", ip4addr_ntoa(&wifi_settings.sta_static_ip_config.netmask)); } @@ -353,15 +348,17 @@ bool wifi_manager_fetch_wifi_sta_config(){ ESP_LOGD(TAG,"Fetching wifi sta config."); if(nvs_open(wifi_manager_nvs_namespace, NVS_READONLY, &handle) == ESP_OK){ - if(wifi_manager_config_sta == NULL){ + ESP_LOGD(TAG,"Allocating memory for structure."); wifi_manager_config_sta = (wifi_config_t*)malloc(sizeof(wifi_config_t)); } memset(wifi_manager_config_sta, 0x00, sizeof(wifi_config_t)); /* ssid */ + ESP_LOGD(TAG,"Fetching value for ssid."); size_t sz = sizeof(wifi_manager_config_sta->sta.ssid); uint8_t *buff = (uint8_t*)malloc(sizeof(uint8_t) * sz); + memset(buff,0x00,sizeof(uint8_t) * sz); esp_err = nvs_get_blob(handle, "ssid", buff, &sz); if(esp_err != ESP_OK){ ESP_LOGI(TAG,"No ssid found in nvs."); @@ -369,52 +366,24 @@ bool wifi_manager_fetch_wifi_sta_config(){ nvs_close(handle); return false; } - memcpy(wifi_manager_config_sta->sta.ssid, buff, sz); + memcpy(wifi_manager_config_sta->sta.ssid, buff, sizeof(wifi_manager_config_sta->sta.ssid)); FREE_AND_NULL(buff); ESP_LOGI(TAG, "wifi_manager_fetch_wifi_sta_config: ssid:%s ",wifi_manager_config_sta->sta.ssid); /* password */ sz = sizeof(wifi_manager_config_sta->sta.password); buff = (uint8_t*)malloc(sizeof(uint8_t) * sz); + memset(buff,0x00,sizeof(uint8_t) * sz); esp_err = nvs_get_blob(handle, "password", buff, &sz); if(esp_err != ESP_OK){ // Don't take this as an error. This could be an opened access point? ESP_LOGW(TAG,"No wifi password found in nvs"); } else { - memcpy(wifi_manager_config_sta->sta.password, buff, sz); + memcpy(wifi_manager_config_sta->sta.password, buff, sizeof(wifi_manager_config_sta->sta.password)); ESP_LOGI(TAG, "wifi_manager_fetch_wifi_sta_config: password:%s",wifi_manager_config_sta->sta.password); } FREE_AND_NULL(buff); - - /* settings */ -// sz = sizeof(wifi_settings); -// buff = (uint8_t*)malloc(sizeof(uint8_t) * sz); -// esp_err = nvs_get_blob(handle, "settings", buff, &sz); -// if(esp_err != ESP_OK){ -// // SSID was found, we should have some settings as well. Log this as an error -// ESP_LOGW(TAG,"No wifi settings found in nvs. Freeing nvs buffer"); -// FREE_AND_NULL(buff); -// ESP_LOGD(TAG,"Closing nvs Handle"); -// nvs_close(handle); -// ESP_LOGD(TAG,"load sta config done"); -// return wifi_manager_config_sta->sta.ssid[0] != '\0'; -// } -// if(sz!=sizeof(wifi_settings)){ -// ESP_LOGW(TAG,"Unable to retrieve settings buffer from nvs. Size did not match"); -// } -// else { -// ESP_LOGD(TAG,"Copying configuration restored from nvs"); -// memcpy(&wifi_settings, buff, sz); -// ESP_LOGI(TAG, "wifi_manager_fetch_wifi_settings: sta_only (0 = APSTA, 1 = STA when connected):%i",wifi_settings.sta_only); -// ESP_LOGI(TAG, "wifi_manager_fetch_wifi_settings: sta_power_save (1 = yes):%i",wifi_settings.sta_power_save); -// ESP_LOGI(TAG, "wifi_manager_fetch_wifi_settings: sta_static_ip (0 = dhcp client, 1 = static ip):%i",wifi_settings.sta_static_ip); -// ESP_LOGI(TAG, "wifi_manager_fetch_wifi_settings: sta_static_ip_config: IP: %s , GW: %s , Mask: %s", ip4addr_ntoa(&wifi_settings.sta_static_ip_config.ip), ip4addr_ntoa(&wifi_settings.sta_static_ip_config.gw), ip4addr_ntoa(&wifi_settings.sta_static_ip_config.netmask)); -// ESP_LOGI(TAG, "wifi_manager_fetch_wifi_settings: sta_ip_addr: %s", ip4addr_ntoa(&wifi_settings.sta_static_ip_config.ip)); -// ESP_LOGI(TAG, "wifi_manager_fetch_wifi_settings: sta_gw_addr: %s", ip4addr_ntoa(&wifi_settings.sta_static_ip_config.gw)); -// ESP_LOGI(TAG, "wifi_manager_fetch_wifi_settings: sta_netmask: %s", ip4addr_ntoa(&wifi_settings.sta_static_ip_config.netmask)); -// } -// FREE_AND_NULL(buff); nvs_close(handle); return wifi_manager_config_sta->sta.ssid[0] != '\0'; @@ -1159,7 +1128,7 @@ void wifi_manager( void * pvParameters ){ break; case ORDER_LOAD_AND_RESTORE_STA: - ESP_LOGI(TAG, "MESSAGE: ORDER_LOAD_AND_RESTORE_STA"); + ESP_LOGI(TAG, "MESSAGE: ORDER_LOAD_AND_RESTORE_STA. About to fetch wifi STA configuration"); if(wifi_manager_fetch_wifi_sta_config()){ ESP_LOGI(TAG, "Saved wifi found on startup. Will attempt to connect."); wifi_manager_send_message(ORDER_CONNECT_STA, (void*)CONNECTION_REQUEST_RESTORE_CONNECTION); @@ -1191,19 +1160,20 @@ void wifi_manager( void * pvParameters ){ xEventGroupSetBits(wifi_manager_event_group, WIFI_MANAGER_REQUEST_RESTORE_STA_BIT); /* STA - Wifi Station configuration setup */ - if(wifi_settings.sta_static_ip) { - // There's a static ip address configured, so - ESP_LOGI(TAG, "Assigning static ip to STA interface. IP: %s , GW: %s , Mask: %s", - ip4addr_ntoa(&wifi_settings.sta_static_ip_config.ip), - ip4addr_ntoa(&wifi_settings.sta_static_ip_config.gw), - ip4addr_ntoa(&wifi_settings.sta_static_ip_config.netmask)); - - /* stop DHCP client*/ - ESP_ERROR_CHECK(tcpip_adapter_dhcpc_stop(TCPIP_ADAPTER_IF_STA)); - /* assign a static IP to the STA network interface */ - ESP_ERROR_CHECK(tcpip_adapter_set_ip_info(TCPIP_ADAPTER_IF_STA, &wifi_settings.sta_static_ip_config)); - } - else { + //todo: support static ip address +// if(wifi_settings.sta_static_ip) { +// // There's a static ip address configured, so +// ESP_LOGI(TAG, "Assigning static ip to STA interface. IP: %s , GW: %s , Mask: %s", +// ip4addr_ntoa(&wifi_settings.sta_static_ip_config.ip), +// ip4addr_ntoa(&wifi_settings.sta_static_ip_config.gw), +// ip4addr_ntoa(&wifi_settings.sta_static_ip_config.netmask)); +// +// /* stop DHCP client*/ +// ESP_ERROR_CHECK(tcpip_adapter_dhcpc_stop(TCPIP_ADAPTER_IF_STA)); +// /* assign a static IP to the STA network interface */ +// ESP_ERROR_CHECK(tcpip_adapter_set_ip_info(TCPIP_ADAPTER_IF_STA, &wifi_settings.sta_static_ip_config)); +// } +// else { /* start DHCP client if not started*/ tcpip_adapter_dhcp_status_t status; ESP_LOGD(TAG, "wifi_manager: Checking if DHCP client for STA interface is running"); @@ -1211,7 +1181,7 @@ void wifi_manager( void * pvParameters ){ if (status!=TCPIP_ADAPTER_DHCP_STARTED) { ESP_LOGI(TAG, "wifi_manager: Start DHCP client for STA interface"); ESP_ERROR_CHECK(tcpip_adapter_dhcpc_start(TCPIP_ADAPTER_IF_STA)); - } +// } } } diff --git a/components/wifi-manager/wifi_manager.h b/components/wifi-manager/wifi_manager.h index ec1da309..26fbaa5f 100644 --- a/components/wifi-manager/wifi_manager.h +++ b/components/wifi-manager/wifi_manager.h @@ -229,13 +229,13 @@ typedef enum connection_request_made_by_code_t{ /** * The wifi manager settings in use */ -struct wifi_settings_t{ - bool sta_only; - bool sta_static_ip; - wifi_ps_type_t sta_power_save; - tcpip_adapter_ip_info_t sta_static_ip_config; -}; -extern struct wifi_settings_t wifi_settings; +//struct wifi_settings_t{ +// bool sta_only; +// bool sta_static_ip; +// wifi_ps_type_t sta_power_save; +// tcpip_adapter_ip_info_t sta_static_ip_config; +//}; +//extern struct wifi_settings_t wifi_settings; /** * @brief Structure used to store one message in the queue.