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 )