2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-04-22 08:11:44 +00:00

HMLAN 3keys only, regList shadowhandling cleanup, hminfo check open changes

git-svn-id: https://svn.fhem.de/fhem/trunk@4718 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
martinp876 2014-01-22 23:31:06 +00:00
parent 3b36898cd6
commit 73f23a0e2d
3 changed files with 78 additions and 37 deletions

View File

@ -778,7 +778,7 @@ sub HMLAN_writeAesKey($) {#####################################################
my ($name) = @_; my ($name) = @_;
my ($k,$kNo); my ($k,$kNo);
foreach my $i (1..5){ foreach my $i (1..3){
($kNo,$k) = ("0".$i,AttrVal($name,"hmKey".($i== 1?"":$i),"")); ($kNo,$k) = ("0".$i,AttrVal($name,"hmKey".($i== 1?"":$i),""));
($kNo,$k) = split(":",$k); ($kNo,$k) = split(":",$k);
HMLAN_SimpleWrite($defs{$name}, "Y0$i,".($k?"$kNo,$k":"00,")); HMLAN_SimpleWrite($defs{$name}, "Y0$i,".($k?"$kNo,$k":"00,"));

View File

@ -227,6 +227,8 @@ sub CUL_HM_updateConfig($){
} }
elsif ($md =~ m/HM-CC-RT-DN/){ elsif ($md =~ m/HM-CC-RT-DN/){
$attr{$name}{stateFormat} = "last:trigLast" if ($chn eq "03"); $attr{$name}{stateFormat} = "last:trigLast" if ($chn eq "03");
$hash->{helper}{shRegR}{"07"} = "00" if ($chn eq "04");# shadowReg List 7 read from CH 0
$hash->{helper}{shRegW}{"07"} = "04" if ($chn eq "00");# shadowReg List 7 write to CH 4
} }
elsif ($md =~ m/(HM-CC-VD|ROTO_ZEL-STG-RM-FSA)/){ elsif ($md =~ m/(HM-CC-VD|ROTO_ZEL-STG-RM-FSA)/){
$hash->{helper}{oldDes} = "0"; $hash->{helper}{oldDes} = "0";
@ -1932,7 +1934,8 @@ sub CUL_HM_parseCommon(@){#####################################################
$data =~ s/(..)(..)/ $1:$2/g; $data =~ s/(..)(..)/ $1:$2/g;
my $lN = ReadingsVal($chnHash->{NAME},$regLN,""); my $lN = ReadingsVal($chnHash->{NAME},$regLN,"");
my $shdwReg = $chnHash->{helper}{shadowReg}{$regLNp}; my $sdH = CUL_HM_shH($chnHash,$list,$dst);
my $shdwReg = $sdH->{helper}{shadowReg}{$regLNp};
foreach my $entry(split(' ',$data)){ foreach my $entry(split(' ',$data)){
my ($a,$d) = split(":",$entry); my ($a,$d) = split(":",$entry);
last if ($a eq "00"); last if ($a eq "00");
@ -1940,7 +1943,7 @@ sub CUL_HM_parseCommon(@){#####################################################
}else{ $lN .= " ".$entry;} }else{ $lN .= " ".$entry;}
$shdwReg =~ s/ $a:..// if ($shdwReg);# confirmed: remove from shadow $shdwReg =~ s/ $a:..// if ($shdwReg);# confirmed: remove from shadow
} }
$chnHash->{helper}{shadowReg}{$regLNp} = $shdwReg; $sdH->{helper}{shadowReg}{$regLNp} = $shdwReg; # todo possibley needs change
$lN = join(' ',sort(split(' ',$lN)));# re-order $lN = join(' ',sort(split(' ',$lN)));# re-order
if ($lN =~ s/00:00//){$lN .= " 00:00"}; if ($lN =~ s/00:00//){$lN .= " 00:00"};
CUL_HM_UpdtReadSingle($chnHash,$regLN,$lN,0); CUL_HM_UpdtReadSingle($chnHash,$regLN,$lN,0);
@ -2730,7 +2733,7 @@ sub CUL_HM_Set($@) {
} }
} }
$lChn = "00" if($list == 7 && $peerChnIn eq "");#face to send # $lChn = "00" if($list == 7 && (!$peerChnIn ||$peerChnIn eq ""));#face to send
my $cHash = CUL_HM_id2Hash($dst.($lChn eq '00'?"":$lChn)); my $cHash = CUL_HM_id2Hash($dst.($lChn eq '00'?"":$lChn));
$cHash = $hash if (!$cHash); $cHash = $hash if (!$cHash);
@ -2824,7 +2827,7 @@ sub CUL_HM_Set($@) {
} }
CUL_HM_PushCmdStack($hash,sprintf("++%s11%s%s02%s%02X%s%s", CUL_HM_PushCmdStack($hash,sprintf("++%s11%s%s02%s%02X%s%s",
$flag,$id,$dst,$chn,$lvl*2,$rval,$tval)); $flag,$id,$dst,$chn,$lvl*2,$rval,$tval));
readingsSingleUpdate($hash,"level","set_".$lvl,1); CUL_HM_UpdtReadSingle($hash,"level","set_".$lvl,1);
$state = "set_".$lvl; $state = "set_".$lvl;
} }
elsif($cmd eq "stop") { ##################################################### elsif($cmd eq "stop") { #####################################################
@ -3052,7 +3055,7 @@ sub CUL_HM_Set($@) {
$sh,$sd,$sy,$eh,$ed,$ey,($sm*16+$em)); $sh,$sd,$sy,$eh,$ed,$ey,($sm*16+$em));
} }
my %mCmd = (auto=>0,manu=>1,party=>2,boost=>3,day=>4,night=>5); my %mCmd = (auto=>0,manu=>1,party=>2,boost=>3,day=>4,night=>5);
readingsSingleUpdate($hash,"mode","set_".$mode,1); CUL_HM_UpdtReadSingle($hash,"mode","set_".$mode,1);
my $msg = '8'.($mCmd{$mode}).$chn; my $msg = '8'.($mCmd{$mode}).$chn;
$msg .= sprintf("%02X",$temp) if ($temp); $msg .= sprintf("%02X",$temp) if ($temp);
$msg .= $party if ($party); $msg .= $party if ($party);
@ -3072,7 +3075,7 @@ sub CUL_HM_Set($@) {
my $chnHash = CUL_HM_id2Hash($dst."02"); my $chnHash = CUL_HM_id2Hash($dst."02");
my $mode = ReadingsVal($chnHash->{NAME},"R-controlMode",""); my $mode = ReadingsVal($chnHash->{NAME},"R-controlMode","");
$mode =~ s/set_//;#consider set as given $mode =~ s/set_//;#consider set as given
readingsSingleUpdate($chnHash,"desired-temp-cent",$a[2],1) CUL_HM_UpdtReadSingle($chnHash,"desired-temp-cent",$a[2],1)
if($mode =~ m/central/); if($mode =~ m/central/);
} }
} }
@ -3159,7 +3162,7 @@ sub CUL_HM_Set($@) {
"state:set_$vp %", "state:set_$vp %",
"ValveDesired:$vp %"); "ValveDesired:$vp %");
readingsSingleUpdate($hash,"valvePosTC","$vp %",0); CUL_HM_UpdtReadSingle($hash,"valvePosTC","$vp %",1);
$hash->{helper}{vd}{idh} = hex(substr($dst,2,2))*20077; $hash->{helper}{vd}{idh} = hex(substr($dst,2,2))*20077;
$hash->{helper}{vd}{idl} = hex(substr($dst,4,2))*256; $hash->{helper}{vd}{idl} = hex(substr($dst,4,2))*256;
$hash->{helper}{vd}{msgCnt} = 1 if (!defined $hash->{helper}{vd}{msgCnt}); $hash->{helper}{vd}{msgCnt} = 1 if (!defined $hash->{helper}{vd}{msgCnt});
@ -3471,7 +3474,7 @@ sub CUL_HM_Set($@) {
return "$cmd not impelmented - contact sysop"; return "$cmd not impelmented - contact sysop";
} }
readingsSingleUpdate($hash,"state",$state,1) if($state); CUL_HM_UpdtReadSingle($hash,"state",$state,1) if($state);
my $rxType = CUL_HM_getRxType($devHash); my $rxType = CUL_HM_getRxType($devHash);
Log3 $name,2,"CUL_HM set $name $act"; Log3 $name,2,"CUL_HM set $name $act";
@ -3647,8 +3650,9 @@ sub CUL_HM_getConfig($){
} }
} }
else{ else{
CUL_HM_PushCmdStack($cHash,sprintf("++%s01%s%s%s0400000000%02X" my $ln = sprintf("%02X",$listNo);
,$flag,$id,$dst,$chn,$listNo)); my $mch = CUL_HM_lstCh($cHash,$ln,$chn);
CUL_HM_PushCmdStack($cHash,"++$flag"."01$id$dst$mch"."0400000000$ln");
} }
} }
} }
@ -3676,13 +3680,14 @@ sub CUL_HM_pushConfig($$$$$$$$@) {#generate messages to config data to register
#--- copy data from readings to shadow #--- copy data from readings to shadow
my $chnhash = $modules{CUL_HM}{defptr}{$dst.$chn}; my $chnhash = $modules{CUL_HM}{defptr}{$dst.$chn};
$chnhash = $hash if (!$chnhash); $chnhash = $hash if (!$chnhash);
my $sdH = CUL_HM_shH($chnhash,$list,$dst);
my $rRd = ReadingsVal($chnhash->{NAME},$regLN,""); my $rRd = ReadingsVal($chnhash->{NAME},$regLN,"");
if (!$chnhash->{helper}{shadowReg} || if (!$sdH->{helper}{shadowReg} ||
!$chnhash->{helper}{shadowReg}{$regLNp}){ !$sdH->{helper}{shadowReg}{$regLNp}){
$chnhash->{helper}{shadowReg}{$regLNp} = $rRd; $sdH->{helper}{shadowReg}{$regLNp} = $rRd;
} }
#--- update with ne value #--- update with ne value
my $regs = $chnhash->{helper}{shadowReg}{$regLNp}; my $regs = $sdH->{helper}{shadowReg}{$regLNp};
for(my $l = 0; $l < $tl; $l+=4) { #substitute changed bytes in shadow for(my $l = 0; $l < $tl; $l+=4) { #substitute changed bytes in shadow
my $addr = substr($content,$l,2); my $addr = substr($content,$l,2);
my $data = substr($content,$l+2,2); my $data = substr($content,$l+2,2);
@ -3690,10 +3695,10 @@ sub CUL_HM_pushConfig($$$$$$$$@) {#generate messages to config data to register
$regs .= " ".$addr.":".$data; $regs .= " ".$addr.":".$data;
} }
} }
$chnhash->{helper}{shadowReg}{$regLNp} = $regs; # update shadow $sdH->{helper}{shadowReg}{$regLNp} = $regs; # update shadow
my @changeList; my @changeList;
if ($prep eq "exec"){#update complete registerset if ($prep eq "exec"){#update complete registerset
@changeList = keys%{$chnhash->{helper}{shadowReg}}; @changeList = keys%{$sdH->{helper}{shadowReg}};
} }
elsif ($prep eq "prep"){ elsif ($prep eq "prep"){
return; #prepare shadowReg only. More data expected. return; #prepare shadowReg only. More data expected.
@ -3705,7 +3710,7 @@ sub CUL_HM_pushConfig($$$$$$$$@) {#generate messages to config data to register
foreach my $nrn(@changeList){ foreach my $nrn(@changeList){
my $change; my $change;
my $nrRd = ReadingsVal($chnhash->{NAME},$regPre.$nrn,""); my $nrRd = ReadingsVal($chnhash->{NAME},$regPre.$nrn,"");
foreach (sort split " ",$chnhash->{helper}{shadowReg}{$nrn}){ foreach (sort split " ",$sdH->{helper}{shadowReg}{$nrn}){
$change .= $_." " if ($nrRd !~ m /$_/);# filter only changes $change .= $_." " if ($nrRd !~ m /$_/);# filter only changes
} }
next if (!$change);#no changes next if (!$change);#no changes
@ -3827,15 +3832,16 @@ sub CUL_HM_responseSetup($$) {#store all we need to handle the response
my ($peer, $list) = ($1,$2) if ($p =~ m/..04(........)(..)/); my ($peer, $list) = ($1,$2) if ($p =~ m/..04(........)(..)/);
$peer = ($peer ne "00000000")?CUL_HM_peerChName($peer,$dst,""):""; $peer = ($peer ne "00000000")?CUL_HM_peerChName($peer,$dst,""):"";
#--- set messaging items #--- set messaging items
my $chnhash = $modules{CUL_HM}{defptr}{"$dst$chn"};
$chnhash = $hash if(!$chnhash);
my $fch = CUL_HM_shC($chnhash,$list,$chn);
CUL_HM_respWaitSu ($hash,"Pending:=RegisterRead" CUL_HM_respWaitSu ($hash,"Pending:=RegisterRead"
,"cmd:=$cmd" ,"forChn:=$chn" ,"cmd:=$cmd" ,"forChn:=$fch"
,"forList:=$list","forPeer:=$peer" ,"forList:=$list","forPeer:=$peer"
,"mNo:=".hex($mNo) ,"mNo:=".hex($mNo)
,"nAddr:=0" ,"nAddr:=0"
,"reSent:=$rss"); ,"reSent:=$rss");
#--- remove channel entries that will be replaced #--- remove channel entries that will be replaced
my $chnhash = $modules{CUL_HM}{defptr}{"$dst$chn"};
$chnhash = $hash if(!$chnhash);
$peer ="" if($list !~ m/^0[347]$/); $peer ="" if($list !~ m/^0[347]$/);
#empty val since reading will be cumulative #empty val since reading will be cumulative
@ -4130,7 +4136,7 @@ sub CUL_HM_respPendTout($) {
CUL_HM_complConfig($name); CUL_HM_complConfig($name);
} }
CUL_HM_eventP($hash,"ResndFail"); CUL_HM_eventP($hash,"ResndFail");
readingsSingleUpdate($hash,"state",$pendCmd,1); CUL_HM_UpdtReadSingle($hash,"state",$pendCmd,1);
CUL_HM_ProcessCmdStack($hash); # continue processing commands if any CUL_HM_ProcessCmdStack($hash); # continue processing commands if any
} }
else{# manage retries else{# manage retries
@ -4182,7 +4188,7 @@ sub CUL_HM_eventP($$) {#handle protocol events
my $nAttr = $hash; my $nAttr = $hash;
if ($evntType eq "Rcv"){ if ($evntType eq "Rcv"){
$nAttr->{"protLastRcv"} = TimeNow(); $nAttr->{"protLastRcv"} = TimeNow();
readingsSingleUpdate($hash,".protLastRcv",$nAttr->{"protLastRcv"},0); CUL_HM_UpdtReadSingle($hash,".protLastRcv",$nAttr->{"protLastRcv"},0);
return; return;
} }
@ -4191,7 +4197,7 @@ sub CUL_HM_eventP($$) {#handle protocol events
$nAttr->{"prot".$evntType} = ++$evntCnt." last_at:".TimeNow(); $nAttr->{"prot".$evntType} = ++$evntCnt." last_at:".TimeNow();
if ($evntType =~ m/(Nack|ResndFail|IOerr)/){# unrecoverable Error if ($evntType =~ m/(Nack|ResndFail|IOerr)/){# unrecoverable Error
readingsSingleUpdate($hash,"state",$evntType,1); CUL_HM_UpdtReadSingle($hash,"state",$evntType,1);
$hash->{helper}{prt}{bErr}++; $hash->{helper}{prt}{bErr}++;
$nAttr->{protCmdDel} = 0 if(!$nAttr->{protCmdDel}); $nAttr->{protCmdDel} = 0 if(!$nAttr->{protCmdDel});
$nAttr->{protCmdDel} += scalar @{$hash->{cmdStack}} + 1 $nAttr->{protCmdDel} += scalar @{$hash->{cmdStack}} + 1
@ -4238,7 +4244,7 @@ sub CUL_HM_protState($$){
} }
$hash->{protState} = $state; $hash->{protState} = $state;
if (!$hash->{helper}{role}{chn}){ if (!$hash->{helper}{role}{chn}){
readingsSingleUpdate($hash,"state",$state,0); CUL_HM_UpdtReadSingle($hash,"state",$state,0);
DoTrigger($name, undef); DoTrigger($name, undef);
} }
Log3 $name,6,"CUL_HM $name protEvent:$state". Log3 $name,6,"CUL_HM $name protEvent:$state".
@ -4268,7 +4274,7 @@ sub CUL_HM_ID2PeerList ($$$) {
$attr{$name}{peerIDs} = $peerIDs; # make it public $attr{$name}{peerIDs} = $peerIDs; # make it public
if ($peerNames){ if ($peerNames){
$peerNames =~ s/_chn:01//g; # channel 01 is part of device $peerNames =~ s/_chn:01//g; # channel 01 is part of device
readingsSingleUpdate($hash,"peerList",$peerNames,0); CUL_HM_UpdtReadSingle($hash,"peerList",$peerNames,0);
$hash->{peerList} = $peerNames; $hash->{peerList} = $peerNames;
my $dHash = CUL_HM_getDeviceHash($hash); my $dHash = CUL_HM_getDeviceHash($hash);
my $st = AttrVal($dHash->{NAME},"subType",""); my $st = AttrVal($dHash->{NAME},"subType","");
@ -4475,6 +4481,31 @@ sub CUL_HM_getDeviceName($) {#in: name out: name of device
my $devHash = $modules{CUL_HM}{defptr}{substr($defs{$name}{DEF},0,6)}; my $devHash = $modules{CUL_HM}{defptr}{substr($defs{$name}{DEF},0,6)};
return ($devHash)?$devHash->{NAME}:$name; return ($devHash)?$devHash->{NAME}:$name;
} }
sub CUL_HM_shH($$$){
my ($h,$l,$d) = @_;
if ( $h->{helper}{shRegW}
&& $h->{helper}{shRegW}{$l}
&& $modules{CUL_HM}{defptr}{$d.$h->{helper}{shRegW}{$l}}){
return $modules{CUL_HM}{defptr}{$d.$h->{helper}{shRegW}{$l}};
}
return $h;
}
sub CUL_HM_shC($$$){
my ($h,$l,$c) = @_;
if ( $h->{helper}{shRegW}
&& $h->{helper}{shRegW}{$l}){
return $h->{helper}{shRegW}{$l};
}
return $c;
}
sub CUL_HM_lstCh($$$){
my ($h,$l,$c) = @_;
if ( $h->{helper}{shRegR}
&& $h->{helper}{shRegR}{$l}){
return $h->{helper}{shRegR}{$l};
}
return $c;
}
#+++++++++++++++++ debug ++++++++++++++++++++++++++++++++++++++++++++++++++++++ #+++++++++++++++++ debug ++++++++++++++++++++++++++++++++++++++++++++++++++++++
sub CUL_HM_DumpProtocol($$@) { sub CUL_HM_DumpProtocol($$@) {
@ -4541,27 +4572,33 @@ sub CUL_HM_getRegFromStore($$$$@) {#read a register from backup data
$factor = $reg->{f}; $factor = $reg->{f};
$unit = " ".$reg->{u}; $unit = " ".$reg->{u};
} }
my $dst = substr(CUL_HM_name2Id($name),0,6);
if(!$regLN){ if(!$regLN){
$regLN = ((CUL_HM_getAttrInt($name,"expert") == 2)?"":".") $regLN = ((CUL_HM_getAttrInt($name,"expert") == 2)?"":".")
.sprintf("RegL_%02X:",$list) .sprintf("RegL_%02X:",$list)
.($peerId?CUL_HM_peerChName($peerId, .($peerId?CUL_HM_peerChName($peerId,
substr(CUL_HM_name2Id($name),0,6), $dst,
CUL_HM_IOid($hash)):""); CUL_HM_IOid($hash)):"");
} }
$regLN =~ s/broadcast//; $regLN =~ s/broadcast//;
my $regLNp = $regLN; my $regLNp = $regLN;
$regLNp =~s/^\.//; #remove leading '.' in case .. $regLNp =~s/^\.//; #remove leading '.' in case ..
my $sdH = CUL_HM_shH($hash,sprintf("%02X",$list),$dst);
my $sRL = ( $sdH->{helper}{shadowReg} # shadowregList
&& $sdH->{helper}{shadowReg}{$regLNp})
?$sdH->{helper}{shadowReg}{$regLNp}
:"";
my $rRL = ($hash->{READINGS}{$regLN}) #realRegList
?$hash->{READINGS}{$regLN}{VAL}
:"";
my $data=0; my $data=0;
my $convFlg = "";# confirmation flag - indicates data not confirmed by device my $convFlg = "";# confirmation flag - indicates data not confirmed by device
for (my $size2go = $size;$size2go>0;$size2go -=8){ for (my $size2go = $size;$size2go>0;$size2go -=8){
my $addrS = sprintf("%02X",$addr); my $addrS = sprintf("%02X",$addr);
my ($dReadS,$dReadR) = (undef,""); my ($dReadS,$dReadR) = (undef,"");
$dReadS = $1 if( $hash->{helper}{shadowReg} $dReadS = $1 if( $sRL =~ m/$addrS:(..)/);
&& $hash->{helper}{shadowReg}{$regLNp} $dReadR = $1 if( $rRL =~ m/$addrS:(..)/);
&& $hash->{helper}{shadowReg}{$regLNp} =~ m/$addrS:(..)/);
$dReadR = $1 if( $hash->{READINGS}{$regLN}
&&$hash->{READINGS}{$regLN}{VAL} =~ m/$addrS:(..)/);
my $dRead = $dReadR; my $dRead = $dReadR;
if (defined $dReadS){ if (defined $dReadS){
$convFlg = "set_" if ($dReadR ne $dReadS); $convFlg = "set_" if ($dReadR ne $dReadS);
@ -5124,8 +5161,8 @@ sub CUL_HM_dimLog($) {# dimmer readings - support virtual chan - unused so far
invMinus=>{calc=>'$val=(100-$val+$in)<100?(100-$val-$in) : 100' ,txt=>'100 - state + chan'}, invMinus=>{calc=>'$val=(100-$val+$in)<100?(100-$val-$in) : 100' ,txt=>'100 - state + chan'},
invMul =>{calc=>'$val=(100-$val*$in)>0?(100-$val*$in) : 0' ,txt=>'100 - state * chan'}, invMul =>{calc=>'$val=(100-$val*$in)>0?(100-$val*$in) : 0' ,txt=>'100 - state * chan'},
); );
readingsSingleUpdate($hash,"R-logicCombTxt" ,$logicComb{$lComb}{txt},0); CUL_HM_UpdtReadBulk($hash,0,"R-logicCombTxt:".$logicComb{$lComb}{txt}
readingsSingleUpdate($hash,"R-logicCombCalc",$logicComb{$lComb}{calc},0); ,"R-logicCombCalc:".$logicComb{$lComb}{calc});
return ""; return "";
} }
@ -5254,7 +5291,7 @@ sub CUL_HM_ActCheck($) {# perform supervision
} }
} }
if ($oldState ne $state){ if ($oldState ne $state){
readingsSingleUpdate($defs{$devName},"Activity",$state,1); CUL_HM_UpdtReadSingle($defs{$devName},"Activity",$state,1);
$attr{$devName}{actStatus} = $state; $attr{$devName}{actStatus} = $state;
Log3 $actHash,4,"Device ".$devName." is ".$state; Log3 $actHash,4,"Device ".$devName." is ".$state;
} }

View File

@ -136,7 +136,7 @@ sub HMinfo_regCheck(@) { ######################################################
my @entities = @_; my @entities = @_;
my @regIncompl; my @regIncompl;
my @regMissing; my @regMissing;
my @peerRegsFail; my @regChPend;
foreach my $eName (@entities){ foreach my $eName (@entities){
my $ehash = $defs{$eName}; my $ehash = $defs{$eName};
@ -151,13 +151,17 @@ sub HMinfo_regCheck(@) { ######################################################
if ( !$ehash->{READINGS}{$rNm} if ( !$ehash->{READINGS}{$rNm}
|| !$ehash->{READINGS}{$rNm}{VAL}) {push @mReg, $rNm;} || !$ehash->{READINGS}{$rNm}{VAL}) {push @mReg, $rNm;}
elsif ( $ehash->{READINGS}{$rNm}{VAL} !~ m/00:00/){push @iReg, $rNm;} elsif ( $ehash->{READINGS}{$rNm}{VAL} !~ m/00:00/){push @iReg, $rNm;}
if ($ehash->{helper}{shadowReg} && keys %{$ehash->{helper}{shadowReg}}){push @iReg, $rNm;}
} }
push @regChPend,$eName if ($ehash->{helper}{shadowReg} &&
keys %{$ehash->{helper}{shadowReg}});
push @regMissing,$eName.":\t".join(",",@mReg) if (scalar @mReg); push @regMissing,$eName.":\t".join(",",@mReg) if (scalar @mReg);
push @regIncompl,$eName.":\t".join(",",@iReg) if (scalar @iReg); push @regIncompl,$eName.":\t".join(",",@iReg) if (scalar @iReg);
} }
my $ret = ""; my $ret = "";
$ret .="\n\n missing register list\n " .(join "\n ",sort @regMissing) if(@regMissing); $ret .="\n\n missing register list\n " .(join "\n ",sort @regMissing) if(@regMissing);
$ret .="\n\n incomplete register list\n ".(join "\n ",sort @regIncompl) if(@regIncompl); $ret .="\n\n incomplete register list\n ".(join "\n ",sort @regIncompl) if(@regIncompl);
$ret .="\n\n Register changes pending\n ".(join "\n ",sort @regChPend) if(@regChPend);
return $ret; return $ret;
} }
sub HMinfo_peerCheck(@) { ##################################################### sub HMinfo_peerCheck(@) { #####################################################