From b9bf276a9f48c5d2b5aa14473df14ca37dc1d76a Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Mon, 26 Jul 2010 21:45:16 +0200 Subject: [PATCH] scan tags --- lib/RFID/Serial/3M810.pm | 35 +++++++++++++++++++++++++++++++++-- t/10-3M-810.t | 3 ++- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/lib/RFID/Serial/3M810.pm b/lib/RFID/Serial/3M810.pm index 6884b77..67b1168 100644 --- a/lib/RFID/Serial/3M810.pm +++ b/lib/RFID/Serial/3M810.pm @@ -66,6 +66,8 @@ sub cmd { $r_len = $port->read(3); } + wait_device; + my $len = ord( substr($r_len,2,1) ); $data = $port->read( $len ); warn "<< ", as_hex($r_len,$data)," $len\n"; @@ -83,6 +85,8 @@ sub assert { confess "got ", as_hex($got), " expected ", as_hex($expected) unless substr($got,0,$len) eq substr($expected,0,$len); + + return substr($got,$len); } sub setup { @@ -90,8 +94,8 @@ sub setup { cmd( 'D5 00 05 04 00 11 8C66', 'hw version', sub { my $data = shift; - assert $data => '04 00 11'; - my $hw_ver = join('.', unpack('CCCC', substr($data,3))); + my $rest = assert $data => '04 00 11'; + my $hw_ver = join('.', unpack('CCCC', $rest)); print "hardware version $hw_ver\n"; }); @@ -101,4 +105,31 @@ cmd( )}); } +sub inventory { + + my $inventory; + +cmd( 'FE 00 05', 'scan for tags', sub { + my $data = shift; + my $rest = assert $data => 'FE 00 00 05'; + my $nr = ord( substr( $rest, 0, 1 ) ); + + if ( ! $nr ) { + warn "# no tags in range\n"; + } else { + my $tags = substr( $rest, 1 ); + my $tl = length( $tags ); + die "wrong length $tl for $nr tags: ",dump( $tags ) if $tl =! $nr * 8; + + foreach ( 0 .. $nr - 1 ) { + my $tag = uc(unpack('H16', substr($tags, $_ * 8, 8))); + $invetory->{$tag}++; + } + } + +}); + + return $invetory; +} + 1 diff --git a/t/10-3M-810.t b/t/10-3M-810.t index bd48bdb..66938c1 100755 --- a/t/10-3M-810.t +++ b/t/10-3M-810.t @@ -1,6 +1,6 @@ #!/usr/bin/perl -use Test::More tests => 2; +use Test::More tests => 3; use Data::Dump qw(dump); use lib 'lib'; @@ -11,4 +11,5 @@ BEGIN { ok( my $o = RFID::Serial::3M810->new( device => '/dev/ttyUSB0' ), 'new' ); +ok( my $inventory = $o->inventory, 'inventory' ); -- 2.20.1