7 use Data::Dump qw(dump);
14 my @pcf = `gpio -x pcf8591:120:0x48 readall`;
15 my @gpio = `gpio -g readall`;
22 # kill wiringpi mapping columns
26 s/([ \d]{2})(...GPIO.)../$1$2$1/;
27 s/(GPIO.)..(...)(\s*\d+)/$1$3$2$3/;
29 my $line = substr($_,0,29) . substr($_,39);
30 $line .= shift @pcf || '';
33 my @l = split(/\|/, $line);
34 my @o = split(/\|/, $last[$i] || '');
40 $mode->{ $l[1] } = [ $l[4] + 0, $l[2], $l[3] ];
41 $mode->{ $l[9] } = [ $l[6] + 0, $l[8], $l[7] ];
42 $mode->{ $l[11] } = [ $l[12], $l[13] ] if $l[13];
43 #warn "## l = ",dump(@l);
47 if ( $last[$i] && $line ne $last[$i] ) {
48 foreach my $i ( 0 .. $#l ) {
49 $l[$i] = "\e[33;7;1m$l[$i]\e[0m" if $l[$i] ne $o[$i];
51 $line = join('|', @l) . "|";
58 #warn "# mode = ", dump($mode);
64 my ($p) = grep { /$pin/ } keys %$mode;
66 my $dir = $mode->{ $p }->[2];
67 warn "# pin2dir $pin = $dir\n";
74 if ( $cmd =~ m/^(\d+)$/ ) {
76 system "gpio -g mode $pin out" unless pin2dir($pin) =~ m/OUT/i;
78 my $v = `gpio -g read $pin`;
79 warn "# pin $pin ", $v;
81 system "gpio -g write $pin $v";
87 return 1 if caller; # used as module