=head1 FUNCTIONS
-=head2 available
+=head2 _available
Probe each RFID reader supported and returns succefull ones
- my @rfid = RFID::Biblio::Readers->available( $regex_filter );
+ my $rfid_readers = RFID::Biblio::Readers->_available( $regex_filter );
+
+=head1 SEE ALSO
+
+=head2 RFID reader implementations
+
+L<RFID::Biblio::3M810>
+
+L<RFID::Biblio::CPRM02>
+
+L<RFID::Biblio::librfid>
+
+=head1 SEE ALSO
+
+=head2 RFID reader implementations
+
+L<RFID::Biblio::3M810>
+
+L<RFID::Biblio::CPRM02>
+
+L<RFID::Biblio::librfid>
=cut
my @readers = ( '3M810', 'CPRM02', 'librfid' );
-sub available {
+sub _available {
my ( $self, $filter ) = @_;
+ $filter = '' unless defined $filter;
+
+ return $self->{_available}->{$filter} if defined $self->{_available}->{$filter};
+
my @rfid;
foreach my $reader ( @readers ) {
- next if $reader !~ /$filter/i;
+ next if $filter && $reader !~ /$filter/i;
my $module = "RFID::Biblio::$reader";
eval "use $module";
die $@ if $@;
die "no readers found" unless @rfid;
- return @rfid;
+ $self->{_available}->{$filter} = [ @rfid ];
+}
+
+sub new {
+ my $class = shift;
+ my $self = {};
+ bless $self, $class;
+ return $self;
+}
+
+# we don't want DESTROY to fallback into AUTOLOAD
+sub DESTROY {}
+
+our $AUTOLOAD;
+sub AUTOLOAD {
+ my $self = shift;
+ my $command = $AUTOLOAD;
+ $command =~ s/.*://;
+
+ foreach my $r ( @{ $self->_available } ) {
+ $r->$command(@_);
+ }
}
+1
--- /dev/null
+#!/usr/bin/perl
+
+use Test::More; # tests => 3;
+use Data::Dump qw(dump);
+
+use lib 'lib';
+
+BEGIN {
+ use_ok( 'RFID::Biblio::Readers' );
+}
+
+ok( my $o = RFID::Biblio::Readers->new( shift @ARGV ), 'new' );
+
+ok( my @tags = $o->inventory, 'inventory' );
+diag dump @tags;
+
+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->{$tag} ), "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;
+
+done_testing();