write_afi
authorDobrica Pavlinusic <dpavlin@rot13.org>
Wed, 28 Jul 2010 13:59:19 +0000 (15:59 +0200)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Wed, 28 Jul 2010 13:59:19 +0000 (15:59 +0200)
lib/RFID/Serial/3M810.pm
t/10-3M-810.t

index 8802711..e209d48 100644 (file)
@@ -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
index 972b41a..d52b355 100755 (executable)
@@ -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;