From e7a17d7d24b477b843f5a53bdf55e3a6be2ee65f Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Wed, 28 Jul 2010 15:59:19 +0200 Subject: [PATCH] write_afi --- lib/RFID/Serial/3M810.pm | 33 ++++++++++++++++++++++++++++++++- t/10-3M-810.t | 18 ++++++++++++++++-- 2 files changed, 48 insertions(+), 3 deletions(-) diff --git a/lib/RFID/Serial/3M810.pm b/lib/RFID/Serial/3M810.pm index 8802711..e209d48 100644 --- a/lib/RFID/Serial/3M810.pm +++ b/lib/RFID/Serial/3M810.pm @@ -223,7 +223,38 @@ sub read_afi { warn "IGNORED ",as_hex($data); } }); - return as_hex $afi; + warn "## read_afi ",dump($tag, $afi); + return $afi; +} + +sub write_afi { + my $tag = shift; + $tag = shift if ref $tag; + my $afi = shift || die "no afi?"; + + $afi = as_hex $afi; + + cmd( + "09 $tag $afi", "write_afi $tag $afi", sub { + my $data = shift; + + if ( my $rest = _matched $data => '09 00' ) { + + my $tag = substr($rest,0,8); + $afi = substr($rest,8,1); + + warn "# SECURITY ", hex_tag($tag), " AFI: ", as_hex($afi); + + } elsif ( my $rest = _matched $data => '0A 06' ) { + warn "ERROR writing AFI to $tag ", as_hex($data); + undef $afi; + } else { + warn "IGNORED ",as_hex($data); + undef $afi; + } + }); + warn "## write_afi ", dump( $tag, $afi ); + return $afi; } 1 diff --git a/t/10-3M-810.t b/t/10-3M-810.t index 972b41a..d52b355 100755 --- a/t/10-3M-810.t +++ b/t/10-3M-810.t @@ -14,9 +14,23 @@ ok( my $o = RFID::Serial::3M810->new( device => '/dev/ttyUSB0' ), 'new' ); ok( my @tags = $o->inventory, 'inventory' ); diag dump @tags; -ok( my $blocks = $o->read_blocks( $_ ), "read_blocks $_" ) foreach @tags; +my $old_afi; -ok( my $afi = $o->read_afi( $_ ), "read_afi $_" ) foreach @tags; +foreach my $tag ( @tags ) { + + ok( my $blocks = $o->read_blocks( $tag ), "read_blocks $tag" ); + + ok( my $afi = $o->read_afi( $tag ), "read_afi $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; -- 2.20.1