drive RFID cards through printer to pad
[Biblio-RFID.git] / scripts / print.pl
1 #!/usr/bin/perl
2
3 use warnings;
4 use strict;
5
6 use Data::Dump qw(dump);
7 use Getopt::Long;
8 use lib 'lib';
9 use RFID::Biblio::Reader;
10 use RFID::Biblio::RFID501;
11
12 use lib '/home/dpavlin/klin/Printer-EVOLIS/lib';
13 use Printer::EVOLIS::Parallel;
14
15 my $loop = 1;
16 my $reader = '3M';
17 my $debug = 0;
18
19 GetOptions(
20         'loop!'     => \$loop,
21         'reader=s', => \$reader,
22         'debug+'    => \$debug,
23 ) || die $!;
24
25 die "Usage: $0 print.txt\n" unless @ARGV;
26
27 my @queue;
28 my @done;
29 warn "# reading tab-delimited input\n";
30 while(<>) {
31         chomp;
32         my @a = split(/\t/,$_);
33         push @queue, [ @a ];
34 }
35
36 print "# queue ", dump @queue;
37
38 my $rfid = RFID::Biblio::Reader->new( $reader );
39 $RFID::Biblio::debug = $debug;
40
41 sub tag {
42         my $tag = shift;
43         return $tag
44                 , " AFI: "
45                 , uc unpack('H2', $rfid->afi($tag))
46                 , " "
47                 , dump( RFID::Biblio::RFID501->to_hash( $rfid->blocks($tag) ) )
48                 , $/
49                 ;
50 }
51
52 my @stack;
53
54 sub print_card;
55
56 while ( $rfid->tags ) {
57         print "ERROR: remove all tags from output printer tray\n";
58         sleep 1;
59 }
60
61 print_card;
62
63 do {
64         my @visible = $rfid->tags(
65                 enter => sub {
66                         my $tag = shift;
67                         print localtime()." enter ", tag($tag);
68                         push @stack, [ 'enter', $tag ];
69                         warn dump @stack;
70
71                         print_card;
72                 },
73                 leave => sub {
74                         my $tag = shift;
75                         print localtime()." leave ", tag($tag);
76                         push @stack, [ 'leave', $tag ];
77                         warn dump @stack;
78                 },
79         );
80
81         warn localtime()." visible: ",join(' ',@visible),"\n";
82
83         sleep 1;
84 } while $loop;
85
86 sub print_card {
87
88         print "XXX print_card\n";
89
90         my $p = Printer::EVOLIS::Parallel->new( '/dev/usb/lp0' );
91         print "insert card ", $p->command( 'Si' );
92         print "eject card ", $p->command( 'Ser' );
93 }
94