############################################## # $Id: 16_STACKABLE_CC.pm 3738 2013-08-18 14:13:59Z rudolfkoenig $ package main; use strict; use warnings; ##################################### sub STACKABLE_CC_Initialize($) { my ($hash) = @_; LoadModule("CUL"); $hash->{Match} = "^\\*"; $hash->{DefFn} = "STACKABLE_CC_Define"; $hash->{UndefFn} = "STACKABLE_CC_Undef"; $hash->{ParseFn} = "STACKABLE_CC_Parse"; $hash->{AttrFn} = "CUL_Attr"; $hash->{AttrList} = "IODev ignore:0,1 ".$modules{CUL}{AttrList}; $hash->{WriteFn} = "STACKABLE_CC_Write"; $hash->{GetFn} = "CUL_Get"; $hash->{SetFn} = "CUL_Set"; $hash->{AddPrefix} = "STACKABLE_CC_AddPrefix"; $hash->{DelPrefix} = "STACKABLE_CC_DelPrefix"; $hash->{noRawInform} = 1; # Our message was already sent as raw. $hash->{noAutocreatedFilelog} = 1; } ##################################### sub STACKABLE_CC_Define($$) { my ($hash, $def) = @_; my @a = split("[ \t][ \t]*", $def); return "wrong syntax: define STACKABLE_CC [CUL|SCC]" if(int(@a) != 3); my $io = $defs{$a[2]}; return "$a[2] is not a CUL/STACKABLE_CC" if(!$io || !($io->{TYPE} eq "CUL" || $io->{TYPE} eq "STACKABLE_CC")); return "$io->{NAME} has alread a stacked device: $io->{STACKED}" if($io->{STACKED}); $io->{STACKED} = $hash->{NAME}; $hash->{IODev} = $io; delete($io->{".clientArray"}); # Force a recompute $hash->{initString} = $io->{initString}; $hash->{CMDS} = ""; $hash->{Clients} = $io->{Clients}; $hash->{MatchList} = $io->{MatchList}; $hash->{StackLevel} = $io->{StackLevel} ? $io->{StackLevel}+1 : 1; $hash->{STATE} = "Defined"; CUL_DoInit($hash); return undef; } ##################################### sub STACKABLE_CC_Write($$) { my ($hash,$fn,$msg) = @_; ($fn, $msg) = CUL_WriteTranslate($hash, $fn, $msg); return if(!defined($fn)); IOWrite($hash, "", "*$fn$msg"); # No more translations } ##################################### sub STACKABLE_CC_Parse($$) { my ($iohash,$msg) = @_; $msg =~ s/^.//; # Cut off prefix * my $name = $iohash->{STACKED} ? $iohash->{STACKED} : ""; my $id = $iohash->{StackLevel} ? $iohash->{StackLevel}+1 : 1; return "UNDEFINED STACKABLE_CC_$id STACKABLE_CC $iohash->{NAME}" if(!$name); return "" if(IsIgnored($name)); CUL_Parse($defs{$name}, $iohash, $name, $msg); return ""; } sub STACKABLE_CC_DelPrefix($) { my ($hash, $msg) = @_; $msg =~ s/^.//; return $msg; } sub STACKABLE_CC_AddPrefix($$) { my ($hash, $msg) = @_; return "*$msg"; } sub STACKABLE_CC_Undef($$) { my ($hash, $arg) = @_; CUL_SimpleWrite($hash, "X00"); delete $hash->{IODev}{STACKED}; return undef; } 1; =pod =begin html

STACKABLE_CC

=end html =begin html_DE

STACKABLE_CC

=end html_DE =cut