[Erledigt] Anfangs-/Wiederholungsverzögerung

Wünsche, Anträge, Fehlermeldungen
GetAway
Contributor
Beiträge: 1509
Registriert: Donnerstag 27. Dezember 2007, 12:59

[Erledigt] Anfangs-/Wiederholungsverzögerung

Beitrag von GetAway »

Seit der Menüänderung funktioniert die Initialisierung der Anfangs-/Wiederholungsverzögerung nicht mehr.
Erkennbar auch an fehlender Ausgabe, oder ähnlich:

Code: Alles auswählen

[neutrino] can not use input repeat on fd_rc[0]: 22 (Invalid argument)
[neutrino] setRepeat: delay=150 period=125 use kernel-repeat: no
Vielleicht könnte mal einer die wichtigen Sachen fixen, bis dbt's technische Probleme gelöst sind. :wink:
Zuletzt geändert von GetAway am Montag 20. September 2010, 13:21, insgesamt 1-mal geändert.
dbt
Administrator
Beiträge: 2675
Registriert: Donnerstag 28. September 2006, 19:18

Re: [Broken] Anfangs-/Wiederholungsverzögerung

Beitrag von dbt »

Mir ist mein MBoard abgeraucht und das wörtlich. :evil: Ich konnte grade mal noch einges dran machen bis die Lichter ausgingen. Habe daher nur 'ne alte Kiste rausgeholt. Da ging halt nur das Notwendigste. Die Probleme sind zumindest soweit gelöst, dass ich meinen Rechner wieder normal mit neuem MBoard nutzen kann. :wink: Ich muss nur wieder einiges neu aufsetzen. Ich denke, dass ich diese Woche wieder mehr machen kann.
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: [Broken] Anfangs-/Wiederholungsverzögerung

Beitrag von seife »

GetAway hat geschrieben:Seit der Menüänderung funktioniert die Initialisierung der Anfangs-/Wiederholungsverzögerung nicht mehr.
Erkennbar auch an fehlender Ausgabe, oder ähnlich:

Code: Alles auswählen

[neutrino] can not use input repeat on fd_rc[0]: 22 (Invalid argument)
[neutrino] setRepeat: delay=150 period=125 use kernel-repeat: no
Das ist kein Fehler. Das ist nur eine info message. Ich mach die mal etwas eindeutiger...

EDIT: jetzt habe ich es verstanden. Die message fehlt dir :-) Ich mach das mit "invalid argument" trotzdem weg, das sieht so nach Fehlermeldung aus und hilft ja nicht wirklich weiter.
GetAway
Contributor
Beiträge: 1509
Registriert: Donnerstag 27. Dezember 2007, 12:59

Re: [Broken] Anfangs-/Wiederholungsverzögerung

Beitrag von GetAway »

seife hat geschrieben:Das ist kein Fehler. Das ist nur eine info message. Ich mach die mal etwas eindeutiger...

EDIT: jetzt habe ich es verstanden. Die message fehlt dir :-) Ich mach das mit "invalid argument" trotzdem weg, das sieht so nach Fehlermeldung aus und hilft ja nicht wirklich weiter.
Nein, ich meine es so wie ich sage. Das ist momentan kaputt. Es gibt keine Initialisierung beim Booten von Neutrino!
Erst nach Eintreten und Verlassen des Tastenmenü's erfolgt die Initialisierung. Das ist der gleiche Fehler wie bei der
Initialisierung des Alphablendings.

Dabei ist mir noch etwas aufgefallen.
Die Anfangsverzögerung funktioniert spür-und sehbar, aber egal was ich bei Wiederholungsverzögerung einstelle, es ist
immer gleich.

Edit:
Scheinbar wird, wenn kernel-repeat nicht unterstützt wird, der in Neutrino eingestellte repeat-Wert verworfen
und irgendein default-Wert genommen. Kannst du das bestätigen?
Dann wäre die Printf-Ausgabe für diese Hardware falsch und müßte so, oder so ähnlich, angepasst werden.

Code: Alles auswählen

[neutrino] setRepeat: delay=150 period=kernel-default use kernel-repeat: no
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: [Broken] Anfangs-/Wiederholungsverzögerung

Beitrag von seife »

Kernel-repeat geht nur mit kernel 2.6, das hätte schon lange nicht mehr gehen können.

Das wird schon so sein, dass die initialisierung nicht aufgerufen wird, seit die menüs umgebaut wurden. Dann kriegst du auch die message nicht (weder die "can't use kernel repeat", die ich heute weggemacht habe, noch die danach mit "setRepeat...".

Wenn die "setRepeat..." kommt, dann müsste es IMHO auch gehen.

Ich hatte dich ursprünglich missverstanden, dass du die "invalid argument" als "echten" Fehler interpretiert hattest, das war aber nicht so.
dbt
Administrator
Beiträge: 2675
Registriert: Donnerstag 28. September 2006, 19:18

Re: [Broken] Anfangs-/Wiederholungsverzögerung

Beitrag von dbt »

probier das mal:

Code: Alles auswählen

--- a/tuxbox/neutrino/src/gui/keybind_setup.cpp
+++ b/tuxbox/neutrino/src/gui/keybind_setup.cpp
@@ -52,6 +52,9 @@
 CKeybindSetup::CKeybindSetup(const neutrino_locale_t title, const char * const IconName)
 {
 	frameBuffer = CFrameBuffer::getInstance();
+	
+	keySetupNotifier = new CKeySetupNotifier;
+	keySetupNotifier->changeNotify(NONEXISTANT_LOCALE, NULL);
 
 	menue_title = title != NONEXISTANT_LOCALE ? title : LOCALE_MAINSETTINGS_KEYBINDING;
 	menue_icon = IconName != NULL ? IconName : NEUTRINO_ICON_KEYBINDING;
@@ -191,7 +194,7 @@ void CKeybindSetup::showSetup()
 	CMenuSeparator * ks_rc_subhead 	= new CMenuSeparator(CMenuSeparator::ALIGN_LEFT | CMenuSeparator::SUB_HEAD | CMenuSeparator::STRING, LOCALE_KEYBINDINGMENU);
 
 	CMenuSeparator *ks_rc_sep 				= new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_KEYBINDINGMENU_RC);
-	keySetupNotifier = new CKeySetupNotifier;
+	
 	CStringInput * keySettings_repeat_genericblocker 	= new CStringInput(LOCALE_KEYBINDINGMENU_REPEATBLOCKGENERIC, g_settings.repeat_genericblocker, 3, LOCALE_REPEATBLOCKER_HINT_1, LOCALE_REPEATBLOCKER_HINT_2, "0123456789 ", keySetupNotifier);
 	CStringInput * keySettings_repeatBlocker 		= new CStringInput(LOCALE_KEYBINDINGMENU_REPEATBLOCK, g_settings.repeat_blocker, 3, LOCALE_REPEATBLOCKER_HINT_1, LOCALE_REPEATBLOCKER_HINT_2, "0123456789 ", keySetupNotifier);
 	keySetupNotifier->changeNotify(NONEXISTANT_LOCALE, NULL);
GetAway
Contributor
Beiträge: 1509
Registriert: Donnerstag 27. Dezember 2007, 12:59

Re: [Broken] Anfangs-/Wiederholungsverzögerung

Beitrag von GetAway »

@dbt
Funtioniert.

Die letzte Zeile, die in deinem Posting zu sehen ist, habe ich zusätzlich entfernt.
Es ist nicht nötig das bei Menüaufruf das Notify ausgeführt wird.
Jetzt wird es bei Neutrino Start und beim Ändern der Werte + Verlassen mit OK ausgeführt.
Danke :up:

Patch: keybind_setup.cpp.diff

Das Repeat-Handling, wenn OLD RC API benutzt wird, ist trotzdem kaputt. Ich habs mal debugged
und arbeite an einer passenden Lösung.
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: [Broken] Anfangs-/Wiederholungsverzögerung

Beitrag von seife »

Aber OLD_RC_API verwendet ja, wenn überhaupt, nur noch die dreambox.
GetAway
Contributor
Beiträge: 1509
Registriert: Donnerstag 27. Dezember 2007, 12:59

Re: [Broken] Anfangs-/Wiederholungsverzögerung

Beitrag von GetAway »

Dann frage ich mich wieso meine Nokia 500 genau da rein springt. :-?
Zumal da auch noch ein Kommentar passend zum "old dbox remote control driver" drin steht.

mhm, Vielleicht ein falsches #ifdef ?? oder der Kommentar
/* OLD_RC_API */
am Anfang und Ende des Abschnitts
ist verkehrt.
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: [Broken] Anfangs-/Wiederholungsverzögerung

Beitrag von seife »

rcinput.h:

Code: Alles auswählen

#if defined HAVE_DREAMBOX_HARDWARE || defined HAVE_IPBOX_HARDWARE
#define OLD_RC_API
#include <dbox/fp.h>
#endif
, das ist die einzige stelle, an der das definiert wird.

Ich vermute, deine Nokia läuft in den #else teil von #ifdef OLD_RC_API rein ;-)
GetAway
Contributor
Beiträge: 1509
Registriert: Donnerstag 27. Dezember 2007, 12:59

Re: [Broken] Anfangs-/Wiederholungsverzögerung

Beitrag von GetAway »

Ja, läuft sie. Ich habe mich nur irriteren lassen,
da am Anfang und Ende vom else-Teile
/* OLD_RC_API */
steht. :wink:

Patch dazu, bitte ausgiebig testen.
fix_repeathandling_rcinput.diff
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: [Broken] Anfangs-/Wiederholungsverzögerung

Beitrag von seife »

Ich gehe mal davon aus, dass du das mit kernel_repeat = yes nicht getestet hast, oder?

Weil dieser Teil ist definitiv falsch - die idee vom Kernel-repeat ist ja genau der, dass man sich im userspace nicht mehr um ratecontrol etc. kümmern muss.

Was ist denn genau der Fehler, den du siehst?
Ist die Anfangsverzögerung kaputt? Nur dass wir nicht aneinander vorbeireden :-)

EDIT: ja, die Anfangsverzögerung könnte kaputt sein. Probier mal rcinput-fix-repeat_block-20100920.diff, das ist minimal anders als deins, weil es den repeat_kernel-Fall nicht anfasst.

Wichtig ist der Teil:

Code: Alles auswählen

 if (evtime > last_keypress + repeat_block_generic) // rate
+{
+       *msg = trkey | RC_Repeat;
        last_keypress = evtime;
+}
und die initalisierung auf RC_ignore davor, weil sonst beim eintreffen des ersten repeat-Events sofort repeatet wird, ohne auf den ablauf von repeat_block zu warten - einfach deswegen, weil der Default "trkey|RC_Repeat" war.
Zuletzt geändert von seife am Montag 20. September 2010, 12:07, insgesamt 1-mal geändert.
GetAway
Contributor
Beiträge: 1509
Registriert: Donnerstag 27. Dezember 2007, 12:59

Re: [Broken] Anfangs-/Wiederholungsverzögerung

Beitrag von GetAway »

Dieser Patch fixt 2 Fehler. Über den 2. kann man streiten.

1. Wiederholverzögerung bei Usern, bei denen kernel-repeat=yes nicht funktioniert.
2. Einstellbare Anfangsverzögerung bei Usern, bei denen Kernel-repeat= yes funktioniert.

zu 2: Warum soll man Usern verbieten sich eine Anfangsverzögerung einzustellen?
Meiner Meinung nach sind Kernel-repeat und Anfangsverzögerung getrennt zu betrachten.
Falls das nicht gewünscht ist kann man den Codeabschnitt ja wieder nach oben schieben.
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: [Broken] Anfangs-/Wiederholungsverzögerung

Beitrag von seife »

GetAway hat geschrieben:zu 2: Warum soll man Usern verbieten sich eine Anfangsverzögerung einzustellen?
Meiner Meinung nach sind Kernel-repeat und Anfangsverzögerung getrennt zu betrachten.
Wenn repeat_kernel=true, dann macht das alles der Kernel - schau dir den ioctl. dazu an. Wenn das an ist, dann kommen nur noch events an, die man auch wirklich haben will. Ich habe das ja deswegen eingebaut, weil es den userspace extrem vereinfacht. Aber irgendwas war damit, warum das auf nokias im kernel 2.4 nicht gescheit ging.

EDIT: das ist der Code, der den repeat setzt:

Code: Alles auswählen

1817         struct my_repeat n;
1818 
1819         n.delay = delay;
1820         n.period = period;
1821 
1822         for (int i = 0; i < NUMBER_OF_EVENT_DEVICES; i++)
1823         {
1824                 if (fd_rc[i] != -1 && ioctl(fd_rc[i], EVIOCSREP, &n) == 0)
1825                         repeat_kernel = true;
1826         }
GetAway
Contributor
Beiträge: 1509
Registriert: Donnerstag 27. Dezember 2007, 12:59

Re: [Broken] Anfangs-/Wiederholungsverzögerung

Beitrag von GetAway »

Ok, wenn das so ist, sollten die Codezielen wieder nach oben geschoben werden, so wie in deinem Patch.
Der Rest ist ja gleich geblieben.
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: [Broken] Anfangs-/Wiederholungsverzögerung

Beitrag von seife »

Wenn du es nochmal testet (ich habe es nicht mal compiliert ;-), dann checke ichs heute abend ein.
dbt
Administrator
Beiträge: 2675
Registriert: Donnerstag 28. September 2006, 19:18

Re: [Broken] Anfangs-/Wiederholungsverzögerung

Beitrag von dbt »

GetAway hat geschrieben:@dbt
Funtioniert.

Die letzte Zeile, die in deinem Posting zu sehen ist, habe ich zusätzlich entfernt.
Es ist nicht nötig das bei Menüaufruf das Notify ausgeführt wird.
Jetzt wird es bei Neutrino Start und beim Ändern der Werte + Verlassen mit OK ausgeführt.
Danke :up:
...
Den Teil habe ich gerade eingespielt. http://article.gmane.org/gmane.comp.vid ... x.scm/2508
GetAway
Contributor
Beiträge: 1509
Registriert: Donnerstag 27. Dezember 2007, 12:59

Re: [Broken] Anfangs-/Wiederholungsverzögerung

Beitrag von GetAway »

seife hat geschrieben:Wenn du es nochmal testet (ich habe es nicht mal compiliert ;-), dann checke ichs heute abend ein.
Getestet. Für mich läuft's. :wink:

@dbt
Danke. :D
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: [Broken] Anfangs-/Wiederholungsverzögerung

Beitrag von seife »

na dann: bug fixed ;)