split RFID::Bibio::Reader::Serial as base class
authorDobrica Pavlinusic <dpavlin@rot13.org>
Fri, 6 Aug 2010 19:00:40 +0000 (21:00 +0200)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Fri, 6 Aug 2010 19:00:40 +0000 (21:00 +0200)
lib/RFID/Biblio.pm
lib/RFID/Biblio/Reader/3M810.pm
lib/RFID/Biblio/Reader/CPRM02.pm
lib/RFID/Biblio/Reader/Serial.pm [new file with mode: 0644]
t/09-Serial.t [new file with mode: 0755]
t/10-3M-810.t
t/20-CPR-M02.t

index 458b2c6..1139a0c 100644 (file)
@@ -6,7 +6,6 @@ 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
@@ -25,92 +24,7 @@ my $debug = 0;
 This module tries to support USB serial RFID readers wsing simple API
 which is sutable for direct mapping to REST JSONP service.
 
-Perhaps a little code snippet.
-
-       use RFID::Biblio;
-
-       my $rfid = RFID::Biblio->new(
-               device => '/dev/ttyUSB0', # with fallback to RFID_DEVICE
-       );
-
-       # invetory tags in reader range and read data from them
-       my $visible = $rfid->scan;
-
-=head1 METHODS
-
-=head2 new
-
-Open serial port (if needed) and init reader
-
-=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;
-}
-
+For implementing application take a look at L<RFID::Biblio::Reader>
 
 =head1 READER IMPLEMENTATION
 
index f26e9ab..d959e57 100644 (file)
@@ -24,7 +24,7 @@ L<http://stackoverflow.com/questions/149617/how-could-i-guess-a-checksum-algorit
 use warnings;
 use strict;
 
-use base 'RFID::Biblio';
+use base 'RFID::Biblio::Reader::Serial';
 use RFID::Biblio;
 
 use Data::Dump qw(dump);
index 3fe3a70..1c91323 100644 (file)
@@ -14,7 +14,7 @@ reader as described in document C<H20800-16e-ID-B.pdf>
 use warnings;
 use strict;
 
-use base 'RFID::Biblio';
+use base 'RFID::Biblio::Reader::Serial';
 use RFID::Biblio;
 
 use Time::HiRes;
diff --git a/lib/RFID/Biblio/Reader/Serial.pm b/lib/RFID/Biblio/Reader/Serial.pm
new file mode 100644 (file)
index 0000000..85dbf2b
--- /dev/null
@@ -0,0 +1,62 @@
+package RFID::Biblio::Reader::Serial;
+
+use warnings;
+use strict;
+
+use Device::SerialPort qw(:STAT);
+use Data::Dump qw(dump);
+
+=head1 NAME
+
+RFID::Biblio::Reader::Serial - helper to provide serial port
+
+=cut
+
+=head1 METHODS
+
+=head2 new
+
+Open serial port (if needed) and init reader
+
+=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/ );
+
+}
+
+1
diff --git a/t/09-Serial.t b/t/09-Serial.t
new file mode 100755 (executable)
index 0000000..e6e9eac
--- /dev/null
@@ -0,0 +1,10 @@
+#!/usr/bin/perl
+
+use Test::More tests => 1;
+
+use lib 'lib';
+
+BEGIN {
+       use_ok( 'RFID::Biblio::Reader::Serial' );
+}
+
index 1099a21..1118c4d 100755 (executable)
@@ -34,7 +34,4 @@ foreach my $tag ( @tags ) {
 
 }
 
-ok( my $visible = $o->scan, 'scan' );
-diag dump $visible;
-
 done_testing();
index 7ba476d..1fbf05c 100755 (executable)
@@ -27,7 +27,4 @@ foreach my $tag ( @tags ) {
 
 }
 
-ok( my $visible = $o->scan, 'scan' );
-diag dump $visible;
-
 done_testing;