X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=lib%2FRFID%2FBiblio%2F3M810.pm;h=1b37a4666ab6252dd85adc398dc37f873f2a1200;hb=fbcbf54e51b8cef876e884f5e3c23517b4cf80af;hp=309dcf4a8e00377bfbe308ac0b832b76110e6dc2;hpb=c0c355e23ed2b42d3233f7c1f5f726ad6fb2a888;p=Biblio-RFID.git diff --git a/lib/RFID/Biblio/3M810.pm b/lib/RFID/Biblio/3M810.pm index 309dcf4..1b37a46 100644 --- a/lib/RFID/Biblio/3M810.pm +++ b/lib/RFID/Biblio/3M810.pm @@ -46,11 +46,18 @@ sub init { my $self = shift; $port = $self->port; + # disable timeouts + $port->read_char_time(0); + $port->read_const_time(0); + # drain on startup my ( $count, $str ) = $port->read(3); my $data = $port->read( ord(substr($str,2,1)) ); warn "drain ",as_hex( $str, $data ),"\n"; + $port->read_char_time(100); # 0.1 s char timeout + $port->read_const_time(500); # 0.5 s read timeout + setup(); } @@ -227,7 +234,9 @@ sub read_blocks { sub write_blocks { my $tag = shift; $tag = shift if ref $tag; - my $data = join('', @_); + + my $data = shift; + $data = join('', @$data) if ref $data eq 'ARRAY'; warn "## write_blocks ",dump($tag,$data); @@ -295,12 +304,9 @@ sub write_afi { my $data = shift; if ( my $rest = _matched $data => '09 00' ) { - - my $tag = substr($rest,0,8); - $afi = substr($rest,8,1); - + 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' ) { warn "ERROR writing AFI to $tag ", as_hex($data); undef $afi;