librfid inventory
authorDobrica Pavlinusic <dpavlin@rot13.org>
Thu, 29 Jul 2010 15:48:34 +0000 (17:48 +0200)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Thu, 29 Jul 2010 15:48:34 +0000 (17:48 +0200)
lib/RFID/Biblio.pm
lib/RFID/Biblio/librfid.pm [new file with mode: 0644]
t/30-librfid.t [new file with mode: 0755]

index 4f3499d..df44707 100644 (file)
@@ -64,9 +64,14 @@ sub port {
        return $self->{port} if defined $self->{port};
 
        my $settings = $self->serial_settings;
-       $settings->{device} ||= $ENV{RFID_DEVICE};
+       my $device   = $settings->{device} ||= $ENV{RFID_DEVICE};
        warn "# settings ",dump $settings;
 
+       if ( ! $device ) {
+               warn "# no device, serial port not opened\n";
+               return;
+       }
+
        $self->{port} = Device::SerialPort->new( $settings->{device} )
        || die "can't open serial port: $!\n";
 
diff --git a/lib/RFID/Biblio/librfid.pm b/lib/RFID/Biblio/librfid.pm
new file mode 100644 (file)
index 0000000..2dbe62c
--- /dev/null
@@ -0,0 +1,46 @@
+package RFID::Biblio::librfid;
+
+use warnings;
+use strict;
+
+use base 'RFID::Biblio';
+use RFID::Biblio;
+
+=head1 NAME
+
+RFID::Biblio::librfid - execute librfid-tool
+
+=head2 DESCRIPTION
+
+This is wrapper around C<librfid-tool> from
+
+L<http://openmrtd.org/projects/librfid/>
+
+=cut
+
+sub serial_settings {} # don't open serial
+
+our $tool = '/rest/cvs/librfid/utils/librfid-tool';
+
+sub init {
+       warn "# no $tool found\n" if ! -e $tool;
+}
+
+sub inventory {
+
+       my @tags; 
+
+       open(my $s, '-|', "$tool --scan") || die $!;
+       while(<$s>) {
+               chomp;
+               warn "## $_\n";
+               if ( m/success.+:\s+(.+)/ ) {
+                       push @tags, $1;
+               }
+       }
+
+       return @tags;
+}
+
+
+1
diff --git a/t/30-librfid.t b/t/30-librfid.t
new file mode 100755 (executable)
index 0000000..12e3e6a
--- /dev/null
@@ -0,0 +1,41 @@
+#!/usr/bin/perl
+
+use Test::More tests => 3;
+use Data::Dump qw(dump);
+
+use lib 'lib';
+
+BEGIN {
+       use_ok( 'RFID::Biblio::librfid' );
+}
+
+ok( my $o = RFID::Biblio::librfid->new( tool => '/rest/cvs/librfid/utils/librfid-tool' ), 'new' );
+
+ok( my @tags = $o->inventory, 'inventory' );
+diag dump @tags;
+
+__END__
+
+my $old_afi;
+
+foreach my $tag ( @tags ) {
+
+       ok( my $blocks = $o->read_blocks( $tag ), "read_blocks $tag" );
+
+       ok( my $afi = $o->read_afi( $tag ), "read_afi $tag" );
+
+       ok( $o->write_blocks( $tag, $blocks ), "write_blocks $tag" );
+
+       my $new_afi = "\x42";
+
+       ok( $o->write_afi( $tag, $new_afi ), sprintf( "write_afi %s %x", $tag, $new_afi ) );
+
+       cmp_ok( $o->read_afi( $tag ), 'eq', $new_afi, 'AFI check' );
+
+       ok( $o->write_afi( $tag, $afi ), sprintf( "write_afi %s %x", $tag, $afi ) );
+
+}
+
+ok( my $visible = $o->scan, 'scan' );
+diag dump $visible;
+