From: Dobrica Pavlinusic Date: Thu, 29 Jul 2010 16:54:59 +0000 (+0200) Subject: Merge branch 'master' of github.com:dpavlin/RFID-Biblio X-Git-Tag: RFID-Biblio-0.02~108 X-Git-Url: http://git.rot13.org/?p=Biblio-RFID.git;a=commitdiff_plain;h=5ec789bb5ba1ca702b6938ec2490c98a3ed9d82d;hp=c9eba7f7f2972cd0d03ae3b0caec587689840330 Merge branch 'master' of github.com:dpavlin/RFID-Biblio --- diff --git a/lib/RFID/Biblio.pm b/lib/RFID/Biblio.pm index 4f3499d..df44707 100644 --- a/lib/RFID/Biblio.pm +++ b/lib/RFID/Biblio.pm @@ -64,9 +64,14 @@ sub port { return $self->{port} if defined $self->{port}; my $settings = $self->serial_settings; - $settings->{device} ||= $ENV{RFID_DEVICE}; + 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"; diff --git a/lib/RFID/Biblio/Readers.pm b/lib/RFID/Biblio/Readers.pm index b3ff2f4..9a1106a 100644 --- a/lib/RFID/Biblio/Readers.pm +++ b/lib/RFID/Biblio/Readers.pm @@ -5,7 +5,7 @@ use strict; use lib 'lib'; -my @readers = ( '3M810', 'CPRM02' ); +my @readers = ( '3M810', 'CPRM02', 'librfid' ); sub available { my ( $self, $filter ) = @_; @@ -25,6 +25,8 @@ sub available { } } + die "no readers found" unless @rfid; + return @rfid; } diff --git a/lib/RFID/Biblio/librfid.pm b/lib/RFID/Biblio/librfid.pm new file mode 100644 index 0000000..bd97aa4 --- /dev/null +++ b/lib/RFID/Biblio/librfid.pm @@ -0,0 +1,90 @@ +package RFID::Biblio::librfid; + +use warnings; +use strict; + +use base 'RFID::Biblio'; +use RFID::Biblio; + +use Data::Dump qw(dump); + +=head1 NAME + +RFID::Biblio::librfid - execute librfid-tool + +=head2 DESCRIPTION + +This is wrapper around C from + +L + +=head2 SYOPSYS + + + +=cut + +sub serial_settings {} # don't open serial + +our $bin = '/rest/cvs/librfid/utils/librfid-tool'; + +sub init { + my $self = shift; + warn "# no $bin found\n" if ! -e $bin; +} + +sub _grep_tool { + my ( $param, $coderef ) = @_; + + warn "# _grep_tool $bin $param\n"; + open(my $s, '-|', "$bin $param") || die $!; + while(<$s>) { + chomp; + warn "## $_\n"; + + my $sid; + if ( m/success.+:\s+(.+)/ ) { + $sid = $1; + $sid =~ s/\s*'\s*//g; + $sid = uc join('', reverse split(/\s+/, $sid)); + } + + $coderef->( $sid ); + } + + +} + +sub _cleanup_sid { +} + +sub inventory { + + my @tags; + _grep_tool '--scan' => sub { + my $sid = shift; + push @tags, $sid if $sid; + }; + warn "# invetory ",dump(@tags); + return @tags; +} + +sub read_blocks { + + my $sid; + my $blocks; + _grep_tool '--read -1' => sub { + $sid ||= shift; + $blocks->{$sid}->[$1] = hex2bytes($2) + if m/block\[\s*(\d+):.+data.+:\s*(.+)/; + + }; + warn "# read_blocks ",dump($blocks); + return $blocks; +} + +sub write_blocks {} +sub read_afi {} +sub write_afi {} + +1 diff --git a/scripts/RFID-JSONP-server.pl b/scripts/RFID-JSONP-server.pl index d9ea814..7877fca 100755 --- a/scripts/RFID-JSONP-server.pl +++ b/scripts/RFID-JSONP-server.pl @@ -23,11 +23,12 @@ my $debug = 1; my $listen_port = 9000; # pick something not in use my $server_url = "http://localhost:$listen_port"; +my $reader = shift @ARGV; use lib 'lib'; use RFID::Biblio::RFID501; -use RFID::Biblio::3M810; -my $rfid = RFID::Biblio::3M810->new; +use RFID::Biblio::Readers; +my $rfid = (RFID::Biblio::Readers->available( $reader ))[0]; # FIXME my $index_html; { diff --git a/t/30-librfid.t b/t/30-librfid.t new file mode 100755 index 0000000..59d8eb9 --- /dev/null +++ b/t/30-librfid.t @@ -0,0 +1,40 @@ +#!/usr/bin/perl + +use Test::More; +use Data::Dump qw(dump); + +use lib 'lib'; + +BEGIN { + use_ok( 'RFID::Biblio::librfid' ); +} + +ok( my $o = RFID::Biblio::librfid->new( tool => '/rest/cvs/librfid/utils/librfid-tool' ), 'new' ); + +ok( my @tags = $o->inventory, 'inventory' ); +diag dump @tags; + +my $old_afi; + +foreach my $tag ( @tags ) { + + ok( my $blocks = $o->read_blocks( $tag ), "read_blocks $tag" ); + + ok( my $afi = $o->read_afi( $tag ), "read_afi $tag" ); + + ok( $o->write_blocks( $tag, $blocks ), "write_blocks $tag" ); + + my $new_afi = "\x42"; + + ok( $o->write_afi( $tag, $new_afi ), sprintf( "write_afi %s %x", $tag, $new_afi ) ); + + cmp_ok( $o->read_afi( $tag ), 'eq', $new_afi, 'AFI check' ); + + ok( $o->write_afi( $tag, $afi ), sprintf( "write_afi %s %x", $tag, $afi ) ); + +} + +ok( my $visible = $o->scan, 'scan' ); +diag dump $visible; + +done_testing;