X-Git-Url: http://git.rot13.org/?p=Biblio-RFID.git;a=blobdiff_plain;f=lib%2FRFID%2FBiblio.pm;h=daccc32b43e483eca76141eacd63c98d23c7e411;hp=df44707415edc504b7b360db76e4dd8050d36969;hb=c9c7cf200fae07daa8423ca303b619f0ca554343;hpb=f2745331e3de510b2cc814217578774a7b5a6d17 diff --git a/lib/RFID/Biblio.pm b/lib/RFID/Biblio.pm index df44707..daccc32 100644 --- a/lib/RFID/Biblio.pm +++ b/lib/RFID/Biblio.pm @@ -6,148 +6,57 @@ use strict; use base 'Exporter'; our @EXPORT = qw( hex2bytes as_hex hex_tag ); -use Device::SerialPort qw(:STAT); use Data::Dump qw(dump); =head1 NAME -RFID::Biblio - support serial RFID devices +RFID::Biblio - perl tools to use different RFID readers for library use =cut -our $VERSION = '0.01'; +our $VERSION = '0.02'; my $debug = 0; -=head1 SYNOPSIS +=head1 DESCRIPTION -This module tries to support USB serial RFID readers wsing simple API -which is sutable for direct mapping to REST JSONP service. +Main idea is to develop simple API to reader, and than provide useful +abstractions on top of it to quickly write applications to respond on +tags which come in range of RFID reader using L. -Perhaps a little code snippet. +Writing support for new RFID readers should be easy. +L provides documentation on writing support +for different readers. - use RFID::Biblio; +Currently, two serial RFID readers based on L +are implemented: - my $rfid = RFID::Biblio->new( - device => '/dev/ttyUSB0', # with fallback to RFID_DEVICE - ); - my $visible = $rfid->scan; - -=head1 SUBROUTINES/METHODS - -=head2 new - -=cut - -sub new { - my $class = shift; - my $self = {@_}; - bless $self, $class; - - $self->port; - - $self->init; - - return $self; -} - -=head2 port - - my $serial_obj = $self->port; - -=cut - -sub port { - my $self = shift; - - return $self->{port} if defined $self->{port}; - - my $settings = $self->serial_settings; - 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"; - - $self->{port}->$_( $settings->{$_} ) - foreach ( qw/handshake baudrate databits parity stopbits/ ); - -} - -=head2 scan - - my $visible = $rfid->scan; - -Returns hash with keys which match tag UID and values with blocks - -=cut - -sub scan { - my $self = shift; - - warn "# scan tags in reader range\n"; - my @tags = $self->inventory; - - my $visible; - # FIXME this is naive implementation which just discards other tags - foreach my $tag ( @tags ) { - my $blocks = $self->read_blocks( $tag ); - if ( ! $blocks ) { - warn "ERROR: can't read tag $tag\n"; - delete $visible->{$tag}; - } else { - $visible->{$tag} = $blocks->{$tag}; - } - } - - return $visible; -} - - -=head1 MANDATORY IMPLEMENTATIONS - -Each reader must implement following hooks as sub-classes. - -=head2 init - - $self->init; - -=head2 inventory - - my @tags = $self->invetory; - -=head2 read_blocks - - my $hash = $self->read_blocks( $tag ); - -All blocks are under key which is tag UID with array of blocks returned from reader - - $hash = { 'E000000123456789' => [ 'blk1', 'blk2', ... ] }; +=over 4 -L sends tag UID with data payload, so we might expect -to receive response from other tags from protocol specification, +=item * -=head2 write_blocks +L - $self->write_blocks( $tag => $bytes ); +=item * - $self->write_blocks( $tag => [ 'blk1', 'blk2', ... ] ); +L -=head2 read_afi +=back - my $afi = $self->read_afi( $tag ); +There is also simple read-only reader using shell commands in +L. -=head2 write_afi +For implementing application take a look at L - $self->write_afi( $tag => $afi ); +C is example of such application. It's local +interface to RFID reader and JSONP REST server. +C is jQuery based JavaScript code which can be inserted +in Koha Library System to provide overlay with tags in range and +check-in/check-out form-fill functionality. +=for readme stop =head1 EXPORT @@ -196,6 +105,22 @@ sub as_hex { sub hex_tag { uc(unpack('H16', shift)) } +=for readme continue + +=head1 HARDWARE SUPPORT + +=head2 3M 810 + +L + +=head2 CPR-M02 + +L + +=head2 librfid + +L + =head1 AUTHOR @@ -203,7 +128,7 @@ Dobrica Pavlinusic, C<< >> =head1 BUGS -Please report any bugs or feature requests to C, or through +Please report any bugs or feature requests to C, or through the web interface at L. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes. @@ -215,6 +140,8 @@ automatically be notified of progress on your bug as I make changes. You can find documentation for this module with the perldoc command. perldoc RFID::Biblio + perldoc RFID::Biblio::Reader + perldoc RFID::Biblio::Reader::API You can also look for information at: