X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=gpio.pl;h=a701ce99375512bc0c1df1553bcc34ff42a34205;hb=e3bcdfdcd8b70430bf522436ae79bfc8f1624fd2;hp=69390e26b1d5fb833860d3d4ea11e8cdd1355643;hpb=c782b57d9cb25e0e7a702e478ec0d064efe69a17;p=x300-pci diff --git a/gpio.pl b/gpio.pl index 69390e2..a701ce9 100755 --- a/gpio.pl +++ b/gpio.pl @@ -1,12 +1,20 @@ #!/usr/bin/perl +use warnings; +use strict; + +package gpio; + +use Data::Dump qw(dump); my @last; +my $mode; -while(1) { +sub pins { my @pcf = `gpio -x pcf8591:120:0x48 readall`; my @gpio = `gpio -g readall`; my $i = 0; + foreach (@gpio) { chomp; # next unless /\d\s/; @@ -20,8 +28,17 @@ foreach (@gpio) { my $line = $_ . ( shift @pcf || ''); chomp $line; + my @l = split(/\|/, $line); + if ( $#l > 10 ) { + no warnings; + $mode->{ $l[1] } = [ $l[4] + 0, $l[2], $l[3] ]; + $mode->{ $l[11] } = [ $l[8] + 0, $l[10], $l[9] ]; + $mode->{ $l[13] } = [ $l[14], $l[15] ] if $l[15]; + #warn "## l = ",dump(@l); + } + + if ( $last[$i] && $line ne $last[$i] ) { - my @l = split(/\|/, $line); my @o = split(/\|/, $last[$i]); foreach my $i ( 0 .. $#l ) { $l[$i] = "\e[33;7;1m$l[$i]\e[0m" if $l[$i] ne $o[$i]; @@ -32,17 +49,43 @@ foreach (@gpio) { } $last[$i] = $line; $i++; + +} + +#warn "# mode = ", dump($mode); + +} #/gpio + +sub pin2dir { + my $pin = shift; + my ($p) = grep { /$pin/ } keys %$mode; +warn dump($p); + my $dir = $mode->{ $p }->[2]; + warn "# pin2dir $pin = $dir\n"; + return $dir; } -my $cmd = ; -chomp $cmd; -if ( $cmd =~ m/^(\d+)$/ ) { - my $v = `gpio -g read $1`; - warn "# pin $1 ", $v; - $v ^= 1; - system "gpio -g write $1 $v"; +sub cmd { + my $cmd = shift; + chomp $cmd; + if ( $cmd =~ m/^(\d+)$/ ) { + my $pin = $1; + system "gpio -g mode $pin out" unless pin2dir($pin) =~ m/OUT/i; + + my $v = `gpio -g read $pin`; + warn "# pin $pin ", $v; + $v ^= 1; + system "gpio -g write $pin $v"; + } } +package main; + +return 1 if caller; # used as module -} #/while +while(1) { + gpio::pins(); + my $cmd = ; + gpio::cmd($cmd); +}