/[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 66 by dpavlin, Thu Feb 11 14:14:21 2010 UTC revision 80 by dpavlin, Tue Jul 6 15:05: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 84  sub http_server { Line 84  sub http_server {
84                                          $d->{security} = $tags_security->{$_};                                          $d->{security} = $tags_security->{$_};
85                                          push @{ $json->{tags} },  $d;                                          push @{ $json->{tags} },  $d;
86                                  } keys %$tags;                                  } keys %$tags;
87                                  print $client "HTTP/1.0 200 OK\r\nContent-Type: application/x-javascript\r\n\r\n",                                  print $client "HTTP/1.0 200 OK\r\nContent-Type: application/json\r\n\r\n",
88                                          $param->{callback}, "(", to_json($json), ")\r\n";                                          $param->{callback}, "(", to_json($json), ")\r\n";
89                          } elsif ( $method =~ m{/program} ) {                          } elsif ( $method =~ m{/program} ) {
90    
# Line 99  sub http_server { Line 99  sub http_server {
99    
100                                          warn "PROGRAM $tag $content\n";                                          warn "PROGRAM $tag $content\n";
101                                          write_tag( $tag, $content );                                          write_tag( $tag, $content );
102                                            secure_tag_with( $tag, $param->{$p} =~ /^130/ ? 'DA' : 'D7' );
103                                  }                                  }
104    
105                                  print $client "HTTP/1.0 $status $method\r\nLocation: $server_url\r\n\r\n";                                  print $client "HTTP/1.0 $status $method\r\nLocation: $server_url\r\n\r\n";
106    
107                            } elsif ( $method =~ m{/secure(.js)} ) {
108    
109                                    my $json = $1;
110    
111                                    my $status = 501; # Not implementd
112    
113                                    foreach my $p ( keys %$param ) {
114                                            next unless $p =~ m/^(E[0-9A-F]{15})$/;
115                                            my $tag = $1;
116                                            my $data = $param->{$p};
117                                            $status = 302;
118    
119                                            warn "SECURE $tag $data\n";
120                                            secure_tag_with( $tag, $data );
121                                    }
122    
123                                    if ( $json ) {
124                                            print $client "HTTP/1.0 200 OK\r\nContent-Type: application/json\r\n\r\n",
125                                                    $param->{callback}, "({ ok: 1 })\r\n";
126                                    } else {
127                                            print $client "HTTP/1.0 $status $method\r\nLocation: $server_url\r\n\r\n";
128                                    }
129    
130                          } else {                          } else {
131                                  print $client "HTTP/1.0 404 Unkown method\r\n";                                  print $client "HTTP/1.0 404 Unkown method\r\n\r\n";
132                          }                          }
133                  } else {                  } else {
134                          print $client "HTTP/1.0 500 No method\r\n";                          print $client "HTTP/1.0 500 No method\r\n\r\n";
135                  }                  }
136                  close $client;                  close $client;
137          }          }
# Line 144  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 368  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 395  sub decode_tag { Line 424  sub decode_tag {
424          return $hash;          return $hash;
425  }  }
426    
427    sub forget_tag {
428            my $tag = shift;
429            delete $tags_data->{$tag};
430            delete $visible_tags->{$tag};
431    }
432    
433  sub read_tag {  sub read_tag {
434          my ( $tag ) = @_;          my ( $tag ) = @_;
435    
# Line 416  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 432  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 483  sub write_tag { Line 529  sub write_tag {
529          rename $path, $to;          rename $path, $to;
530          print ">> $to\n";          print ">> $to\n";
531    
532          # force re-read of tag          forget_tag $tag;
533          delete $tags_data->{$tag};  }
534          delete $visible_tags->{$tag};  
535    sub secure_tag_with {
536            my ( $tag, $data ) = @_;
537    
538            cmd(
539                    "d6 00  0c  09  $tag $data BEEF", "secure $tag -> $data",
540                    "d6 00  0c  09 00  $tag    BEEF", sub { assert() },
541            );
542    
543            forget_tag $tag;
544  }  }
545    
546  sub secure_tag {  sub secure_tag {
# Line 494  sub secure_tag { Line 549  sub secure_tag {
549          my $path = "$secure_path/$tag";          my $path = "$secure_path/$tag";
550          my $data = substr(read_file( $path ),0,2);          my $data = substr(read_file( $path ),0,2);
551    
552          cmd(          secure_tag_with( $tag, $data );
                 "d6 00  0c  09  $tag $data BEEF", "secure $tag -> $data",  
                 "d6 00  0c  09 00  $tag    BEEF", sub { assert() },  
         );  
553    
554          my $to = $path;          my $to = $path;
555          $to .= '.' . time();          $to .= '.' . time();
# Line 546  sub writechunk Line 598  sub writechunk
598  sub as_hex {  sub as_hex {
599          my @out;          my @out;
600          foreach my $str ( @_ ) {          foreach my $str ( @_ ) {
601                  my $hex = unpack( 'H*', $str );                  my $hex = uc unpack( 'H*', $str );
602                  $hex =~ s/(..)/$1 /g if length( $str ) > 2;                  $hex =~ s/(..)/$1 /g if length( $str ) > 2;
603                  $hex =~ s/\s+$//;                  $hex =~ s/\s+$//;
604                  push @out, $hex;                  push @out, $hex;

Legend:
Removed from v.66  
changed lines
  Added in v.80

  ViewVC Help
Powered by ViewVC 1.1.26