Wie sieht eigentlich deine remote.conf aus?
Lars.
Die will ich ja anlernen komm aber nicht bis zum schluss
Wie sieht eigentlich deine remote.conf aus?
Lars.
Die will ich ja anlernen komm aber nicht bis zum schluss
Ok, du fängst also mit einer leeren an, gut.
Lars.
Was passiert denn, wenn du PutKey so veränderst:
Codevoid cKbdRemote::PutKey(uint64_t Code, bool Repeat, bool Release) { - if (rawMode || !Put(Code, Repeat, Release)) { + if (rawMode || (!Put(Code, Repeat, Release) && !IsLearning())) { if (int func = MapCodeToFunc(Code)) Put(KBDKEY(func), Repeat, Release); } }
Das hat die Konsequenz, dass im Lern-Modus nicht versucht wird, die Taste selbst noch mal in cKbdRemote zu mappen und noch mal zu übergeben.Lars.
Wie werden denn diese Logischen Verknüpfungen ausgewertet? Bei && wenn die erste Bedienung falsch ist wird die zweite nicht mehr ausgeführt?
Sowas in der Art wollte ich eh machen hab aber die Funktion IsLearning() übersehen, und mit über die variable ging es logischerweise nicht.
Sollte aber auch funktionieren.
mfg Thomas
Ohne meinen "IsLearning()"-Patch hab ich auch die Probleme von dir, mit dem Patch sieht die remote.conf vernünftig aus.
Lars.
Wie werden denn diese Logischen Verknüpfungen ausgewertet? Bei && wenn die erste Bedienung falsch ist wird die zweite nicht mehr ausgeführt?
Genauso ist es. Deshalb sollte man bei &&-Verknüpfungen immer das "billige" vorweg prüfen, das "teure" erst später.
Und wenn das zweite gar nicht mehr geprüft werden muss, muss es hinten stehen. Dann gehen solche Konstrukte wie "Zeiger prüfen, wenn ok, dann was damit machen":
void BeispielFunktion(cRemote *remote);
if ((remote != NULL) && (remote->Name() != NULL)) {
...
}
oder in Kurzform (da ein Zeiger, der nicht NULL ist, "true" ergibt):
Wenn remote NULL wäre und das Programm die zweite Prüfung auch noch durchführen würde, dann gäbe es einen segfault.
Lars.
Ohne meinen "IsLearning()"-Patch hab ich auch die Probleme von dir, mit dem Patch sieht die remote.conf vernünftig aus.
Lars.
Ja hilft meine debug Ausgaben sehen auch gut aus kein zweites put() mehr. Und jede Taste kann genau einmal angelernt werden.
Was ist eigentlich der rawMode?
mfg Thomas
Gute Frage... War vielleicht mal zum Debuggen gut oder so...
Lars.
Das dürfte aber ein generelles Problem sein das sich irgendwann eingeschlichen hat. Und fällt nur nicht auf weil vermutlich nicht sehr viele ihre Keyboards neu anlernen bzw. über die Konsole benutzen.
mfg Thomas
Jup. Wann lernt man denn schon die Tastatur neu an? Das hat man einmal "vor Jahren" gemacht und seitdem schleppt man die remote.conf von vdr zu vdr...
Lars.
Hier noch mal der Patch als Datei.
Vielleicht magst du den Post in deinem ersten Beitrag verlinken und "[PATCH]" in die Überschrift aufnehmen? Dann fällt es kls bestimmt eher auf.
Lars.
Diese Funktion liefert false zurück wenn im Lernmodus:
bool cRemote::Put(const char *Code, bool Repeat, bool Release)
{
if (learning && this != learning)
{
dsyslog("Put !learning return false");
return false;
}
eKeys Key = Keys.Get(Name(), Code);
if (Key != kNone) {
dsyslog("Key != kNone");
if (Repeat)
Key = eKeys(Key | k_Repeat);
if (Release)
Key = eKeys(Key | k_Release);
return Put(Key);
}
if (learning) {
free(unknownCode);
unknownCode = strdup(Code);
keyPressed.Broadcast();
}
return false;
}
Display More
ist das richtig?
weil auf den rückgabe Wert wird ja geprüft, also ist rawMode doch false und wird auch nie gesetzt.
mfg Thomas
Dazu müsste man untersuchen, wie sich die anderen remotes (Lirc und das ein oder andere Plugin) verhalten.
Wenn man da einfach den Rückgabewert ändern würde, hat es evtl. weiter reichenden Einfluss als meine Änderung. Vielleicht hat Klaus ja mal bei Gelegenheit ein Ohr für uns.
Lars.
Wie ich gerade sehe wird SetRawMode nirgendwo in VDR aufgerufen, womit rawMode also immer false ist.
Weiß jemand, ob das in irgend einem Plugin benutzt wird? VDR selber hat es zumindest noch nie benutzt.
Zum Patch: ich konnte das Problem hier auch mit meiner Tastatur nachvollziehen und werde den Patch übernehmen.
Klaus
Danke Klaus fürs ansehen.
Mfg Thomas
Don’t have an account yet? Register yourself now and be a part of our community!