mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-14 05:46:35 +00:00
DevIo.pm: set state reading if changing STATE (Forum #29764), increase read buffer size (Forum #29557)
git-svn-id: https://svn.fhem.de/fhem/trunk@7099 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
29163f5fb7
commit
ea27b8db5f
@ -12,6 +12,14 @@ sub DevIo_SimpleReadWithTimeout($$);
|
||||
sub DevIo_SimpleWrite($$$);
|
||||
sub DevIo_TimeoutRead($$);
|
||||
|
||||
sub
|
||||
DevIo_setStates($$)
|
||||
{
|
||||
my ($hash, $val) = @_;
|
||||
$hash->{STATE} = $val;
|
||||
setReadingsVal($hash, "state", $val, TimeNow());
|
||||
}
|
||||
|
||||
########################
|
||||
sub
|
||||
DevIo_DoSimpleRead($)
|
||||
@ -23,11 +31,11 @@ DevIo_DoSimpleRead($)
|
||||
$buf = $hash->{USBDev}->input();
|
||||
|
||||
} elsif($hash->{DIODev}) {
|
||||
$res = sysread($hash->{DIODev}, $buf, 256);
|
||||
$res = sysread($hash->{DIODev}, $buf, 4096);
|
||||
$buf = undef if(!defined($res));
|
||||
|
||||
} elsif($hash->{TCPDev}) {
|
||||
$res = sysread($hash->{TCPDev}, $buf, 256);
|
||||
$res = sysread($hash->{TCPDev}, $buf, 4096);
|
||||
$buf = "" if(!defined($res));
|
||||
|
||||
}
|
||||
@ -35,6 +43,7 @@ DevIo_DoSimpleRead($)
|
||||
}
|
||||
|
||||
########################
|
||||
# If called directly after a select, it should not block.
|
||||
sub
|
||||
DevIo_SimpleRead($)
|
||||
{
|
||||
@ -44,7 +53,7 @@ DevIo_SimpleRead($)
|
||||
###########
|
||||
# Lets' try again: Some drivers return len(0) on the first read...
|
||||
if(defined($buf) && length($buf) == 0) {
|
||||
$buf = DevIo_DoSimpleRead($hash);
|
||||
$buf = DevIo_SimpleReadWithTimeout($hash, 1);
|
||||
}
|
||||
|
||||
if(!defined($buf) || length($buf) == 0) {
|
||||
@ -130,7 +139,7 @@ DevIo_Expect($$$)
|
||||
my $answer= DevIo_SimpleReadWithTimeout($hash, $timeout);
|
||||
return $answer unless($answer eq "");
|
||||
# the device has failed to deliver a result
|
||||
$hash->{STATE}= "failed";
|
||||
DevIo_setStates($hash, "failed");
|
||||
DoTrigger($name, "FAILED");
|
||||
# reopen device
|
||||
# unclear how to know whether the following succeeded
|
||||
@ -145,7 +154,7 @@ DevIo_Expect($$$)
|
||||
$answer= DevIo_SimpleReadWithTimeout($hash, $timeout);
|
||||
# success
|
||||
if($answer ne "") {
|
||||
$hash->{STATE}= "opened";
|
||||
DevIo_setStates($hash, "opened");
|
||||
DoTrigger($name, "CONNECTED");
|
||||
return $answer;
|
||||
}
|
||||
@ -186,7 +195,7 @@ DevIo_OpenDev($$$)
|
||||
if(!$conn) {
|
||||
Log3 $name, 3, "Can't connect to $dev: $!" if(!$reopen);
|
||||
$readyfnlist{"$name.$dev"} = $hash;
|
||||
$hash->{STATE} = "disconnected";
|
||||
DevIo_setStates($hash, "disconnected");
|
||||
return "";
|
||||
}
|
||||
$hash->{TCPDev} = $conn;
|
||||
@ -213,7 +222,7 @@ DevIo_OpenDev($$$)
|
||||
} else {
|
||||
Log3 $name, 3, "Can't connect to $dev: $!" if(!$reopen);
|
||||
$readyfnlist{"$name.$dev"} = $hash;
|
||||
$hash->{STATE} = "disconnected";
|
||||
DevIo_setStates($hash, "disconnected");
|
||||
$hash->{NEXT_OPEN} = time()+60;
|
||||
return "";
|
||||
}
|
||||
@ -229,7 +238,7 @@ DevIo_OpenDev($$$)
|
||||
return undef if($reopen);
|
||||
Log3 $name, 3, "Can't open $dev: $!";
|
||||
$readyfnlist{"$name.$dev"} = $hash;
|
||||
$hash->{STATE} = "disconnected";
|
||||
DevIo_setStates($hash, "disconnected");
|
||||
return "";
|
||||
}
|
||||
|
||||
@ -266,7 +275,7 @@ DevIo_OpenDev($$$)
|
||||
return undef if($reopen);
|
||||
Log3 $name, 3, "Can't open $dev: $!";
|
||||
$readyfnlist{"$name.$dev"} = $hash;
|
||||
$hash->{STATE} = "disconnected";
|
||||
DevIo_setStates($hash, "disconnected");
|
||||
return "";
|
||||
}
|
||||
$hash->{USBDev} = $po;
|
||||
@ -316,7 +325,7 @@ DevIo_OpenDev($$$)
|
||||
Log3 $name, 3, "$name device opened" if(!$hash->{DevioText});
|
||||
}
|
||||
|
||||
$hash->{STATE}="opened";
|
||||
DevIo_setStates($hash, "opened");
|
||||
|
||||
my $ret;
|
||||
if($initfn) {
|
||||
@ -387,8 +396,7 @@ DevIo_Disconnected($)
|
||||
Log3 $name, 1, "$dev disconnected, waiting to reappear ($name)";
|
||||
DevIo_CloseDev($hash);
|
||||
$readyfnlist{"$name.$dev"} = $hash; # Start polling
|
||||
$hash->{STATE} = "disconnected";
|
||||
setReadingsVal($hash, "state", "disconnected", TimeNow());
|
||||
DevIo_setStates($hash, "disconnected");
|
||||
|
||||
DoTrigger($name, "DISCONNECTED");
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user