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";
--- /dev/null
+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
--- /dev/null
+#!/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;
+