1616#include "esp_wifi.h"
1717#include "freertos/FreeRTOS.h"
1818#include "freertos/event_groups.h"
19- #include "nvs.h"
20- #include "nvs_flash.h"
19+ #include "settings.h"
2120
2221// enable for more verbose debug logs
2322#define LOG_LOCAL_LEVEL ESP_LOG_DEBUG
@@ -180,71 +179,23 @@ static int connect(int argc, char **argv) {
180179 return 0 ;
181180}
182181
183- static esp_err_t prv_open_nvs (nvs_handle_t * nvs_handle ) {
184- // Initialize NVS
185- esp_err_t err = nvs_flash_init ();
186- if (err == ESP_ERR_NVS_NO_FREE_PAGES || err == ESP_ERR_NVS_NEW_VERSION_FOUND ) {
187- // NVS partition was truncated and needs to be erased
188- // Retry nvs_flash_init
189- ESP_ERROR_CHECK (nvs_flash_erase ());
190- err = nvs_flash_init ();
191- }
192- ESP_ERROR_CHECK (err );
193-
194- // Open
195- err = nvs_open ("storage" , NVS_READWRITE , nvs_handle );
196- if (err != ESP_OK ) {
197- ESP_LOGE (__func__ , "Error (%s) opening NVS handle!" , esp_err_to_name (err ));
198- return err ;
199- }
200-
201- return ESP_OK ;
202- }
203-
204182//! Since the creds are set via cli, we can safely assume there's no null bytes
205183//! in the password, despite being theoretically permissible by the spec
206184static void prv_save_wifi_creds (const char * ssid , const char * password ) {
207- // Initialize NVS
208- nvs_handle_t nvs_handle ;
209- esp_err_t err = prv_open_nvs (& nvs_handle );
185+ // length arg is ignored for string-type settings
186+ esp_err_t err = settings_set (kSettingsWifiSsid , ssid , 0 );
210187 if (err != ESP_OK ) {
211- ESP_LOGE (__func__ , "Error (%s) opening NVS handle!" , esp_err_to_name (err ));
212- return ;
188+ ESP_LOGE (__func__ , "Error (%s) writing ssid to NVS!" , esp_err_to_name (err ));
213189 }
214-
215- ESP_LOGD (__func__ , "Opened NVS handle" );
216-
217- // Write
218- err = nvs_set_str (nvs_handle , "wifi_ssid" , ssid );
190+ err = settings_set (kSettingsWifiPassword , password , 0 );
219191 if (err != ESP_OK ) {
220- ESP_LOGE (__func__ , "Error (%s) writing ssid to NVS!" , esp_err_to_name (err ));
221- } else {
222- ESP_LOGD (__func__ , "Wrote ssid to NVS" );
192+ ESP_LOGE (__func__ , "Error (%s) writing password to NVS!" , esp_err_to_name (err ));
223193 }
224- err = nvs_set_str (nvs_handle , "wifi_password" , password );
225194 if (err == ESP_OK ) {
226- if (err != ESP_OK ) {
227- ESP_LOGE (__func__ , "Error (%s) writing password to NVS!" , esp_err_to_name (err ));
228- } else {
229- ESP_LOGD (__func__ , "Wrote password to NVS" );
230- }
231- }
232-
233- // Commit written value.
234- // After setting any values, nvs_commit() must be called to ensure changes are written
235- // to flash storage. Implementations may write to storage at other times,
236- // but this is not guaranteed.
237- err = nvs_commit (nvs_handle );
238- if (err != ESP_OK ) {
239- ESP_LOGE (__func__ , "Error (%s) committing NVS!" , esp_err_to_name (err ));
240- } else {
241195 ESP_LOGD (__func__ , "Successfully saved new wifi creds" );
242196 strncpy (s_wifi_ssid , ssid , sizeof (s_wifi_ssid ) - 1 );
243197 strncpy (s_wifi_pass , password , sizeof (s_wifi_pass ) - 1 );
244198 }
245-
246- // Close
247- nvs_close (nvs_handle );
248199}
249200
250201//! Return ssid + password pointers, or NULL if not found
@@ -260,41 +211,23 @@ void wifi_load_creds(char** ssid, char** password) {
260211 * ssid = NULL ;
261212 * password = NULL ;
262213
263- // Initialize NVS
264- nvs_handle_t nvs_handle ;
265- esp_err_t err = prv_open_nvs (& nvs_handle );
266- if (err != ESP_OK ) {
267- ESP_LOGE (__func__ , "Error (%s) opening NVS handle!" , esp_err_to_name (err ));
268- return ;
269- }
270-
271- ESP_LOGD (__func__ , "Opened NVS handle" );
272-
273- // Read
274214 ESP_LOGD (__func__ , "Reading wifi creds ... " );
275215 size_t len = sizeof (s_wifi_ssid );
276- err = nvs_get_str (nvs_handle , "wifi_ssid" , s_wifi_ssid , & len );
277- if (err == ESP_OK ) {
278- ESP_LOGD (__func__ , "ssid size: %d" , len );
279- } else {
216+ esp_err_t err = settings_get (kSettingsWifiSsid , s_wifi_ssid , & len );
217+ if (err != ESP_OK ) {
280218 ESP_LOGE (__func__ , "failed reading ssid" );
281- goto close ;
219+ return ;
282220 }
283221
284222 len = sizeof (s_wifi_pass );
285- err = nvs_get_str (nvs_handle , "wifi_password" , s_wifi_pass , & len );
286- if (err == ESP_OK ) {
287- ESP_LOGD (__func__ , "pw size: %d" , len );
288- } else {
223+ err = settings_get (kSettingsWifiPassword , s_wifi_pass , & len );
224+ if (err != ESP_OK ) {
289225 ESP_LOGE (__func__ , "failed reading pw" );
290- goto close ;
226+ return ;
291227 }
292228
293229 * ssid = s_wifi_ssid ;
294230 * password = s_wifi_pass ;
295-
296- close :
297- nvs_close (nvs_handle );
298231}
299232
300233// argtable3 requires this data structure to be valid through the entire command
@@ -353,29 +286,8 @@ __attribute__((access(write_only, 1, 2))) int wifi_get_project_key(char* project
353286 MEMFAULT_PROJECT_KEY_LEN + 1 );
354287 return 1 ;
355288 }
356-
357- // Initialize NVS
358- nvs_handle_t nvs_handle ;
359- esp_err_t err = prv_open_nvs (& nvs_handle );
360- if (err != ESP_OK ) {
361- ESP_LOGE (__func__ , "Error (%s) opening NVS handle!" , esp_err_to_name (err ));
362- return err ;
363- }
364-
365- ESP_LOGD (__func__ , "Opened NVS handle" );
366-
367- // load the project key, if it exists
368- size_t len = project_key_len + 1 ;
369- err = nvs_get_str (nvs_handle , "project_key" , project_key , & len );
370- if (err == ESP_OK ) {
371- ESP_LOGD (__func__ , "project key size: %d" , len );
372- } else {
373- ESP_LOGE (__func__ , "failed reading project key %d" , err );
374- }
375-
376- nvs_close (nvs_handle );
377-
378- return err ;
289+ size_t len = project_key_len ;
290+ return settings_get (kSettingsProjectKey , project_key , & len );
379291}
380292
381293__attribute__((access (read_only , 1 , 2 ))) static esp_err_t prv_set_project_key (
@@ -384,39 +296,7 @@ __attribute__((access(read_only, 1, 2))) static esp_err_t prv_set_project_key(
384296 assert ((project_key_len == MEMFAULT_PROJECT_KEY_LEN ) &&
385297 (strlen (project_key ) == MEMFAULT_PROJECT_KEY_LEN ));
386298
387- // Initialize NVS
388- nvs_handle_t nvs_handle ;
389- esp_err_t err = prv_open_nvs (& nvs_handle );
390- if (err != ESP_OK ) {
391- ESP_LOGE (__func__ , "Error (%s) opening NVS handle!" , esp_err_to_name (err ));
392- return err ;
393- }
394-
395- ESP_LOGD (__func__ , "Opened NVS handle" );
396-
397- // Write
398- err = nvs_set_str (nvs_handle , "project_key" , project_key );
399- if (err != ESP_OK ) {
400- ESP_LOGE (__func__ , "Error (%s) writing project key to NVS!" , esp_err_to_name (err ));
401- } else {
402- ESP_LOGD (__func__ , "Wrote project key to NVS" );
403- }
404-
405- // Commit written value.
406- // After setting any values, nvs_commit() must be called to ensure changes are written
407- // to flash storage. Implementations may write to storage at other times,
408- // but this is not guaranteed.
409- err = nvs_commit (nvs_handle );
410- if (err != ESP_OK ) {
411- ESP_LOGE (__func__ , "Error (%s) committing NVS!" , esp_err_to_name (err ));
412- } else {
413- ESP_LOGD (__func__ , "Successfully saved new project key" );
414- }
415-
416- // Close
417- nvs_close (nvs_handle );
418-
419- return err ;
299+ return settings_set (kSettingsProjectKey , project_key , project_key_len );
420300}
421301
422302static int project_key_set (int argc , char * * argv ) {
0 commit comments