From b73c5c6bd40cc2b5eead249538a6c10bbc792664 Mon Sep 17 00:00:00 2001 From: rudolfkoenig Date: Mon, 1 Jun 2015 07:23:48 +0000 Subject: [PATCH] 00_ZWDongle.pm: fixing stack handling (Forum #35126) git-svn-id: https://svn.fhem.de/fhem/trunk@8675 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/00_ZWDongle.pm | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/fhem/FHEM/00_ZWDongle.pm b/fhem/FHEM/00_ZWDongle.pm index 28154061c..cc2601fe3 100755 --- a/fhem/FHEM/00_ZWDongle.pm +++ b/fhem/FHEM/00_ZWDongle.pm @@ -497,17 +497,21 @@ ZWDongle_Write($$$) $msg = "01$msg" . ZWDongle_CheckSum($msg); # push message on stack - push @{$hash->{SendStack}}, $msg; + my $ss = $hash->{SendStack}; + push @{$ss}, $msg; # assure that wakeupNoMoreInformation is the last message on the sendStack if($msg =~ m/^01....13(..)/) { + my $wNMIre = '01....13..028408'; my $wNMI; - my @s = grep { /^01....13..028408/ ? ($wNMI=$_,0):1 } @{$hash->{SendStack}}; + my $w1 = shift @{$ss} if($ss->[0] =~ m/$wNMIre/); # keep the first, #35126 + my @s = grep { /^$wNMIre/ ? ($wNMI=$_,0):1 } @{$ss}; if($wNMI) { Log3 $hash, 5, "ZWDongle_Write reordered sendStack"; push @s, $wNMI; $hash->{SendStack} = \@s; } + unshift($hash->{SendStack}, $w1) if($w1); } #send first message if not waiting for ACK @@ -591,7 +595,7 @@ ZWDongle_Read($@) Log3 $name, 5, "$name: ACK received"; $data = substr($data, 2); # ZWDongle messages are removed if ZW_SEND_DATA:OK is received - if(!@{$hash->{SendStack}} || $hash->{SendStack}->[0] !~ m/^......13/) { + if(!@{$hash->{SendStack}} || $hash->{SendStack}->[0] !~ m/^01....13/) { shift @{$hash->{SendStack}}; $hash->{WaitForAck} = 0; $hash->{SendRetrys} = 0;