From 5b51bc2884b6bae5b79266ddfdf686b411b9559c Mon Sep 17 00:00:00 2001 From: rudolfkoenig <> Date: Sat, 30 May 2015 12:57:18 +0000 Subject: [PATCH] 00_ZWDongle.pm: LastMsg patch from gero (Forum #35126) git-svn-id: https://svn.fhem.de/fhem/trunk@8657 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/00_ZWDongle.pm | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/fhem/FHEM/00_ZWDongle.pm b/fhem/FHEM/00_ZWDongle.pm index feda230df..665db35e4 100755 --- a/fhem/FHEM/00_ZWDongle.pm +++ b/fhem/FHEM/00_ZWDongle.pm @@ -491,6 +491,8 @@ ZWDongle_Write($$$@) push @{$hash->{SendStack}}, $msg; return if(int(@{$hash->{SendStack}}) > 1); } + $hash->{LastMsg}=$msg; + $hash->{RetransmitCount} = 0; $msg = "$fn$msg"; $msg = sprintf("%02x%s", length($msg)/2+1, $msg); $msg = "01$msg" . ZWDongle_CheckSum($msg); @@ -537,18 +539,31 @@ ZWDongle_Read($@) if($fb eq "06") { # ACK $data = substr($data, 2); + delete $hash->{LastMsg}; + delete $hash->{RetransmitCount}; next; } if($fb eq "15") { # NACK Log3 $name, 1, "$name: NACK received"; undef @{$hash->{SendStack}}; + delete $hash->{LastMsg}; + delete $hash->{RetransmitCount}; $data = substr($data, 2); next; } if($fb eq "18") { # CAN - if(int(@{$hash->{SendStack}})) { - Log3 $name, 4, "$name: CANCEL received, retransmitting."; - ZWDongle_Write($hash, "00", $hash->{SendStack}->[0], 1); + if(defined($hash->{LastMsg})){ + if(++$hash->{RetransmitCount} <= 5) { + Log3 $name, 4, "$name: CANCEL received, retransmit nr. ". + $hash->{RetransmitCount}; + ZWDongle_Write($hash, "00", $hash->{LastMsg}, 1); + + } else { + Log3 $name, 4, "$name: CANCEL received, no more retransmits"; + delete $hash->{LastMsg}; + delete $hash->{RetransmitCount}; + + } } else { Log3 $name, 4, "$name: CANCEL received, nothing to retransmit."; }