Biblio-RFID
view release on metacpan or search on metacpan
lib/Biblio/RFID/Reader.pm view on Meta::CPAN
my $afi = $rfid->afi( $tag );
=cut
sub blocks { $_[0]->{_tags}->{$_[1]}->{ 'blocks' } || confess "no blocks for $_[1]"; };
sub afi { $_[0]->{_tags}->{$_[1]}->{ 'afi' } || confess "no afi for $_[1]"; };
=head2 to_hash
$self->to_hash( $tag );
=cut
sub to_hash {
my ( $self, $tag ) = @_;
return unless exists $self->{_tags}->{$tag};
my $type = $self->{_tags}->{$tag}->{type} || confess "can't find type for tag $tag ",dump( $self->{_tags} );
my $decode = 'Biblio::RFID::' . $type;
my $hash = $decode->to_hash( $self->blocks( $tag ) );
$hash->{tag_type} = $type;
return $hash;
}
=head2 debug
$self->debug(1); # or more
=cut
sub debug {
my ( $self, $level ) = @_;
$debug = $level if $level > $debug;
warn "debug level $level\n" if $level;
}
=head2 from_reader
my $reader = $self->from_reader( $tag );
=cut
sub from_reader {
my ( $self, $tag ) = @_;
return unless exists $self->{_tags}->{$tag};
my $reader = $self->{_tags}->{$tag}->{reader};
$reader =~ s/^.*:://; # strip module prefix
return $reader;
}
=head1 PRIVATE
=head2 _invalidate_tag
$rfid->_invalidate_tag( $tag );
=cut
sub _invalidate_tag {
my ( $self, $tag ) = @_;
my @caller = caller(0);
warn "## _invalidate_tag caller $caller[0] $caller[1] +$caller[2]\n";
my $old = delete $self->{_tags}->{$tag};
warn "# _invalidate_tag $tag ", dump($old);
}
=head2 _available
Probe each RFID reader supported and returns succefull ones
my $rfid_readers = Biblio::RFID::Reader->_available( $regex_filter );
=cut
#my @readers = ( '3M810', 'CPRM02', 'librfid' );
my @readers = ( '3M810', 'librfid' );
sub _available {
my ( $self, $filter ) = @_;
$filter = '' unless defined $filter;
warn "# filter: $filter";
my @rfid;
foreach my $reader ( @readers ) {
next if $filter && $reader !~ /$filter/i;
my $module = "Biblio::RFID::Reader::$reader";
eval "use $module";
die $@ if $@;
if ( my $rfid = $module->new ) {
push @rfid, $rfid;
warn "# added $module\n";
} else {
warn "# ignored $module\n";
}
}
die "no readers found" unless @rfid;
return @rfid;
}
=head1 AUTOLOAD
On any other function calls, we just marshall to all readers
=cut
# we don't want DESTROY to fallback into AUTOLOAD
sub DESTROY {}
our $AUTOLOAD;
sub AUTOLOAD {
my $self = shift;
my $command = $AUTOLOAD;
$command =~ s/.*://;
my @out;
( run in 2.011 seconds using v1.01-cache-2.11-cpan-ad19def0cd9 )