--- 3m-810.pl 2008/09/28 14:06:59 3 +++ 3m-810.pl 2008/09/28 15:59:38 4 @@ -7,6 +7,8 @@ use Data::Dump qw/dump/; use Carp qw/confess/; +my $debug = 0; + my $response = { 'd500090400110a0500027250' => 'version?', 'd60007fe00000500c97b' => 'no tag in range', @@ -75,19 +77,22 @@ #$port->stty_inpck(1); #$port->stty_istrip(1); -cmd( 'D5 00 05 04 00 11 8C66', 'hw version?', - 'D5 00 09 04 00 11 0A 05 00 02 7250', 'hw 10.5.0.2', sub { +# initial hand-shake with device + +cmd( 'D5 00 05 04 00 11 8C66', 'hw version?', + 'D5 00 09 04 00 11 0A 05 00 02 7250', 'hw 10.5.0.2', sub { my ( $len, $payload, $checksum ) = @_; assert( 0, 3 ); print "hardware version ", join('.', unpack('CCCC', substr($payload,3,4))), "\n"; }); -cmd( 'D6 00 0C 13 04 01 00 02 00 03 00 04 00 AAF2','stats?' ); -# D6 00 0C 13 00 02 01 01 03 02 02 03 00 E778 +cmd( 'D6 00 0C 13 04 01 00 02 00 03 00 04 00 AAF2','stats?', + 'D6 00 0C 13 00 02 01 01 03 02 02 03 00 E778','FIXME: unimplemented', sub { assert( 0 ) } ); -cmd( 'D6 00 05 FE 00 05 FA40', "XXX scan $_", - 'D6 00 07 FE 00 00 05 00 C97B -- no tag' ) foreach ( 1 .. 10 ); +# start scanning for tags +cmd( 'D6 00 05 FE 00 05 FA40', "XXX scan $_", + 'D6 00 07 FE 00 00 05 00 C97B', 'no tag' ) foreach ( 1 .. 10 ); # D6 00 0F FE 00 00 05 01 E00401003123AA26 941A # seen cmd( 'D6 00 0D 02 E00401003123AA26 00 03 1CC4', 'read offset: 0 blocks: 3' ); @@ -155,7 +160,7 @@ $data .= $b; } $desc ||= '?'; - warn "#< ", as_hex($data), "\t$desc\n"; + warn "#< ", as_hex($data), "\t$desc\n" if $debug; return $data; } @@ -164,6 +169,8 @@ sub assert { my ( $from, $to ) = @_; + $to = length( $assert->{expect} ) if ! defined $to; + my $p = substr( $assert->{payload}, $from, $to ); my $e = substr( $assert->{expect}, $from, $to ); warn "EXPECTED ",as_hex($e), " GOT ", as_hex($p), " [$from-$to] in ",dump( $assert ), "\n" if $e ne $p;