--- 3m-810.pl 2008/10/04 11:55:30 22 +++ 3m-810.pl 2009/03/29 01:05:49 25 @@ -8,6 +8,21 @@ use Carp qw/confess/; use Getopt::Long; +use IO::Socket::INET; + +my $meteor_server = '192.168.1.13:4671'; + +my $meteor = IO::Socket::INET->new( $meteor_server ) + || die "can't connect to meteor $meteor_server: $!"; + +sub meteor { + my @a = @_; + push @a, scalar localtime() if $a[0] =~ m{^info}; + + warn ">> meteor ",dump( @a ); + print $meteor "ADDMESSAGE test ",join('|',@a),"\n"; +} + my $debug = 0; my $device = "/dev/ttyUSB0"; @@ -72,6 +87,9 @@ =cut +my $tags_data; +my $visible_tags; + my $port=new Device::SerialPort($device) || die "can't open serial port $device: $!\n"; warn "using $device $handshake $baudrate $databits $parity $stopbits" if $debug; $handshake=$port->handshake($handshake); @@ -95,7 +113,9 @@ cmd( 'D5 00 05 04 00 11 8C66', 'hw version', 'D5 00 09 04 00 11 0A 05 00 02 7250', sub { - print "hardware version ", join('.', unpack('CCCC', skip_assert(3) )), "\n"; + my $hw_ver = join('.', unpack('CCCC', skip_assert(3) )); + print "hardware version $hw_ver\n"; + meteor( 'info', "Found reader hardware $hw_ver" ); }); cmd( 'D6 00 0C 13 04 01 00 02 00 03 00 04 00 AAF2','FIXME: stats?', @@ -111,6 +131,8 @@ if ( ! $nr ) { print "no tags in range\n"; update_visible_tags(); + meteor( 'info-none-in-range' ); + $tags_data = {}; } else { my $tags = substr( $rest, 1 ); @@ -123,17 +145,16 @@ warn "## tags ",as_hex($tags), " [$tl] = ",dump( $tags ) if $debug; print "$nr tags in range: ", join(',', @tags ) , "\n"; - update_visible_tags( @tags ); + meteor( 'info-in-range', join(' ',@tags)); + update_visible_tags( @tags ); } } -) foreach ( 1 .. 100 ); +) while(1); +#) foreach ( 1 .. 100 ); -my $tags_data; -my $visible_tags; - sub update_visible_tags { my @tags = @_; @@ -142,7 +163,12 @@ foreach my $tag ( @tags ) { if ( ! defined $last_visible_tags->{$tag} ) { - read_tag( $tag ); + if ( defined $tags_data->{$tag} ) { +# meteor( 'in-range', $tag ); + } else { + meteor( 'read', $tag ); + read_tag( $tag ); + } $visible_tags->{$tag}++; } else { warn "## using cached data for $tag" if $debug; @@ -151,7 +177,9 @@ } foreach my $tag ( keys %$last_visible_tags ) { - print "removed tag $tag with data ",dump( delete $tags_data->{$tag} ),"\n"; + my $data = delete $tags_data->{$tag}; + print "removed tag $tag with data ",dump( $data ),"\n"; + meteor( 'removed', $tag ); } warn "## update_visible_tags(",dump( @tags ),") = ",dump( $visible_tags )," removed: ",dump( $last_visible_tags ), " data: ",dump( $tags_data ) if $debug; @@ -163,8 +191,6 @@ confess "no tag?" unless $tag; - return if defined $tags_data->{$tag}; - print "read_tag $tag\n"; cmd(