--- cpr-m02.pl 2010/07/12 12:00:39 85 +++ cpr-m02.pl 2010/07/16 09:31:56 86 @@ -288,7 +288,7 @@ } sub cpr { - my ( $hex, $description ) = @_; + my ( $hex, $description, $coderef ) = @_; my $bytes = str2bytes($hex); my $len = pack( 'c', length( $bytes ) + 3 ); my $send = $len . $bytes; @@ -310,8 +310,17 @@ $r_len = ord($r_len) - 1; my $data = $port->read( $r_len ); warn "<< ", as_hex( $data ); + + my $t = Time::HiRes::time; - Time::HiRes::sleep 0.050; + $coderef->( $data ) if $coderef; + + my $dt = Time::HiRes::time - $t; + if ( $dt < 0.050 ) { + my $s = 0.050 - $dt; + warn "# sleep for more $s\n"; + Time::HiRes::sleep $s; + } } # FF = COM-ADDR any @@ -324,7 +333,26 @@ cpr( 'FF 69', 'RF Reset' ); -cpr( 'FF B0 01 00', 'ISO - Inventory' ); +my $inventory; + +while(1) { + +cpr( 'FF B0 01 00', 'ISO - Inventory', sub { + my $data = shift; + my $data_sets = ord(substr($data,3,1)); + $data = substr($data,4); + foreach ( 1 .. $data_sets ) { + my $tr_type = substr($data,0,1); + my $dsfid = substr($data,1,1); + my $uid = substr($data,2,8); + $inventory->{$uid}++; + $data = substr($data,10); + warn "# TAG $_ ",as_hex( $tr_type, $dsfid, $uid ),$/; + } + warn "inventory: ",dump($inventory); +}); + +} #cpr( '', '?' );