1 package RFID::Biblio::Reader;
6 use Data::Dump qw(dump);
13 RFID::Biblio::Reader - simple way to write RFID applications in perl
19 my $rfid = RFID::Biblio::Reader->new( 'optional reader filter' );
24 my ( $class, $filter ) = @_;
27 $self->{_readers} = [ $self->_available( $filter ) ];
33 my @visible = $rfid->tags(
44 $self->{inventory} ||= {};
45 $self->{inventory}->{$_} = 0 foreach keys %{$self->{inventory}};
48 foreach my $rfid ( @{ $self->{_readers} } ) {
49 warn "# inventory on $rfid";
50 my @tags = $rfid->inventory;
52 foreach my $tag ( @tags ) {
54 $self->{blocks}->{$tag} ||= $rfid->read_blocks( $tag )->{$tag};
55 $self->{afi}->{$tag} ||= $rfid->read_afi( $tag );
57 $triggers->{enter}->( $self, $tag ) if ! $self->{inventory}->{$tag} && $triggers->{enter};
58 $self->{inventory}->{$tag} = $t;
62 foreach my $tag ( grep { $self->{inventory}->{$_} == 0 } keys %{ $self->{inventory} } ) {
63 $triggers->{leave}->( $self, $tag ) if $triggers->{leave};
68 warn "## tags ",dump($self);
70 return grep { $self->{inventory}->{$_} } keys %{ $self->{inventory} };
75 my $blocks_arrayref = $rfid->blocks( $tag );
79 my $afi = $rfid->afi( $tag );
83 sub blocks { $_[0]->{ 'blocks' }->{$_[1]} || die "no blocks for $_[1]"; };
84 sub afi { $_[0]->{ 'afi' }->{$_[1]} || die "no afi for $_[1]"; };
90 Probe each RFID reader supported and returns succefull ones
92 my $rfid_readers = RFID::Biblio::Reader->_available( $regex_filter );
96 my @readers = ( '3M810', 'CPRM02', 'librfid' );
99 my ( $self, $filter ) = @_;
101 $filter = '' unless defined $filter;
103 warn "# filter: $filter";
107 foreach my $reader ( @readers ) {
108 next if $filter && $reader !~ /$filter/i;
109 my $module = "RFID::Biblio::Reader::$reader";
112 if ( my $rfid = $module->new( device => '/dev/ttyUSB0' ) ) {
114 warn "# added $module\n";
116 warn "# ignored $module\n";
120 die "no readers found" unless @rfid;
127 On any other function calls, we just marshall to all readers
131 # we don't want DESTROY to fallback into AUTOLOAD
137 my $command = $AUTOLOAD;
142 foreach my $r ( @{ $self->{_readers} } ) {
143 push @out, $r->$command(@_);
154 =head2 RFID reader implementations
156 L<RFID::Biblio::Reader::3M810>
158 L<RFID::Biblio::Reader::CPRM02>
160 L<RFID::Biblio::Reader::librfid>