Planung einer neuer neuen Funktion: Ordner / Titel sperren

Ich möchte gerne folgende Funktion in die Software implementieren und habe eine Frage dazu, wo/wie ich es am besten im Code umsetze.
Funktion:
Es soll ein Ordner / Album (von bis) / evtl. ein spezieller Titel gesperrt werden können. Im Prinzip soll eine RFID Karte einfach nicht abspielen, wenn sie gesperrt ist.

Hintergrund ist, dass ich zwei Tonuinos habe, welche immer! (daran wird sich auch nichts ändern :wink: ) identisch gehalten werden, was die SD-Karte anbelangt, da meine Kinder viele Karten auch gerne mal austauschen. Nur wenn meine Tochter mal Hörspiele bekommt, die vom Alter her noch nichts für meinen Sohn sind, möchte ich diese Karte auf dem einen Tonuino sperren können (oder aus erzieherischen Maßnahmen :see_no_evil:).

Ich dachte an eine Modifierkarte, welche ich zuerst auflege und dann die zu sperrende Karte. Aufhebung der Sperre dann genauso. Da der Tonuino auch ausgeschaltet wird, sollte die Info bzgl. Sperre entsprechend im EEPROM abgelegt werden.
Letzten Endes zieht das ja einen Rattenschwanz im Code nach sich und mir ist bewusst, dass das wohl nicht einfach umzusetzen ist, aber ich möchte mich mal daran versuchen.

  • Adminmenü: Anlegen einer neuen Modifierkarte inkl. Sprachdatei
  • Funktion der Modifierkarte selbst
  • Abfrage beim Auflegen einer RFID-Karte, ob sie abgespielt werden kann.

Auch ist die Frage, wie viele Karten können gesperrt werden (Speicherplatz).
Meint ihr, das ist zu verwirklichen oder soll ich es gleich lassen, da aufgrund der Ressourcen nicht machbar? Oder habt ihr einen anderen / besseren / leichteren Weg bzw. Idee?

Ist es nicht sinnvoller ein Alter auf der Karte zu hinterlegen und das aktuelle Alter im EEPROM über das Admin zu speichern.

In meinem Fork nutze ich zwei weitere Bytes auf der Karte, das eine für die erweiterten Hörbuchspeicher, das andere hab ich als reserve gelassen.

Default sind die unbenutzten Bytes mit 0 gefüllt, das heißt das jede Karte prinzipiell für jedes alter ist.

1 „Gefällt mir“

Absolut, würde das auch beim erstellen der Karte auf selbiger ablegen. Es sind ja noch Bytes frei, ohne das auf andere Blocks/Sektoren erweitert werden müsste. Das Alter dann im EEPROM. Alles andere skaliert würde ich sagen nicht.

Eine Möglichkeit wäre es, aber dann kann ich die Karte nicht tageweise mal Sperren :wink: und ich müsste alle Karten neu erstellen / ändern.

Hmm, schade. Aber wenn die Experten das so sagen, dann akzeptiere ich das natürlich und verwerfe den ursprünglichen Plan… Dann wird es eben nur auf das Alter hinauslaufen.

Man könnte im Menü auch einen Punkt ergänzen der nur das Alter einträgt. Das betrifft ja nicht jede Karte.

Ändert sich das Alter deiner Kinder tageweise? Ansonsten ist das doch eher akademischer Natur. Bei Netflix oder whatever ist die Altersempfehlung ja auch fix. :wink:

EDIT: Ausserdem könntest du sehr wohl das Alter temporär auf 99 erhören (also Karte löschen und mit 99 als Alter neu erstellen), was die Karte komplett sperrt. Oder es gibt im Admin Menü ne Funktion „Alter Ändern“.

Bei Reset der Box ist ein Modifier auch nicht mehr aktiv.

Außer du speicherst ihn in den EEPROM.

Ja, das tut es. Manchmal führen sich Kinder auf, als wären sie ein paar Jahre jünger :laughing:. Daher war die erzieherische Maßnahme gedacht :wink:

Also in etwas so, dass ich eine Modifierkarte auflege, und dann im nächsten Schritt wird die zu ent-/sperrende Karte aufgelegt und dann das Alter auf 0 bzw. 99 erhöht?
Auf die Idee kam ich natürlich nicht :woozy_face:
Vielen Dank euch Beiden. Dann werde ich mal schauen, ob ich das implementiert bekomme.

So hatte ich es mir gedacht.

Im EEPROM Modifier ablegen habbich auch in meinem Fork integriert.

Und die Altersempfehlung wird da auch eingebaut.

Eine Modifier Karte gäbe es in meinem Szenario nicht. Man speichert das Alter beim erstellen der Karte auf der Karte. In den Settings der Box wird das erlaubte Alter abgelegt und wird vor dem abspielen eben gecheckt. Mehr nicht. Neu erstellt müssen nur im ersten Moment problematische Karten, das Alter 0 ist eben immer erlaubt und default.

Ach so, dann habe ich dich falsch verstanden bzw. hab etwas hinzugedacht :man_facepalming:

Danke, werde ich mir mal anschauen.

Aber man könnte durchaus einen Modifier mit temporärer Altersbeschränkung einbauen. Aber wahrscheinlich ist es einfacher, die Karte bei sich zu verwahren.

Ja, so läuft es momentan :joy:

Es war jetzt auch eher mal so ein Gedanke, ob man das mit dem Alter und temporären Sperren verwirklichen kann. Aber da ich in C einfach überhaupt nicht drin bin, muss ich mich da erstmal einarbeiten und dann noch schauen, was der Arduino alles für Befehle hat.
Wäre halt ein Learning by Doing gewesen, wo ich mich hätte einarbeiten können (wenn ich ein Ziel vor Augen habe, dann habe ich auch die Motivation). Aber irgendwie scheint der Code schon Komplex zu sein, wenn ich mir die Dev und deinen Fork so anschaue.

Als Starttipp kann ich dir geben, fang mit loop() an. Daraus folgt alles andere.
Und arbeite dich nach und nach in die Funktionen ein, die deiner Meinung nach relevant für dich sind

1 „Gefällt mir“

Wo ließt du denn die RFID-Karte ein? Der Code bei „handleCardReader ()“ ist bei dir auskommentiert. Ansonsten habe ich jetzt in der loop() nichts mehr gefunden.

Edit: Bin jetzt mit DEV und deinem Fork durcheinander gekommen. Das ist ja bei dir der Aufruf der Funktion :man_facepalming:
Man sollte nicht Beide Versionen nebeneinander betrachten.

Scroll mal ganz runter, ich hab das auf optionales stop wenn Karte weg angepasst.

Hab es gesehen… War ja der Aufruf einer Funktion. In der DEV ist ja nur die While-Schleife.

Noch eine allgemeine Frage:
Wofür steht eigentlich das Ausrufezeichen hier in der DEV:
while (!mfrc522.PICC_IsNewCardPresent());

Negieren oder Not oder Nicht

nfcTag.nfcFolderSettings.special3 nutzt du für deinen erweiterten Hörbuchspeicher, richtig? Und nfcTag.nfcFolderSettings.special4 wäre noch frei wenn ich es richtig sehe.

Richtig, ich hab das gleich als Reserve mit eingebaut.