Bitte habt noch etwas Geduld
Von mir aus kannst Du dir gerne Zeit lassen, "mein" Fehler ist gefunden, verstanden und behoben
.
Allerdings schwebt mir immer noch eine Lösung vor, bei der der Benutzer eine Taste gedrückt hält und das Programm die relevanten Parameter selber durch Messung ermittelt.
Aktuell geht es erstmal "nur noch" um eine Optimierung/Fehlerbehebung der bestehenden cLircUsrRemote.
Eine Änderung bei den Einstellwerten und cKbdRemote ist also derzeit von meiner Seite nicht geplant.
Den Fehler bei der Auswertung mancher FB-Signale seitens des LIRCd werde ich(/wir?) erst mal versuchen schon an der Quelle (LIRCd) zu beseitigen.
Nach längerem überlegen und probieren bin ich inzwischen zu dem Schuss gekommen, dass eine einmalige automatische Erkennung nicht wirklich funktionieren wird, bzw. der Aufwand nicht lohnt:
"Setup.RcRepeatDelay" und "Setup.RcRepeatDelta" sind Einstellwerte, mit denen der User das Verhalten der FB/KB beeinflussen kann. Diese Werte kommen nicht vom Eingabegerät und können gar nicht ermittelt werden.
Da sind sich jrie, MANUAL und Quellcode einig und der Meinung schließe ich mich inzwischen auch an
.
Da irgendwas am Verhalten zu ändern macht für mich keinen Sinn. Auch die Default-Werte sind auch sinnvoll gewählt.
Den Schwellenwert für die Repeaterkennung könnte man ermitteln. Wirklich Sinn macht das für mich aber auch nicht:
- Die Fernbedienungen kommen praktisch alle über user/kernel-LIRC rein (zum Teil über Umwege), da wird der Werte gar nicht verwendet.
- Wenn man eine wirkliche Optimierung anstrebt, müsste man das für jedes Eingabegerät einzeln machen, da die Werte je Fernbedienung/Eingabegerät unterschiedlich sind. Das wird ein riesen Aufriss und der Nutzen ist fraglich.
- Wenn man nur einem VDR-weiten Wert ermittelt, führt das bei mehreren Eingabegeräten zwangsläufig zu einen Kompromiss.
Dann wird es nicht lange dauern, bis man doch eine Einstellmöglichkeit einbaut, weil irgendwer eine Kombination hat, bei der es nicht wie gewünscht funktioniert.
Dann kann man das auch gleich machen....
Der sinnvolle Wertebereich ist recht begrenzt: 80...160ms
Der genaue Wert ist auch nicht besonders kritisch, es gibt eigentlich nur 3 wichtige Schwellen:
- 150ms: Aktuell impliziter default beim Keyboard.
Failsave, sollte immer funktionieren.
Evtl. werden sehr schnelle Tastenwiederholungen fälschlich als repeat erkannt. - 120ms:
Ideal für fast alle IR-Fernbedienung, außer Sky-Protokoll (->150ms).
Risiko der Falscherkennung von schnellen Tastenwiederholungen minimal. - 90ms:
Ideal für Keyboard und einige, wenige Fernbedienungen (die aller meisten FB gehen damit nicht ->120ms)
Falscherkennung schneller Tastenwiederholungen praktisch ausgeschlossen.
Das, mit einem default von 150ms, müsste irgendwie nutzerfreundlich einstellbar zu machen sein.
Irgendwas wie: optimieren für: Standard, Ferbedienung, Keyboard, Automatisch, Manuelle Eingabe.
Wer will kann dann was einstellen, sonst lässt man es halt bei default, der dem Aktuellen entspricht (und über den sich bis jetzt ja noch keiner beschwert
).
Das auszuarbeiten, dazu bin ich aber noch nicht gekommen.
Auch sollte mit dem Hintergrund spätestens nach der 3. Wiederholung feststehen, ob es ein repeat ist:
- Abstand größer 150ms -> kein repeat (keine Hardware ist so langsam)
- Abstand kleiner 90ms -> repeat (kein Mensch ist so schnell)
- Im Bereich dazwischen:
3 oder mehr Wiederholungen im gleichen Abstand (ca. +-3ms) -> ziemlich sicher ein repeat (kein Mensch ist so genau)
Je mehr Wiederholungen und je genauer der Abstand, desto sicherer ist man.
Bei einem Keyboard wüsste man also schon bei der der ersten Wiederholung sicher, dass es ein repeat ist, da die Wiederholrate deutlich unter 90ms liegt.
Wie man das jetzt am besten umsetzt, zB. ob man den Wert temporär zwischenspeichert, habe ich mir noch nicht überlegt. Meine Priorität liegt derzeit noch bei LIRC und da braucht man das nicht.