X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=lib%2FRFID%2FBiblio%2Flibrfid.pm;h=a8044ee274facc389d452a0bb35e36c61e4aebd2;hb=9ddb849a099a53c941316f58c04615f51305f08d;hp=2dbe62c83ee9184032ce415bbc9213d4e6f890ad;hpb=f2745331e3de510b2cc814217578774a7b5a6d17;p=Biblio-RFID.git diff --git a/lib/RFID/Biblio/librfid.pm b/lib/RFID/Biblio/librfid.pm index 2dbe62c..a8044ee 100644 --- a/lib/RFID/Biblio/librfid.pm +++ b/lib/RFID/Biblio/librfid.pm @@ -6,6 +6,8 @@ use strict; use base 'RFID::Biblio'; use RFID::Biblio; +use Data::Dump qw(dump); + =head1 NAME RFID::Biblio::librfid - execute librfid-tool @@ -16,31 +18,72 @@ This is wrapper around C from L +Due to limitation of C only C and +C is supported. + +However, this code might provide template for integration +with any command-line utilities for different RFID readers. + =cut sub serial_settings {} # don't open serial -our $tool = '/rest/cvs/librfid/utils/librfid-tool'; +our $bin = '/rest/cvs/librfid/utils/librfid-tool'; sub init { - warn "# no $tool found\n" if ! -e $tool; + my $self = shift; + warn "# no $bin found\n" if ! -e $bin; } -sub inventory { +sub _grep_tool { + my ( $param, $coderef ) = @_; - my @tags; - - open(my $s, '-|', "$tool --scan") || die $!; + warn "# _grep_tool $bin $param\n"; + open(my $s, '-|', "$bin $param") || die $!; while(<$s>) { chomp; warn "## $_\n"; + + my $sid; if ( m/success.+:\s+(.+)/ ) { - push @tags, $1; + $sid = $1; + $sid =~ s/\s*'\s*//g; + $sid = uc join('', reverse split(/\s+/, $sid)); } + + $coderef->( $sid ); } + +} + +sub inventory { + + my @tags; + _grep_tool '--scan' => sub { + my $sid = shift; + push @tags, $sid if $sid; + }; + warn "# invetory ",dump(@tags); return @tags; } +sub read_blocks { + + my $sid; + my $blocks; + _grep_tool '--read -1' => sub { + $sid ||= shift; + $blocks->{$sid}->[$1] = hex2bytes($2) + if m/block\[\s*(\d+):.+data.+:\s*(.+)/; + + }; + warn "# read_blocks ",dump($blocks); + return $blocks; +} + +sub write_blocks {} +sub read_afi {} +sub write_afi {} 1