@@ -313,87 +313,99 @@ void chargeMode() {
313313 delay (200 );
314314}
315315
316+
317+ bool config_exists () {
318+ if (!SDM .exists (CONFIG_FILE )) {
319+ File conf = SDM .open (CONFIG_FILE , FILE_WRITE );
320+ if (conf) {
321+ #if ROTATION > 1
322+ conf.print (" [{\" rot\" :3,\" dimmerSet\" :10,\" onlyBins\" :1,\" bright\" :100,\" askSpiffs\" :1,\" wui_usr\" :\" admin\" ,\" wui_pwd\" :\" launcher\" ,\" dwn_path\" :\" /downloads/\" ,\" FGCOLOR\" :2016,\" BGCOLOR\" :0,\" ALCOLOR\" :63488,\" even\" :13029,\" odd\" :12485,\" wifi\" :[{\" ssid\" :\" myNetSSID\" ,\" pwd\" :\" myNetPassword\" }]}]" );
323+ #else
324+ conf.print (" [{\" rot\" :1,\" dimmerSet\" :10,\" onlyBins\" :1,\" bright\" :100,\" askSpiffs\" :1,\" wui_usr\" :\" admin\" ,\" wui_pwd\" :\" launcher\" ,\" dwn_path\" :\" /downloads/\" ,\" FGCOLOR\" :2016,\" BGCOLOR\" :0,\" ALCOLOR\" :63488,\" even\" :13029,\" odd\" :12485,\" wifi\" :[{\" ssid\" :\" myNetSSID\" ,\" pwd\" :\" myNetPassword\" }]}]" );
325+ #endif
326+ }
327+ conf.close ();
328+ delay (50 );
329+ log_i (" config_exists: config.conf created with default" );
330+ return false ;
331+ } else {
332+ log_i (" config_exists: config.conf exists" );
333+ return true ;
334+ }
335+ }
336+
337+
316338/* ********************************************************************
317339** Function: getConfigs
318340** getConfigurations from EEPROM or JSON
319341**********************************************************************/
320342void getConfigs () {
321- if (setupSdCard ()) {
322- if (!SDM .exists (CONFIG_FILE )) {
323- File conf = SDM .open (CONFIG_FILE , FILE_WRITE );
324- if (conf) {
325- #if ROTATION >1
326- conf.print (" [{\" rot\" :3,\" dimmerSet\" :10,\" onlyBins\" :1,\" bright\" :100,\" askSpiffs\" :1,\" wui_usr\" :\" admin\" ,\" wui_pwd\" :\" launcher\" ,\" dwn_path\" :\" /downloads/\" ,\" FGCOLOR\" :2016,\" BGCOLOR\" :0,\" ALCOLOR\" :63488,\" even\" :13029,\" odd\" :12485,\" wifi\" :[{\" ssid\" :\" myNetSSID\" ,\" pwd\" :\" myNetPassword\" }]}]" );
327- #else
328- conf.print (" [{\" rot\" :1,\" dimmerSet\" :10,\" onlyBins\" :1,\" bright\" :100,\" askSpiffs\" :1,\" wui_usr\" :\" admin\" ,\" wui_pwd\" :\" launcher\" ,\" dwn_path\" :\" /downloads/\" ,\" FGCOLOR\" :2016,\" BGCOLOR\" :0,\" ALCOLOR\" :63488,\" even\" :13029,\" odd\" :12485,\" wifi\" :[{\" ssid\" :\" myNetSSID\" ,\" pwd\" :\" myNetPassword\" }]}]" );
329- #endif
330- }
331- conf.close ();
332- delay (50 );
333- } else log_i (" getConfigs: config.conf exists" );
334- File file = SDM .open (CONFIG_FILE , FILE_READ );
335- if (file) {
336- // Deserialize the JSON document
337- DeserializationError error = deserializeJson (settings, file);
338- if (error) {
339- log_i (" Failed to read file, using default configuration" );
340- goto Default;
341- } else log_i (" getConfigs: deserialized correctly" );
342-
343- int count=0 ;
344- JsonObject setting = settings[0 ];
345- if (setting.containsKey (" onlyBins" )) { onlyBins = gsetOnlyBins (setting[" onlyBins" ].as <bool >()); } else { count++; log_i (" Fail" ); }
346- if (setting.containsKey (" askSpiffs" )) { askSpiffs = gsetAskSpiffs (setting[" askSpiffs" ].as <bool >()); } else { count++; log_i (" Fail" ); }
347- if (setting.containsKey (" bright" )) { bright = setting[" bright" ].as <int >(); } else { count++; log_i (" Fail" ); }
348- if (setting.containsKey (" dimmerSet" )) { dimmerSet = setting[" dimmerSet" ].as <int >(); } else { count++; log_i (" Fail" ); }
349- if (setting.containsKey (" rot" )) { rotation = setting[" rot" ].as <int >(); } else { count++; log_i (" Fail" ); }
350- if (setting.containsKey (" FGCOLOR" )) { FGCOLOR = setting[" FGCOLOR" ].as <uint16_t >(); } else { count++; log_i (" Fail" ); }
351- if (setting.containsKey (" BGCOLOR" )) { BGCOLOR = setting[" BGCOLOR" ].as <uint16_t >(); } else { count++; log_i (" Fail" ); }
352- if (setting.containsKey (" ALCOLOR" )) { ALCOLOR = setting[" ALCOLOR" ].as <uint16_t >(); } else { count++; log_i (" Fail" ); }
353- if (setting.containsKey (" odd" )) { odd_color = setting[" odd" ].as <uint16_t >(); } else { count++; log_i (" Fail" ); }
354- if (setting.containsKey (" even" )) { even_color= setting[" even" ].as <uint16_t >(); } else { count++; log_i (" Fail" ); }
355- if (setting.containsKey (" wui_usr" )) { wui_usr = setting[" wui_usr" ].as <String>(); } else { count++; log_i (" Fail" ); }
356- if (setting.containsKey (" wui_pwd" )) { wui_pwd = setting[" wui_pwd" ].as <String>(); } else { count++; log_i (" Fail" ); }
357- if (setting.containsKey (" dwn_path" )) { dwn_path = setting[" dwn_path" ].as <String>(); } else { count++; log_i (" Fail" ); }
358- if (!setting.containsKey (" wifi" )) { count++; log_i (" Fail" ); }
359- if (count>0 ) saveConfigs ();
360-
361- log_i (" Brightness: %d" , bright);
362- setBrightness (bright);
363- if (dimmerSet<10 ) dimmerSet=10 ;
364- file.close ();
343+ if (setupSdCard ()) {
344+ // check if config file exists, otherwise create it with default values
345+ config_exists ();
346+ File file = SDM .open (CONFIG_FILE , FILE_READ );
347+ if (file) {
348+ DeserializationError error = deserializeJson (settings, file);
349+ if (error) {
350+ log_i (" Failed to read file, using default configuration" );
351+ goto Default;
352+ } else {
353+ log_i (" getConfigs: deserialized correctly" );
354+ }
355+
356+ int count = 0 ;
357+ JsonObject setting = settings[0 ];
358+ if (setting[" onlyBins" ].is <bool >()) { onlyBins = gsetOnlyBins (setting[" onlyBins" ].as <bool >()); } else { count++; log_i (" Fail" ); }
359+ if (setting[" askSpiffs" ].is <bool >()) { askSpiffs = gsetAskSpiffs (setting[" askSpiffs" ].as <bool >()); } else { count++; log_i (" Fail" ); }
360+ if (setting[" bright" ].is <int >()) { bright = setting[" bright" ].as <int >(); } else { count++; log_i (" Fail" ); }
361+ if (setting[" dimmerSet" ].is <int >()) { dimmerSet = setting[" dimmerSet" ].as <int >(); } else { count++; log_i (" Fail" ); }
362+ if (setting[" rot" ].is <int >()) { rotation = setting[" rot" ].as <int >(); } else { count++; log_i (" Fail" ); }
363+ if (setting[" FGCOLOR" ].is <uint16_t >()) { FGCOLOR = setting[" FGCOLOR" ].as <uint16_t >(); } else { count++; log_i (" Fail" ); }
364+ if (setting[" BGCOLOR" ].is <uint16_t >()) { BGCOLOR = setting[" BGCOLOR" ].as <uint16_t >(); } else { count++; log_i (" Fail" ); }
365+ if (setting[" ALCOLOR" ].is <uint16_t >()) { ALCOLOR = setting[" ALCOLOR" ].as <uint16_t >(); } else { count++; log_i (" Fail" ); }
366+ if (setting[" odd" ].is <uint16_t >()) { odd_color = setting[" odd" ].as <uint16_t >(); } else { count++; log_i (" Fail" ); }
367+ if (setting[" even" ].is <uint16_t >()) { even_color= setting[" even" ].as <uint16_t >(); } else { count++; log_i (" Fail" ); }
368+ if (setting[" wui_usr" ].is <String>()) { wui_usr = setting[" wui_usr" ].as <String>(); } else { count++; log_i (" Fail" ); }
369+ if (setting[" wui_pwd" ].is <String>()) { wui_pwd = setting[" wui_pwd" ].as <String>(); } else { count++; log_i (" Fail" ); }
370+ if (setting[" dwn_path" ].is <String>()) { dwn_path = setting[" dwn_path" ].as <String>(); } else { count++; log_i (" Fail" ); }
371+ if (!setting[" wifi" ].is <JsonArray>()) { ++count; log_i (" Fail" ); }
372+ if (count>0 ) saveConfigs ();
373+
374+ log_i (" Brightness: %d" , bright);
375+ setBrightness (bright);
376+ if (dimmerSet < 10 ) dimmerSet = 10 ;
377+
378+ file.close ();
379+
380+ EEPROM .begin (EEPROMSIZE );
381+ EEPROM .write (EEPROMSIZE - 13 , rotation);
382+ EEPROM .write (EEPROMSIZE - 14 , dimmerSet);
383+ EEPROM .write (EEPROMSIZE - 15 , bright);
384+ EEPROM .write (EEPROMSIZE - 1 , int (onlyBins));
385+ EEPROM .write (EEPROMSIZE - 2 , int (askSpiffs));
365386
366-
367-
368- EEPROM .begin (EEPROMSIZE ); // open eeprom
369- EEPROM .write (EEPROMSIZE -13 , rotation);
370- EEPROM .write (EEPROMSIZE -14 , dimmerSet);
371- EEPROM .write (EEPROMSIZE -15 , bright);
372- EEPROM .write (EEPROMSIZE -1 , int (onlyBins));
373- EEPROM .write (EEPROMSIZE -2 , int (askSpiffs));
387+ EEPROM .write (EEPROMSIZE - 3 , int ((FGCOLOR >> 8 ) & 0x00FF ));
388+ EEPROM .write (EEPROMSIZE - 4 , int (FGCOLOR & 0x00FF ));
374389
375- EEPROM .write (EEPROMSIZE - 3 , int ((FGCOLOR >> 8 ) & 0x00FF ));
376- EEPROM .write (EEPROMSIZE - 4 , int (FGCOLOR & 0x00FF ));
390+ EEPROM .write (EEPROMSIZE - 5 , int ((BGCOLOR >> 8 ) & 0x00FF ));
391+ EEPROM .write (EEPROMSIZE - 6 , int (BGCOLOR & 0x00FF ));
377392
378- EEPROM .write (EEPROMSIZE - 5 , int ((BGCOLOR >> 8 ) & 0x00FF ));
379- EEPROM .write (EEPROMSIZE - 6 , int (BGCOLOR & 0x00FF ));
393+ EEPROM .write (EEPROMSIZE - 7 , int ((ALCOLOR >> 8 ) & 0x00FF ));
394+ EEPROM .write (EEPROMSIZE - 8 , int (ALCOLOR & 0x00FF ));
380395
381- EEPROM .write (EEPROMSIZE - 7 , int ((ALCOLOR >> 8 ) & 0x00FF ));
382- EEPROM .write (EEPROMSIZE - 8 , int (ALCOLOR & 0x00FF ));
396+ EEPROM .write (EEPROMSIZE - 9 , int ((odd_color >> 8 ) & 0x00FF ));
397+ EEPROM .write (EEPROMSIZE - 10 , int (odd_color & 0x00FF ));
383398
384- EEPROM .write (EEPROMSIZE - 9 , int ((odd_color >> 8 ) & 0x00FF ));
385- EEPROM .write (EEPROMSIZE - 10 , int (odd_color & 0x00FF ));
399+ EEPROM .write (EEPROMSIZE - 11 , int ((even_color >> 8 ) & 0x00FF ));
400+ EEPROM .write (EEPROMSIZE - 12 , int (even_color & 0x00FF ));
386401
387- EEPROM .write (EEPROMSIZE -11 , int ((even_color >> 8 ) & 0x00FF ));
388- EEPROM .write (EEPROMSIZE -12 , int (even_color & 0x00FF ));
389- if (!EEPROM .commit ()) log_i (" fail to write EEPROM" ); // Store data to EEPROM
390- EEPROM .end ();
391- log_i (" Using config.conf setup file" );
402+ if (!EEPROM .commit ()) log_i (" fail to write EEPROM" );
403+ EEPROM .end ();
404+ log_i (" Using config.conf setup file" );
392405 } else {
393- Default:
406+ Default:
394407 file.close ();
395408 saveConfigs ();
396-
397409 log_i (" Using settings stored on EEPROM" );
398410 }
399411 }
@@ -404,16 +416,19 @@ void getConfigs() {
404416**********************************************************************/
405417void saveConfigs () {
406418 // Delete existing file, otherwise the configuration is appended to the file
419+ bool retry=true ;
420+ Retry:
407421 if (setupSdCard ()) {
408422 if (SDM .remove (CONFIG_FILE )) log_i (" config.conf deleted" );
409423 else log_i (" fail deleting config.conf" );
410424
411425 JsonObject setting = settings[0 ];
412- // if(!settings[0].containsKey("onlyBins"))
426+
427+ // Atribuindo as configurações ao objeto JSON
413428 setting[" onlyBins" ] = onlyBins;
414429 setting[" askSpiffs" ] = askSpiffs;
415430 setting[" bright" ] = bright;
416- setting[" dimmerSet" ] = dimmerSet;
431+ setting[" dimmerSet" ] = dimmerSet;
417432 setting[" rot" ] = rotation;
418433 setting[" FGCOLOR" ] = FGCOLOR ;
419434 setting[" BGCOLOR" ] = BGCOLOR ;
@@ -423,7 +438,7 @@ void saveConfigs() {
423438 setting[" wui_usr" ] = wui_usr;
424439 setting[" wui_pwd" ] = wui_pwd;
425440 setting[" dwn_path" ] = dwn_path;
426- if (!setting. containsKey ( " wifi" )) {
441+ if (!setting[ " wifi" ]. is <JsonArray>( )) {
427442 JsonArray WifiList = setting[" wifi" ].to <JsonArray>();
428443 if (WifiList.size ()<1 ) {
429444 JsonObject WifiObj = WifiList.add <JsonObject>();
@@ -439,9 +454,22 @@ void saveConfigs() {
439454 return ;
440455 } else log_i (" config.conf created" );
441456 // Serialize JSON to file
442- if (serializeJsonPretty (settings, file) < 5 ) {
457+ if (serializeJsonPretty (settings, file) < 5 && retry ) {
443458 log_i (" Failed to write to file" );
444- } else log_i (" config.conf written successfully" );
459+ file.close ();
460+ log_i (" Deleting file" );
461+ SDM .remove (CONFIG_FILE );
462+ log_i (" Creating default file" );
463+ // check if config file exists, otherwise create it with default values
464+ config_exists ();
465+ // Try to rewrite the configs
466+ file = SDM .open (CONFIG_FILE , FILE_READ );
467+ deserializeJson (settings, file);
468+ retry=false ;
469+ goto Retry;
470+
471+ } else if (!retry) log_i (" Create new file and Rewriting didn't work" );
472+ else log_i (" config.conf written successfully" );
445473
446474 // Close the file
447475 file.close ();
@@ -451,4 +479,4 @@ void saveConfigs() {
451479 EEPROM .writeString (EEPROMSIZE ,ssid);
452480 EEPROM .commit ();
453481 EEPROM .end ();
454- }
482+ }
0 commit comments