KeymapAdaption - Erweiterung für keymap zur Deaktvierung der Funktion beim Loslassen der Taste nach langem Tastendruck

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • KeymapAdaption - Erweiterung für keymap zur Deaktvierung der Funktion beim Loslassen der Taste nach langem Tastendruck

      Wenn für eine Fernbedienungstaste eine Funktion für langen und normalen Tastendruck definiert ist, kommt es - vor allem wenn die auszuführende Aktivität des langen Tastendrucks nur kurz dauert - dazu, dass die für normalen Tastendruck vorgesehene Funktion nach dem langen Tastendruck ebenfalls aufgerufen wird.
      In der keymap sind das die flags 'l' und 'b'.
      Von Programmierern wird das meist in der Programmroutine abgefangen, was aber etwas mühsam ist.

      Das Plugin KeymapAdaption verhindert, dass die mit flag 'b' definierte Funktion nach Durchführung der mit flag 'l' definierten Funktion ausgeführt wird.

      Zusätzlich kann man einstellen, dass ein langer Tastendruck und/oder die Wiederholungsfunktion für die Tasten generell verhindert werden.

      Standardmässig wird die Priorität auf -10 gesetzt (Eingabe = 10). Das verhindert in allen wesentlichen keymaps - die üblicherweise mit Priorität 1 bis -4 abgearbeitet werden - die Ausführung der mit flag 'b' definierten Funktion nach einem langen Tastendruck. Mir bekannte Ausnahmen sind die Plugins ShootYourScreen und GrannyButton, die mit maximaler Priorität -7FFFFFFF(hex) arbeiten. Wenn man diese übersteuern möchte muss man die Priorität in KeymapAdaption ebenfalls auf den Maximalwert stellen.

      Für Plugin-Entwickler:
      Diese Funktion sollte eigentlich im VTI integriert werden. Wenn man diese als Entwickler in seinen Programmen anwenden will muss man gleichzeitig dafür Sorge tragen, dass das Plugin installiert und aktiviert ist.
      Temporär (bis zum nächsten Restart oder Ausführung des Setups für das Plugin) kann man bei installiertem Plugin die Funktionen auch mit folgenden config-Parametern steuern:
      config.plugins.KeymapAdaption.activate_
      config.plugins.KeymapAdaption.stopLong_
      config.plugins.KeymapAdaption.stopRepeated_
      Achtung auf den Unterstrich! True = aktiviert, False = deaktiviert, wobei die letzten beiden jedenfalls deaktiviert sind, wenn ...activate_ nicht aktiviert ist.
      Wichtig ist, dass das Plugin nur 1 x installiert wird - also nicht in anderen Plugins importieren und ausführen, weil jedesmal eine weitere Key-Abfrageroutine angelegt werden würde und irgendwann das System in die Knie geht.

      Eigentlich würde das Plugins zu den SystemPlugins gehören. Ich stelle es jetzt mal als Extension ein.
      Falls es positive Rückmeldungen gibt werde ich die dahinterliegende Funktion beim VTI-Team zur Implementierung in zukünftigen VTI-Versionen vorschlagen.

      PS:
      Manchmal lässt sich das eingangs beschriebene Problem auch lösen, wenn man in der keymap für die Taste einen zusätzlichen Eintrag mit flag 'm' macht und mit diesem im Programm eine Funktion aufruft, die einfach nichts macht (pass oder return). Warum das so ist habe ich nicht herausgefunden, das dürfte eigentlich nicht funktionieren. Vielleicht ist ja irgendwo definiert, dass drei Funktionen mit einem Tastendruck nicht zulässig sind.
      Dateien
      Skin: Nemesis FHD (mit vielen eigenen Skinparts), MyEPG, EMC, OScam 1.20 rev.11682, ORF-Karte, MCC MovieCutCenter

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von WeFraJo ()

    • Zuerst einmal die gute Nachricht:
      Das Plugin verhindert zuverlässich nach einem langen Tastendruck und auch nach der Wiederholfunktion die Ausführung der in der keymap mit flag 'b' definierten Funktion. Es gaukelt aufgrund der höheren Priorität den nachfolgenen keymap-Aktionen einfach vor, dass die Taste nicht losgelassen wurde. Das konkrete Handling dazu geschieht in Components/ActionMap.py. Dort werden allerdings die bereits in der keymap aufbereiteten Informationen verarbeitet, das flag liegt hier nicht mehr vor.

      Die schlechte Nachricht:
      Beim Start der Box werden aus der keymap die unter context="GlobalActions" definierten Tastenzuweisungen eingelesen. Diese bleiben dauerhaft im System.
      Wenn man in eigenen Programmen/Plugins eine der dort definierten Tasten verwendet solte man das durch GlobalActions definierte, nicht benötigte flag mit einer eigenen Zuweisung (die nichts macht) deaktivieren. Sonst kann es sein, dass vor/nach dem gewünschten Tastendruck die Funktion aus 'GlobalActions' aufgerufen wird, die dann je nach Situation was macht oder auch nicht.
      Betroffen sind die Tasten Power, Volume, Mute und Timer.

      Noch schlimmer wird es, wenn die selbst definierte Funktion flag 'm' verwendet und diese ein Programm aufruft, das andere contexts aus der keymap verwendet. Wenn das rasch genug passiert (innerhalb etwa 1/8 Sekunde) dann wird beim Loslassen der Taste flag 'b' ausgelöst, das - wenn es im aufgerufenen Programm eine Definition hat - diese dort gleich ausführt.
      In diesem Fall sollte man seine eigene Funktion mit flag 'b' starten. 'm' muss man hier nicht deaktivieren, weil es im eigenen Programm ohnehin nichts tut.

      Als Priorität zum Übersteuern der Standardtastenfunktion muss mindestens -2 oder kleiner gewählt werden, aber nicht höher als die Definition im KeymapAdaption-Plugin.

      Ich glaube, mit dem Plugin und den beschriebenen Masnahmen sollte man alle Tastenprobelme in selbst erstellten Programmen im Griff haben. Ansonsten bitte hier die Situation rückmelden. Danke!
      Skin: Nemesis FHD (mit vielen eigenen Skinparts), MyEPG, EMC, OScam 1.20 rev.11682, ORF-Karte, MCC MovieCutCenter

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von WeFraJo ()