From: Dobrica Pavlinusic Date: Wed, 29 Oct 2014 14:42:56 +0000 (+0100) Subject: Merge branch 'master' of mjesec.ffzg.hr:/git/Biblio-RFID X-Git-Url: http://git.rot13.org/?p=Biblio-RFID.git;a=commitdiff_plain;h=48764d1207ef06ad96b937bd2365227f78090109;hp=8259ca636c1f005c4d7bcf9464ca7538ac3d92d2 Merge branch 'master' of mjesec.ffzg.hr:/git/Biblio-RFID --- diff --git a/lib/Biblio/RFID/Reader.pm b/lib/Biblio/RFID/Reader.pm index c66febd..e3f9d6e 100644 --- a/lib/Biblio/RFID/Reader.pm +++ b/lib/Biblio/RFID/Reader.pm @@ -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"; diff --git a/lib/Biblio/RFID/Reader/3M810.pm b/lib/Biblio/RFID/Reader/3M810.pm index 736f91c..ad28fec 100644 --- a/lib/Biblio/RFID/Reader/3M810.pm +++ b/lib/Biblio/RFID/Reader/3M810.pm @@ -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; } diff --git a/scripts/program.pl b/scripts/program.pl index ec33b88..45a06b3 100755 --- a/scripts/program.pl +++ b/scripts/program.pl @@ -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 );