From 238333ea578fbe1dcd1cf173f7ff7132453ccadb Mon Sep 17 00:00:00 2001 From: ntruchsess <> Date: Tue, 1 Apr 2014 15:18:56 +0000 Subject: [PATCH] OWAD: execute get-functions synchronous in async mode git-svn-id: https://svn.fhem.de/fhem/trunk@5402 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/21_OWAD.pm | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/fhem/FHEM/21_OWAD.pm b/fhem/FHEM/21_OWAD.pm index fdbbb7741..060d8a200 100644 --- a/fhem/FHEM/21_OWAD.pm +++ b/fhem/FHEM/21_OWAD.pm @@ -581,7 +581,7 @@ sub OWAD_Get($@) { if($a[1] eq "reading") { #-- OWX interface if( $interface =~ /^OWX/ ){ - $ret = OWXAD_GetPage($hash,"reading",1); + $ret = OWXAD_GetPage($hash,"reading",1,1); #-- OWFS interface }elsif( $interface eq "OWServer" ){ $ret = OWFSAD_GetPage($hash,"reading",1); @@ -605,7 +605,7 @@ sub OWAD_Get($@) { if($a[1] eq "alarm") { #-- OWX interface if( $interface =~ /^OWX/ ){ - $ret = OWXAD_GetPage($hash,"alarm",1); + $ret = OWXAD_GetPage($hash,"alarm",1,1); #-- OWFS interface }elsif( $interface eq "OWServer" ){ $ret = OWFSAD_GetPage($hash,"alarm",1); @@ -637,7 +637,7 @@ sub OWAD_Get($@) { if($a[1] eq "status") { #-- OWX interface if( $interface =~ /^OWX/ ){ - $ret = OWXAD_GetPage($hash,"status",1); + $ret = OWXAD_GetPage($hash,"status",1,1); #-- OWFS interface }elsif( $interface eq "OWServer" ){ $ret = OWFSAD_GetPage($hash,"status",1); @@ -1340,9 +1340,9 @@ sub OWXAD_BinValues($$$$$$$$) { # ######################################################################################## -sub OWXAD_GetPage($$$) { +sub OWXAD_GetPage($$$@) { - my ($hash,$page,$final) = @_; + my ($hash,$page,$final,$sync) = @_; my ($select, $res, $res2, $res3, @data, $an, $vn); @@ -1391,11 +1391,12 @@ sub OWXAD_GetPage($$$) { #=============== wrong value requested =============================== } else { return "wrong memory page requested from $owx_dev"; - } + } + my $context = "ds2450.get".$page.($final ? ".final" : ""); #-- asynchronous mode if( $hash->{ASYNC} ){ #-- reading 9 + 3 + 8 data bytes and 2 CRC bytes = 22 bytes - if (!OWX_Execute( $master, "ds2450.get".$page.($final ? ".final" : ""), 1, $owx_dev, $select, 10, undef)) { + if (!OWX_Execute( $master, $context, 1, $owx_dev, $select, 10, undef) or ($sync and !OWX_AwaitExecuteResponse($master,$context,$owx_dev))) { return "$owx_dev not accessible in reading $page page"; } #-- synchronous mode @@ -1409,7 +1410,7 @@ sub OWXAD_GetPage($$$) { return "$owx_dev has returned invalid data" if( length($res)!=22); #-- for processing we also need the 3 command bytes - OWXAD_BinValues($hash,"ds2450.get".$page.($final ? ".final" : ""),1,undef,$owx_dev,$select,10,substr($res,12,10)); + OWXAD_BinValues($hash,$context,1,undef,$owx_dev,$select,10,substr($res,12,10)); } return undef;