Firmware löschen und neu flashen

Ich habe heute die AIO+ Firmware über das Online-Tool geflasht und ein bisschen im Administrations-Menü herumgespielt - speziell am Standby-Timer. Ich wollte dann alles auf die Grundeinstellungen zurücksetzen und flashte die Firmware erneut über das Online-Tool, erstaunlicherweise aber blieb der Wert des Standby-Timers bestehen. Gibt es die Möglichkeit alles auf Anfang zurückzusetzen?

Zum löschen der Einstellungen gibt es im Adminmenü einen Unterpunkt (Alle Einstellungen löschen). Für den Notfall kann man beim Start die Tastenkombination fürs Adminmenü gedrückt halten. Da gibt es aber kein Feedback.
Ein erneutes Aufspielen der Software setzt die Einstellungen und gespeicherten Fortschritte nicht zurück, sonst müsste man ja immer, wenn die Software weiterentwickelt wird alles neu einstellen.

1 „Gefällt mir“

Danke für die Info - das macht Sinn. Gibt es denn die Möglichkeit einen kompletten „Factory Reset“ zu machen? Und bleiben die Einstellungen auch zwischen unterschiedlichen Forks bestehen?

Das kommt darauf an, was der Fork alles ändert. Bei meinen kleinen Änderungen bleibt alles erhalten, ich ändere aber auch nichts daran, was gespeichert wird und wo das gespeichert wird. Der Affenboxfork mach zum Beispiel einmalig beim ersten Starten (also direkt nach dem Upload) einen Reset also das gleiche wie „alle Einstellungen löschen“ aus dem Menü.
Am besten ist aber beim Wechseln der Software einmal die Einstellungen zu löschen. Dann bist du sicher, dass da nichts störendes im Speicher steht.

In meinem Fork Always Queue, werden auch alle Einstellungen gelöscht, wenn vorher ein anderer Fork aufgespielt war. Auch wenn bei meinem Fork Änderungen in der Konfiguration vorgenommen werden, die die Struktur von mySettings verändern, werden die Einstellungen automatisch gelöscht. Das ist auch so gewollt, um zu vermeiden, dass ungültige Werte geladen werden, die die korrekte Funktion stören oder den Betrieb sogar unmöglich machen.
Das funktioniert sehr einfach durch unterschiedliche mycookies, die konfigurationsabhängig unterschiedlich generiert werden. Stimmt das Cookie beim Start nicht mit dem vorhergehenden überein, werden die Einstellungen gelöscht.

Im Code sieht das so aus:

// ********************** Cookies ************************************************
                                               
// Abhängig von der Hardwarekonfiguration wird die Struktur von mySettings verändert.
// Zur Anpassung der Settings an die geänderte Hardware muss der EEPROM rückgesetzt werden. 
// Durch eine von den #defines abhängige Änderung von myCookie erfolgt das automatisch.

uint32_t myCookie = 130219560;                  // Grundwert myCookie zum Erkennen einer Softwareversion mit geänderter mySettings Struktur
                                                // Eine Änderung von myCookie sorgt für einen automatischen Reset der mySettings
                                                // Änderungen der #defines, die eine Strukturänderung bewirken, verändern myCookie
                                                // durch Addition bei Hinzufügen einer neuen Funktion bzw durch Subtraktion bei Entfernen einer Funktion.
                                                // Dadurch ist garantiert, das jede mySettings ändernde Konfiguration ein anderes myCookie erzeugt.

Im Setup werden die cookies so behandelt:

 // ----------------------------------------------------------------------------------------
  // *************** Settings aus EEPROM laden **und Prüfung auf geänderte Struktur durch #defines ***********
  //     Bei Änderungen in den #defines die eine Änderung der Speicherstruktur im EEPROM bewirken, wird durch 
  //     Änderung des Wertes von myCokie ein automatischer Reset von mySettings erzwungen, 
  //     um die Speicherstruktur an die neue Konfiguration anzupassen.
   
  #ifdef EarPhone
myCookie = myCookie +1;                // setzt myCookie um 1 hoch (Settings um KH-Einstellungen erweitert)
#endif                                          
#ifdef FIVEBUTTONS
myCookie = myCookie +2;                // setzt myCookie um 2 hoch (2 Zusätzliche Shortcuts in den Settings)
#endif       
#ifdef Buttonboard
myCookie = myCookie +4;                // setzt myCookie um 4 hoch (9 Zusätzliche Shortcuts in den Settings)
#endif         
  loadSettingsFromFlash();
  // ----------------------------------------------------------------------------------------

In der Laderoutine von mySettings erfolgt die Abfrage.

// ******************* my Settings vom EEPROM laden ***************************
void loadSettingsFromFlash()
{
#ifdef Konsole
  Serial.println(F("load mySettings"));
#endif
 int address = sizeof(myFolder->folder) * 100;
#ifndef AiO
  EEPROM.get(address, mySettings);
#endif
#ifdef AiO
  EEPROM_get(address, mySettings);
#endif
  if (mySettings.cookie != myCookie)      // wenn durch Änderungen bei den #defines myCookie verändert wurde -> Reset der mySettings
    resetSettings();
    migrateSettings(mySettings.version);