--- 3m-810.pl 2009/06/23 13:50:13 46 +++ 3m-810.pl 2009/06/23 14:59:53 48 @@ -114,6 +114,21 @@ die "server died"; } + +my $last_message = {}; +sub _message { + my $type = shift @_; + my $text = join(' ',@_); + my $last = $last_message->{$type}; + if ( $text ne $last ) { + warn $type eq 'diag' ? '# ' : '', $text, "\n"; + $last_message->{$type} = $text; + } +} + +sub _log { _message('log',@_) }; +sub diag { _message('diag',@_) }; + my $debug = 0; my $device = "/dev/ttyUSB0"; @@ -218,7 +233,7 @@ $parity=$port->parity($parity); $stopbits=$port->stopbits($stopbits); -print "## using $device $baudrate $databits $parity $stopbits debug: $debug verbose: $verbose\n"; +warn "## using $device $baudrate $databits $parity $stopbits debug: $debug verbose: $verbose\n"; # Just in case: reset our timing and buffers $port->lookclear(); @@ -245,26 +260,25 @@ my @tags; - cmd( 'D6 00 05 FE 00 05 FA40', "scan for tags, retry $_", + cmd( 'D6 00 05 FE 00 05 FA40', "scan for tags", 'D6 00 0F FE 00 00 05 ', sub { # 01 E00401003123AA26 941A # seen, serial length: 8 my $rest = shift || die "no rest?"; my $nr = ord( substr( $rest, 0, 1 ) ); if ( ! $nr ) { - print "no tags in range\n"; + _log "no tags in range\n"; update_visible_tags(); meteor( 'info-none-in-range' ); $tags_data = {}; } else { my $tags = substr( $rest, 1 ); - my $tl = length( $tags ); die "wrong length $tl for $nr tags: ",dump( $tags ) if $tl =! $nr * 8; push @tags, uc(unpack('H16', substr($tags, $_ * 8, 8))) foreach ( 0 .. $nr - 1 ); warn "## tags ",as_hex($tags), " [$tl] = ",dump( $tags ) if $debug; - print "$nr tags in range: ", join(',', @tags ) , "\n"; + _log "$nr tags in range: ", join(',', @tags ) , "\n"; meteor( 'info-in-range', join(' ',@tags)); @@ -273,7 +287,7 @@ } ); - warn "## tags: ",dump( @tags ); + diag "tags: ",dump( @tags ); return $tags_data; }