read tag after programming and retry programming if needed
authorDobrica Pavlinusic <dpavlin@rot13.org>
Thu, 16 Apr 2015 14:36:09 +0000 (16:36 +0200)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Thu, 16 Apr 2015 14:36:09 +0000 (16:36 +0200)
lib/Biblio/RFID/Reader/3M810.pm

index 6953571..467b4e7 100644 (file)
@@ -235,6 +235,9 @@ sub write_blocks {
        my $hex_data = as_hex $data;
        my $blocks   = sprintf('%02x', length($data) / 4 );
 
        my $hex_data = as_hex $data;
        my $blocks   = sprintf('%02x', length($data) / 4 );
 
+       my $retry = 0;
+retry_write:
+
        cmd(
                "04 $tag 00 $blocks 00 $hex_data", "write_blocks $tag [$blocks] $hex_data", sub {
                        my $data = shift;
        cmd(
                "04 $tag 00 $blocks 00 $hex_data", "write_blocks $tag [$blocks] $hex_data", sub {
                        my $data = shift;
@@ -250,6 +253,16 @@ sub write_blocks {
                }
        );
 
                }
        );
 
+       my $verify_blocks = read_blocks($tag);
+       die "can't find data from tag $tag" unless exists $verify_blocks->{$tag};
+
+       if ( join('', @{ $verify_blocks->{$tag} }) ne $data ) {
+               $retry++;
+               warn "ERROR reading data back from tag, retry $retry\n";
+               die "ABORTED" if $retry == 10;
+               goto retry_write;
+       }
+
 }
 
 sub read_afi {
 }
 
 sub read_afi {