Merge branch 'master' of mjesec.ffzg.hr:/git/Biblio-RFID
authorDobrica Pavlinusic <dpavlin@rot13.org>
Wed, 29 Oct 2014 14:42:56 +0000 (15:42 +0100)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Wed, 29 Oct 2014 14:42:56 +0000 (15:42 +0100)
lib/Biblio/RFID/Reader.pm
lib/Biblio/RFID/Reader/3M810.pm
scripts/program.pl

index c66febd..e3f9d6e 100644 (file)
@@ -55,7 +55,15 @@ sub tags {
        foreach my $rfid ( @{ $self->{_readers} } ) {
 
                if ( exists $triggers->{reader} ) {
-                       next unless $triggers->{reader}->($rfid);
+                       if ( ! $triggers->{reader}->($rfid) ) {
+                               # invalidate tags from other readers
+                               if ( exists $self->{_tags} ) {
+                                       delete  $self->{_tags}->{$_} foreach (
+                                               grep { $self->{_tags}->{$_}->{reader} eq ref $rfid } keys %{ $self->{_tags} }
+                                       );
+                               }
+                               next;
+                       }
                }
 
                warn "# inventory on $rfid";
index 736f91c..ad28fec 100644 (file)
@@ -285,6 +285,9 @@ sub write_afi {
        my $afi = shift || die "no afi?";
 
        $afi = as_hex $afi;
+       my $retry = 0;
+
+retry:
 
        cmd(
                "09 $tag $afi", "write_afi $tag $afi", sub {
@@ -293,13 +296,20 @@ sub write_afi {
                if ( my $rest = _matched $data => '09 00' ) {
                        my $tag_back = hex_tag substr($rest,0,8);
                        die "write_afi got $tag_back expected $tag" if $tag_back ne $tag;
-                       warn "# SECURITY ", hex_tag($tag), " AFI: ", as_hex($afi);
-               } elsif ( $rest = _matched $data => '0A 06' ) {
-                       die "ERROR writing AFI to $tag ", as_hex($data);
+                       warn "# SECURITY ", hex_tag($tag), " AFI: $afi";
+               } elsif ( $rest = _matched $data => '09 06' ) {
+                       if ( $retry++ <= 30 ) { # FIXME lover this number?
+#                              warn "ERROR writing AFI $afi to $tag retry $retry\n";
+                               goto retry;
+                       }
+                       die "ERROR writing AFI $afi to $tag ", as_hex($data);
                } else {
                        die "IGNORED ",as_hex($data);
                }
        });
+
+       warn "INFO: tag $tag AFI $afi retry: $retry\n";
+
        warn "## write_afi ", dump( $tag, $afi );
        return $afi;
 }
index ec33b88..45a06b3 100755 (executable)
@@ -39,8 +39,7 @@ $Biblio::RFID::debug = $debug;
 foreach my $tag ( $rfid->tags ) {
        warn "visible $tag\n";
        next unless $tag eq $sid;
-       if ( $blank ) {
-warn dump( $blank );
+       if ( grep { defined $_ } values $blank ) {
                my $type = ( grep { $blank->{$_} } keys %$blank )[0];
                warn "BLANK $type $tag\n";
                $rfid->write_blocks( $tag => Biblio::RFID::RFID501->$type );