make it robust
authorDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 15 Aug 2010 17:56:17 +0000 (19:56 +0200)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 15 Aug 2010 17:56:17 +0000 (19:56 +0200)
re-open parallel port before receiving response and wait for
first byte with short timeout

scripts/evolis-command.pl

index 6c63092..e8c065f 100755 (executable)
@@ -5,6 +5,7 @@ use strict;
 
 use POSIX;
 use Data::Dump qw(dump);
+use Time::HiRes;
 
 my $dev = '/dev/usb/lp0';
 my $debug = 1;
@@ -26,12 +27,16 @@ while(<STDIN>) {
                syswrite $parallel, $byte, 1;
        }
 
+       close($parallel);
+       sysopen( $parallel, $dev, O_RDWR | O_EXCL) || die "$dev: $!";
+
        my $response;
+       while ( ! sysread $parallel, $response, 1 ) { sleep 0.1 }; # read first char
        my $byte;
        while( sysread $parallel, $byte, 1 ) {
+               warn "#<< ",dump($byte),$/ if $debug;
                last if $byte eq "\x00";
                $response .= $byte;
-               warn "#<< ",dump($byte),$/ if $debug;
        }
        close($parallel);