/[RFID]/3m-810.pl
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /3m-810.pl

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 71 by dpavlin, Thu Feb 11 20:57:51 2010 UTC revision 93 by dpavlin, Fri Jul 23 13:21:44 2010 UTC
# Line 31  sub http_server { Line 31  sub http_server {
31                  Reuse     => 1                  Reuse     => 1
32          );          );
33                                                                                                                                        
34          die "can't setup server" unless $server;          die "can't setup server: $!" unless $server;
35    
36          print "Server $0 ready at $server_url\n";          print "Server $0 ready at $server_url\n";
37    
# Line 168  my $secure_path = './secure/'; Line 168  my $secure_path = './secure/';
168  my $http_server = 1;  my $http_server = 1;
169    
170  # 3M defaults: 8,4  # 3M defaults: 8,4
171  my $max_rfid_block = 16;  # cards 16, stickers: 8
172    my $max_rfid_block = 8;
173  my $read_blocks = 8;  my $read_blocks = 8;
174    
175  my $response = {  my $response = {
# Line 392  my $saved_in_log; Line 393  my $saved_in_log;
393  sub decode_tag {  sub decode_tag {
394          my $tag = shift;          my $tag = shift;
395    
396          my $data = $tags_data->{$tag} || die "no data for $tag";          my $data = $tags_data->{$tag};
397            if ( ! $data ) {
398                    warn "no data for $tag\n";
399                    return;
400            }
401    
402          my ( $u1, $set_item, $u2, $type, $content, $br_lib, $custom ) = unpack('C4Z16Nl>',$data);          my ( $u1, $set_item, $u2, $type, $content, $br_lib, $custom ) = unpack('C4Z16Nl>',$data);
403          my $hash = {          my $hash = {
# Line 446  sub read_tag { Line 451  sub read_tag {
451                          "D6 00  0F  FE  00 00  05 01   $tag    BEEF", sub {                          "D6 00  0F  FE  00 00  05 01   $tag    BEEF", sub {
452                                  print "FIXME: tag $tag ready? (expected block read instead)\n";                                  print "FIXME: tag $tag ready? (expected block read instead)\n";
453                          },                          },
454                            "D6 00 0D 02 06 $tag", sub {
455                                    my $rest = shift;
456                                    print "ERROR reading $tag ", as_hex($rest), $/;
457                                    forget_tag $tag;
458                                    $start_block = $max_rfid_block; # XXX break out of while
459                            },
460                  );                  );
461    
462          }          }
# Line 462  sub read_tag { Line 473  sub read_tag {
473                          $security = as_hex( $security );                          $security = as_hex( $security );
474                          $tags_security->{$tag} = $security;                          $tags_security->{$tag} = $security;
475                          warn "# SECURITY $tag = $security\n";                          warn "# SECURITY $tag = $security\n";
476                  }                  },
477                    "D6 00 0C 0A 06", sub {
478                            my $rest = shift;
479                            warn "ERROR reading security from $rest\n";
480                            forget_tag $tag;
481                    },
482          );          );
483    
484          print "TAG $tag ", dump(decode_tag( $tag ));          print "TAG $tag ", dump(decode_tag( $tag ));
# Line 502  sub write_tag { Line 518  sub write_tag {
518    
519          print "write_tag $tag = ",dump( $data ), " [$len/$blocks] == $hex_data\n";          print "write_tag $tag = ",dump( $data ), " [$len/$blocks] == $hex_data\n";
520    
521            my $ok = 0;
522    
523          cmd(          cmd(
524                  "d6 00  ff  04  $tag  00 $blocks 00  $hex_data  BEEF", "write $tag",                  "d6 00  ff  04  $tag  00 $blocks 00  $hex_data  BEEF", "write $tag",
525                  "d6 00  0d  04 00  $tag  $blocks  BEEF", sub { assert() },                  "d6 00  0d  04 00  $tag  $blocks  BEEF", sub { assert(); $ok++ },
526                    "d6 00  0d  04 06  ", sub {
527                            my $data = shift;
528                            warn "no tag ",as_hex( substr($data,0,8) ), " in range for write\n";
529                    },
530          ); # foreach ( 1 .. 3 ); # XXX 3m software does this three times!          ); # foreach ( 1 .. 3 ); # XXX 3m software does this three times!
531    
532          my $to = $path;          if ( $ok ) {
         $to .= '.' . time();  
533    
534          rename $path, $to;                  my $to = $path;
535          print ">> $to\n";                  $to .= '.' . time();
536    
537                    rename $path, $to;
538                    print ">> $to\n";
539    
540            }
541    
542          forget_tag $tag;          forget_tag $tag;
543  }  }
# Line 522  sub secure_tag_with { Line 548  sub secure_tag_with {
548          cmd(          cmd(
549                  "d6 00  0c  09  $tag $data BEEF", "secure $tag -> $data",                  "d6 00  0c  09  $tag $data BEEF", "secure $tag -> $data",
550                  "d6 00  0c  09 00  $tag    BEEF", sub { assert() },                  "d6 00  0c  09 00  $tag    BEEF", sub { assert() },
551                    "d6 00  0c  09 06  ", sub {
552                            my $data = shift;
553                            warn "no tag ",as_hex( substr($data,0,8) ), " in range for secure\n";
554                    },
555          );          );
556    
557          forget_tag $tag;          forget_tag $tag;
# Line 582  sub writechunk Line 612  sub writechunk
612  sub as_hex {  sub as_hex {
613          my @out;          my @out;
614          foreach my $str ( @_ ) {          foreach my $str ( @_ ) {
615                  my $hex = unpack( 'H*', $str );                  my $hex = uc unpack( 'H*', $str );
616                  $hex =~ s/(..)/$1 /g if length( $str ) > 2;                  $hex =~ s/(..)/$1 /g if length( $str ) > 2;
617                  $hex =~ s/\s+$//;                  $hex =~ s/\s+$//;
618                  push @out, $hex;                  push @out, $hex;
# Line 696  sub readchunk { Line 726  sub readchunk {
726                  warn "## DISPATCH payload to with rest", dump( $payload, $to, $rest ) if $debug;                  warn "## DISPATCH payload to with rest", dump( $payload, $to, $rest ) if $debug;
727                  $dispatch->{ $to }->( $rest );                  $dispatch->{ $to }->( $rest );
728          } else {          } else {
729                  die "NO DISPATCH for ",as_hex( $full ),"\n";                  die "NO DISPATCH for ",as_hex( $full ), " in ", dump( $dispatch );
730          }          }
731    
732          return $data;          return $data;

Legend:
Removed from v.71  
changed lines
  Added in v.93

  ViewVC Help
Powered by ViewVC 1.1.26