X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=scripts%2Fprint.pl;h=04abc0553d6bc5057e32a8c182dafaaaa2bde2a3;hb=35009cf2a0f728ec09911cd19f08fd7b4f3d82fb;hp=9badbfe8518604d57ca6e29605459b1dca5fb8cb;hpb=be45c665bffd820b4c69925285da11757d556f16;p=Biblio-RFID.git diff --git a/scripts/print.pl b/scripts/print.pl index 9badbfe..04abc05 100755 --- a/scripts/print.pl +++ b/scripts/print.pl @@ -10,6 +10,7 @@ use RFID::Biblio::Reader; use RFID::Biblio::RFID501; use Storable; +my $evolis_dir = '/home/dpavlin/klin/Printer-EVOLIS'; # FIXME use lib '/home/dpavlin/klin/Printer-EVOLIS/lib'; use Printer::EVOLIS::Parallel; @@ -17,22 +18,39 @@ my $loop = 1; my $reader = '3M'; my $debug = 0; my $afi = 0x42; +my $test = 0; + +my $log_print = 'log.print'; +mkdir $log_print unless -d $log_print; GetOptions( 'loop!' => \$loop, 'reader=s', => \$reader, 'debug+' => \$debug, + 'test+' => \$test, ) || die $!; die "Usage: $0 print.txt\n" unless @ARGV; +my $persistant_path = '/tmp/programmed.storable'; +my $programmed; +my $numbers; +if ( -e $persistant_path ) { + $programmed = retrieve($persistant_path); + warn "# loaded ", scalar keys %$programmed, " programmed cards\n"; + foreach my $tag ( keys %$programmed ) { + $numbers->{ $programmed->{$tag} } = $tag; + } +} + my @queue; my @done; -warn "# reading tab-delimited input\n"; +warn "# reading tab-delimited input: number login\@domain name surname\n"; while(<>) { chomp; my @a = split(/\t/,$_); - push @queue, [ @a ]; + die "invalid: @a in line $_" if $a[0] !~ m/\d{12}/ && $a[1] !~ m/\@/; + push @queue, [ @a ] if ! $numbers->{ $a[0] }; } print "# queue ", dump @queue; @@ -51,8 +69,17 @@ sub tag { ; } +sub iso_date { + my @t = localtime(time); + return sprintf "%04d-%02d-%02dT%02d:%02d:%02d", $t[5]+1900,$t[4]+1,$t[3],$t[2],$t[1],$t[0]; +} + sub print_card; +my $log_path = "$log_print/" . iso_date . ".txt"; +die "$log_path exists" if -e $log_path; +open(my $log, '>', $log_path) || die "$log_path: $!"; + while ( $rfid->tags ) { print "ERROR: remove all tags from output printer tray\n"; sleep 1; @@ -60,13 +87,6 @@ while ( $rfid->tags ) { print_card; -my $persistant_path = '/tmp/programmed.storable'; -my $programmed; -if ( -e $persistant_path ) { - $programmed = retrieve($persistant_path); - warn "# loaded ", scalar keys %$programmed, " programmed cards\n"; -} - do { my @visible = $rfid->tags( enter => sub { @@ -83,6 +103,8 @@ do { $programmed->{$tag} = $number; store $programmed, $persistant_path; + + print $log iso_date, ",$tag,$number\n"; } }, @@ -100,11 +122,30 @@ do { sub print_card { - print "XXX print_card @{$queue[0]}\n"; + if ( ! @queue ) { + print "QUEUE EMPTY - printing finished\n"; + close($log); + print "$log_path ", -s $log_path, " bytes created\n"; + exit; + } + + my @data = @{$queue[0]}; + print "XXX print_card @data\n"; + + if ( $test ) { + + my $p = Printer::EVOLIS::Parallel->new( '/dev/usb/lp0' ); + print "insert card ", $p->command( 'Si' ),$/; + sleep 1; + print "eject card ", $p->command( 'Ser' ),$/; + + } else { + + system "$evolis_dir/scripts/inkscape-render.pl", "$evolis_dir/card/ffzg-2010.svg", @data; + my $nr = $data[0]; + system "$evolis_dir/scripts/evolis-driver.pl out/$nr.front.pbm out/$nr.back.pbm > /dev/usb/lp0"; + + } - my $p = Printer::EVOLIS::Parallel->new( '/dev/usb/lp0' ); - print "insert card ", $p->command( 'Si' ),$/; - sleep 1; - print "eject card ", $p->command( 'Ser' ),$/; }