Ich habe das bei mir genau so in den sketch geschrieben. Funktioniert einwandfrei und den kleinen Hauptnutzer stört es nicht, dass vor dem Ausschalten kurz der Shortcut oder eben die Track-Ansage angespielt wird.
Hörbuch-Reset habe ich als Tastenkombi longpress vor und zurück realisiert.
Finde ich nicht so gut. Man könnte zum abschalten auch noch einmal im Kreis tanzen. Macht das Bedienkonzept doch nicht so komplex… Was @Gute_Laune sagt finde ich besser:
Dafür eben kein Shortcut auf Play/Pause. Bei 3 Tasten haste 2 Shortcuts bei 5 Tasten eben 4. Das ist konsistent und erklärbar, da eben diese Tasten nichts machen (sollten) während nicht gespielt wird.
Dagegen wäre ich ebenfalls, aber ein anderer Grund.
Ist die SD ordentlich gefüllt, dauert es eine Weile bis etwas abgespielt wird. Fängt der Track dann auch noch mit Pause oder zu leise an, kommt man auch auf 5s bis man gemerkt hat, dass der ShortCut erkannt wurde.
Das sind aber doch beides Features, die es bisher in der Standardsoftware gar nicht gibt. Deshalb ist das erstmal kein Problem
Oh doch, dieses Feature gibt es in der 3.1
Das ändert aber nichts daran, dass man die Playtaste unbedingt dafür reservieren muss. Wenn man den Shortcut (letzte Karte) braucht, kann man ihn auch übers Admin Menü woanders hin konfigurieren.
Hier mal meine Überlegungen zum Ausschalter.
Kurz die Voraussetzungen:
Die Shortcuts sind leider nicht hinten in den Settings, so dass es unbedingt drei bleiben müssen, auch wenn man vielleicht nicht alle nutzt.
Die Bezeichnungen der Shortcuts im Admin Menü sollte auch für alle Varianten gleich sein. Ich habe keine Lust auf unterschiedliche Files im mp3 Ordner für die verschiedenen Varianten.
Die Überlegung, die Play Taste zu nehmen, weil das am intuitivsten ist (man schaltet damit ja auch ein) würde ich auch bevorzugen.
Bleibt die Frage, was man mit dem Shortcut macht. Hier bleibt die Möglichkeit ihn wegzulassen oder up/down gleichzeitig long press zu nehmen.
Ja, ich wäre auch für die Playtaste. Ich meine aber auch, dass ein longerpress die Bedienung nicht komplizierter macht. So muss man nicht auf die Funktion von Longpress verzichten, kann aber trotzdem durch longerpress ausschalten. In diesem Fall würde ich aber longerpress doch besser nur aus dem Pausemodus aktivierbar machen.
Ja, genau das meinte ich:
Einschalten: play
Ausschalten: playLong (nur in Idle und Pause)
Ehemals Shortcut1: up+down Long
Punkt 1: Bug oder Feature?
Bei aufgelegter Karte kann man sich im Adminmenü nicht mehr durch die Optionen navigieren, da die Box nicht mehr auf die Tasten reagiert. Sobald man die Karte runter nimmt geht es sofort wieder.
Punkt 2: Ich habe alle 40 Karten der ersten Box ausprobiert. Alle funktionieren ohne Probleme sofort, mit Ausnahme einer Karte. Bei dieser kriege ich einen error 5 vom dfplayer. Die Karte ist als Album Karte definiert, im Ordner sind nur mp3s. Die erste Box mit AIO und dem alwaysqueue fork spielt die Karte problemlos.
Ja, das war als Feature gedacht. Nicht das aus Versehen eine Karte liegen bleibt und diese dann überschrieben wird. Wenn beim Karte konfigurieren im letzten Schritt schon eine Karte liegt, wird diese einfach überschrieben. Können wir sehr gerne drüber diskutieren, ob das Feature weg soll. Was meinen auch die Anderen?
Das sieht mir sehr danach aus, als ob da was mit der SD Karte nicht stimmt. Error 5 ist DfMp3_Error_FileIndexOut, also als ob in dem Verzeichnis keine Datei ist oder als ob das Verzeichnis gar nicht da ist. Ansonsten schicke doch mal das Log.
Ok, habe es dann mal so auf dem Branch „issue_028“ implementiert. Ich hoffe, es können jetzt alle damit leben.
Zusammengefasst nochmal das Verhalten aller Buttons:
three Button
============
vol/next-prev inverted
admin-menu idle pause play play
--------------------------------------------------------------------------
pause select play pause pause
pauseLong end adm shutdown shutdown track# track#
up next next vol++
upLong next 10 shortcut2 shortcut2 vol++ cont. next
down prev prev vol--
downLong prev 10 shortcut3 shortcut3 vol-- cont. prev
updownLong shortcut1 shortcut1
five Button
===========
vol/next-prev inverted has no effect for 5 Buttons
admin-menu idle pause play
-----------------------------------------------------------
pause select play pause
pauseLong end adm shutdown shutdown track#
up next next
upLong next 10 shortcut2 shortcut2 next 10
down prev prev
downLong prev 10 shortcut2 shortcut3 prev 10
updownLong shortcut1 shortcut1
four next vol++
fourLong next 10 vol++ cont.
five prev vol--
fiveLong prev 10 vol-- cont.
Gebt ihr hier eine Info, wenn die Implementierungen in den Hauptzweig geflossen und als online Update zur Verfügung stehen oder ist es sinnvoller das direkt aus dem github aufzuspielen?
Ja natürlich geben wir Bescheid. Du kannst aber auch gerne schon den Branch testen. Wenn nicht größere Widersprüche kommen, sollte der Branch nächste Woche gemerged werden.
Vielleicht wäre es auch eine Idee das Datum als Information, die in der Konsole angezeigt wird, mit aufzunehmen. Dann kann man sehen auf welchem Stand das online-update ist.
Also so wie das @stephan hat müsste ja reichen, dann muss da nichts von Hand geändert werden.
Ja, ich habe jetzt zusätzlich zur Version 3.1 ein Patch eingeführt. Wird bei jedem Commit vorher hochgezählt. Wenn man auf einem Branch ist kommt z.B. die Zeile im Logt:
V3.1.issue_028 22.12.2
2
Auf main kommt z.B.:
V3.1.1 22.12.22
Ist auf dem Branch ‚issue_028‘ so implementiert. Wenn dieser dann nach main gemerged wird, wird das dann dort auch implementiert.
Ich habe auf dem Branch ‚issue_028‘ noch ein bisschen weiterentwickelt. Die Behandlung der Buttons ist jetzt nicht mehr in den Files verstreut, sonder wird komplett in commands.cpp abgehandelt.
Z.B. findet man dort jetzt obige Tabelle genau so im Code als Konstante:
constexpr command cmd_table[][4] = {
/* raw commands adm idle/pause play play_invert */
/* none, */ { command::none , command::none , command::none , command::none },
/* start, */ { command::none , command::start , command::none , command::none },
/* allLong, */ { command::none , command::admin , command::admin , command::admin },
/* pause, */ { command::select , command::pause , command::pause , command::pause },
/* pauseLong, */ { command::adm_end , command::shutdown , command::track , command::track },
#ifdef FIVEBUTTONS
/* up, */ { command::next , command::none , command::next , command::none },
/* upLong, */ { command::next10 , command::shortcut2, command::next10 , command::none },
/* upLongRepeat, */ { command::none , command::none , command::none , command::none },
/* down, */ { command::previous , command::none , command::previous , command::none },
/* downLong, */ { command::previous10, command::shortcut3, command::previous10 , command::none },
/* downLongRepeat, */ { command::none , command::none , command::none , command::none },
/* updownLong, */ { command::none , command::shortcut1, command::none , command::none },
/* four, */ { command::next , command::none , command::volume_up , command::none },
/* fourLong, */ { command::next10 , command::none , command::volume_up , command::none },
/* fourLongRepeat, */ { command::none , command::none , command::volume_up , command::none },
/* five, */ { command::previous , command::none , command::volume_down, command::none },
/* fiveLong, */ { command::previous10, command::none , command::volume_down, command::none },
/* fiveLongRepeat, */ { command::none , command::none , command::volume_down, command::none }
#else // Three Button
/* up, */ { command::next , command::none , command::next , command::volume_up },
/* upLong, */ { command::next10 , command::shortcut2, command::volume_up , command::next },
/* upLongRepeat, */ { command::none , command::none , command::volume_up , command::none },
/* down, */ { command::previous , command::none , command::previous , command::volume_down },
/* downLong, */ { command::previous10, command::shortcut3, command::volume_down, command::previous },
/* downLongRepeat, */ { command::none , command::none , command::volume_down, command::none },
/* updownLong, */ { command::none , command::shortcut1, command::none , command::none }
#endif
};
Wer also irgendwas anders haben möchte, kann das hier einfach ändern.
Es wäre schön, wenn sich noch ein paar Tester für den Branch ‚issue_028‘ finden, vielleicht kann ich das dann noch vor Weihnachten mergen.
Habt ihr für die RegressionsTestung ein richtiges Testprotokoll mit Testfällen oder wird immer wild getestet? Grundsätzlich könnte ich hier unterstützen, auch bei der Erstellung eines Testprotokolls, aber das schaffe ich dieses Jahr nicht mehr. Wir haben am Sonntag Nachwuchs bekommen.
Hallo, ich habe eben die 3.1 installiert (über die 2.2 via Webupload; nicht der 028 branch) und folgendes Problem:
Ich habe zwei Karten als Einzelmodus antrainiert (ein bestimmtes Lied im Ordner soll abgespielt werden).
- Wenn ich Karte 1 auflege, dann spielt er Lied 1 – korrekt.
- Wenn ich sie wegnehme, stoppt er – korrekt
- Wenn ich Karte 2 auflege, macht er mit Lied 1 weiter anstatt Lied 2 zu spielen – korrekt wäre Lied 2.
Ist das bekannt?
Karte 2 ist auf jeden Fall richtig trainiert. Wenn ich den Tonuino ausschalte und dann Karte 2 nutze, spielt er Lied 2.
EDIT: Nachdem ich weitere Karten antrainiert habe, scheint das „Pause, wenn Karte entfernt“, gar nicht mehr zu gehen. In der Console erscheint direkt nach dem Removed
ein Play
StartPlay -> Play
enter Play
Card Removed
Play::react(c) 1
Hellooo, wisst ihr denn wer die TonUnino- Android - App geschrieben hat? Wird die dann auch auf 3.1 angepasst oooder gehen die Kartem dann immernoch?