From 341bc6695cb18f347aa00b6de7c921bb4d74da62 Mon Sep 17 00:00:00 2001 From: rudolfkoenig <> Date: Sat, 25 Jul 2009 15:54:40 +0000 Subject: [PATCH] CUL for Windows git-svn-id: https://svn.fhem.de/fhem/trunk@415 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/CHANGED | 1 + fhem/FHEM/00_CUL.pm | 29 +++++++++++------------------ fhem/FHEM/00_FHZ.pm | 14 +++++++------- 3 files changed, 19 insertions(+), 25 deletions(-) diff --git a/fhem/CHANGED b/fhem/CHANGED index 14d2a9abb..954dea97e 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -518,3 +518,4 @@ - bugfix: EM/EMWZ/EMGZ set changed to work in FHEMWEB - bugfix: Avoid unitialized in xmllist for corrupt readings (reporter: Boris) - bugfix: Add binmode to 01_fhemweb.pm for windows + - bugfix: Uniform check for windows, enable CUL for windows. diff --git a/fhem/FHEM/00_CUL.pm b/fhem/FHEM/00_CUL.pm index ad5dc4764..bbc418b7a 100755 --- a/fhem/FHEM/00_CUL.pm +++ b/fhem/FHEM/00_CUL.pm @@ -511,11 +511,13 @@ CUL_ReadAnswer($$$) { my ($hash, $arg, $anydata) = @_; - return ("No FD" ,undef) if(!$hash || !defined($hash->{FD})); + return ("No FD" ,undef) + if(!$hash || ($^O !~ /Win/ && !defined($hash->{FD}))); + my ($mculdata, $rin) = ("", ''); my $nfound; for(;;) { - if($^O eq 'MSWin32') { + if($^O =~ m/Win/) { $nfound=CUL_Ready($hash); } else { vec($rin, $hash->{FD}, 1) = 1; @@ -700,22 +702,13 @@ CUL_Read($) while($culdata =~ m/\n/) { - my $dmsg; - ($dmsg,$culdata) = split("\n", $culdata); - $dmsg =~ s/\r//; - goto NEXTMSG if($dmsg eq ""); + my ($rmsg, $rssi); + ($rmsg,$culdata) = split("\n", $culdata, 2); + $rmsg =~ s/\r//; + goto NEXTMSG if($rmsg eq ""); - # Debug message, X05 - if($dmsg =~ m/p /) { - foreach my $m (split("p ", $dmsg)) { - Log GetLogLevel($name,4), "CUL: p $m"; - } - goto NEXTMSG; - } - - my $rssi; - my $rmsg = $dmsg; - if($initstr =~ m/X2/ && $dmsg =~ m/[FTKEHR]([A-F0-9][A-F0-9])+$/) { # RSSI + my $dmsg = $rmsg; + if($initstr =~ m/X2/ && $dmsg =~ m/^[FTKEHR]([A-F0-9][A-F0-9])+$/) { # RSSI my $l = length($dmsg); $rssi = hex(substr($dmsg, $l-2, 2)); $dmsg = substr($dmsg, 0, $l-2); @@ -781,7 +774,7 @@ CUL_Read($) goto NEXTMSG; } - $hash->{RSSI} = $rssi; + $hash->{RSSI} = $rssi if(defined($rssi)); $hash->{RAWMSG} = $rmsg; my $foundp = Dispatch($hash, $dmsg); if($foundp) { diff --git a/fhem/FHEM/00_FHZ.pm b/fhem/FHEM/00_FHZ.pm index 223d797b2..e1a725b5b 100755 --- a/fhem/FHEM/00_FHZ.pm +++ b/fhem/FHEM/00_FHZ.pm @@ -96,7 +96,7 @@ FHZ_Ready($) my $name = $hash->{NAME}; $hash->{PARTIAL} = ""; - if ($^O=~/Win/) { + if($^O =~ m/Win/) { $po = new Win32::SerialPort ($dev); } else { $po = new Device::SerialPort ($dev); @@ -105,7 +105,7 @@ FHZ_Ready($) Log 1, "USB device $dev reappeared"; $hash->{PortObj} = $po; - if( $^O !~ /Win/ ) { + if($^O !~ m/Win/) { $hash->{FD} = $po->FILENO; delete($readyfnlist{"$name.$dev"}); $selectlist{"$name.$dev"} = $hash; @@ -319,7 +319,7 @@ FHZ_Define($$) $hash->{DeviceName} = $dev; $hash->{PARTIAL} = ""; Log 3, "FHZ opening FHZ device $dev"; - if ($^O=~/Win/) { + if($^O =~ m/Win/) { require Win32::SerialPort; $po = new Win32::SerialPort ($dev); } else { @@ -336,7 +336,7 @@ FHZ_Define($$) Log 3, "FHZ opened FHZ device $dev"; $hash->{PortObj} = $po; - if( $^O !~ /Win/ ) { + if($^O !~ m/Win/) { $hash->{FD} = $po->FILENO; $selectlist{"$name.$dev"} = $hash; } else { @@ -444,7 +444,7 @@ FHZ_ReadAnswer($$$) my ($mfhzdata, $rin) = ("", ''); my $nfound; for(;;) { - if($^O eq 'MSWin32') { + if($^O =~ m/Win/) { $nfound=FHZ_Ready($hash); } else { vec($rin, $hash->{FD}, 1) = 1; @@ -585,14 +585,14 @@ FHZ_Reopen($) Log 1, "USB device $dev closed"; for(;;) { sleep(5); - if ($^O eq 'MSWin32') { + if($^O =~ m/Win/) { $hash->{PortObj} = new Win32::SerialPort($dev); }else{ $hash->{PortObj} = new Device::SerialPort($dev); } if($hash->{PortObj}) { Log 1, "USB device $dev reopened"; - $hash->{FD} = $hash->{PortObj}->FILENO if !($^O eq 'MSWin32'); + $hash->{FD} = $hash->{PortObj}->FILENO if($^O !~ m/Win/); FHZ_DoInit($hash->{NAME}, $hash->{ttytype}, $hash->{PortObj}); return; }