70_STV: sleep nach jedem Kommando (perfmon meckert)

Begonnen von vbs, 08 November 2015, 13:55:40

Vorheriges Thema - Nächstes Thema

vbs

Ich hab mich gewundert, dass perfmon immer eine Verzögerung von >1 Sekunde bei mir meldet, wenn ich per STV meinen Fernseher ausschalte (set POWEROFF). Da ist im Code in Zeile 342 ein "sleep 1" in einer Schleife, was wohl dazu führen soll, dass beim Absenden mehrerer Befehle in Folge jedes Mal eine Sekunde Pause vor dem nächsten Befehl gemacht wird. Finde ich erstmal viel, aber wird schon seinen Grund haben.

          foreach my $argnum (0 .. $#ARGV) {
            # Send remote key(s)
            #Log4 $name, 4, "[STV] sending ".uc($ARGV[$argnum]);
            my $key = "KEY_" . uc($ARGV[$argnum]);
            my $messagepart3 = chr(0x00) . chr(0x00) . chr(0x00) . chr(length(encode_base64($key, ""))) . chr(0x00) . encode_base64($key, "");
            my $part3 = chr(0x00) . chr(length($tvappstring)) . chr(0x00) . $tvappstring . chr(length($messagepart3)) . chr(0x00) . $messagepart3;
            print $sock $part3;
            sleep(1);
        #        select(undef, undef, undef, 0.5);
          }

Das Problem ist mMn jedoch, dass das sleep NACH dem Befehl und auch nach einem einzelnen Befehl gemacht wird. Also auch wenn nur ein Befehl verschickt wird, wird danach eine Sekunde pausiert. Ist das Absicht?

Ich hab das bei mir mal testweise geändert in:
          foreach my $argnum (0 .. $#ARGV) {
NEU ->      sleep(1) if ($argnum > 0);
            # Send remote key(s)
            #Log4 $name, 4, "[STV] sending ".uc($ARGV[$argnum]);
            my $key = "KEY_" . uc($ARGV[$argnum]);
            my $messagepart3 = chr(0x00) . chr(0x00) . chr(0x00) . chr(length(encode_base64($key, ""))) . chr(0x00) . encode_base64($key, "");
            my $part3 = chr(0x00) . chr(length($tvappstring)) . chr(0x00) . $tvappstring . chr(length($messagepart3)) . chr(0x00) . $messagepart3;
            print $sock $part3;
        #        select(undef, undef, undef, 0.5);
          }

So dass nur VOR einem Befehl eine Pause gemacht wird und das auch erst ab dem zweiten.

Evtl. gibts Gründe, die ich übersehen habe, warum das momentan so gelöst ist. Ansonsten wäre es super, wenn das geändert sleep auch eingecheckt werden könnte.

Zwiebel

Hallo vbs,

ich hab den code nur 1zu1 übernommen. Leider hab ich kein so neuen Samsung TV um das zu testen können.

Ich hab den sleep(1) rausgenommen und hochgeladen.

Vielen Dank Gruß
Zwiebel

vbs

Hi Zwiebel,

danke fürs Committen! Das alte sleep ist jetzt zwar raus, aber das neue sleep (mit "NEU" markiert) hast du jetzt nicht übernommen. Ist das Absicht? Evtl. gibts ganz ohne sleep Probleme (wenn man davon ausgeht, dass das sleep eine Berechtigung hatte)?

Zwiebel

Hallo vbs,

hab den "Neu" Teil übersehen...habs abgeändert und hochgeladen.

vg
Zwiebel

kaihs

Hallo Zwiebel,

ich hatte im Bereich Sonstiges (der in der Maintainer.txt für dieses Modul genannt wird) noch einen anderen Patch beschrieben.

Vielleicht kannst du dir den auch mal ansehen und ggf. übernehmen.

Gruß,

Kai
Banana Pi, Add-On Board mit 1.8" TFT LCD und IR-Sender, CULFW V1.61, div. Homematic Komponenten, Pollin Funksteckdosen, Selbstbau CUL433 MHz, Jeelink Clone, EC3000
Selbstbau CUL868MHz für Wireless M-Bus, SIGNALduino mit Logilink Temp.-sensoren und Auriol Wetterstation