RFID::Matrics::Reader::Test - A fake implementation of L<RFID::Matrics::Reader|RFID::Matrics::Reader> for testing


RFID-Matrics documentation Contained in the RFID-Matrics distribution.

Index


Code Index:

NAME

Top

RFID::Matrics::Reader::Test - A fake implementation of RFID::Matrics::Reader for testing

SYNOPSIS

Top

Provides fake backend methods to test out RFID::Matrics::Reader without having access to a real reader. Inherits from RFID::Reader::TestBase.

SEE ALSO

Top

RFID::Matrics::Reader, RFID::Matrics::Reader::Serial, RFID::Matrics::Reader::TCP, RFID::Reader::TestBase.

AUTHOR

Top

Scott Gifford <gifford@umich.edu>, <sgifford@suspectclass.com>

Copyright (C) 2004 The Regents of the University of Michigan.

See the file LICENSE included with the distribution for license information.


RFID-Matrics documentation Contained in the RFID-Matrics distribution.
package RFID::Matrics::Reader::Test;
use RFID::Matrics::Reader; $VERSION=$RFID::Matrics::Reader::VERSION;
use RFID::Reader::TestBase;
@ISA=qw(RFID::Reader::TestBase RFID::Matrics::Reader);

# Written by Scott Gifford <gifford@umich.edu>
# Copyright (C) 2004 The Regents of the University of Michigan.
# See the file LICENSE included with the distribution for license
# information.

use RFID::Matrics::Reader qw(hexdump);

our %TESTRESPONSE = 
    (
     # Start constant read

     # Stop constant read
     hex2bin('01 04 05 26 0a 45') 
       => hex2bin('01 04 06 25 00 6b 9a'),
     
     # Get parameter block
     hex2bin('01 04 06 24 a0 b9 26') 
       => hex2bin('01 04 26 24 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 8a f6'),

     # Set parameter block
     hex2bin('01 04 29 23 01 00 00 00 ff 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 bf 9e')
       => hex2bin('01 04 06 23 00 bb ce'),

     # Get node address
     hex2bin('01 ff 0d 19 af 03 00 00 00 00 00 00 af 8f')
       => hex2bin('01 04 06 19 00 69 85'),
     
     # Get node status
     hex2bin('01 04 05 14 9b 57')
       => hex2bin('01 04 26 14 00 af 03 00 00 00 00 00 00 02 01 02 00 00 00 00 00 01 01 00 00 00 00 00 00 00 00 00 00 00 00 e7 0f e4 6f'),

     # Read tags
     hex2bin('01 04 06 22 a0 69 72')
       => hex2bin('01 04 35 22 01 a0 05 00 de 09 96 00 a8 07 05 c8 02 02 c4 76 01 00 00 00 00 02 02 c0 76 01 00 00 00 00 02 02 bc 76 01 00 00 00 00 02 02 bc 76 01 00 00 00 00 5a 0b')
        . hex2bin('01 04 0c 22 00 05 00 23 00 00 00 81 e9'),
     );

sub new
{
    my $class = shift;
    my(%p)=@_;
    my $self = {};
    bless $self,$class;
    
    # Initialize everything.
    foreach my $parent (@ISA)
    {
	if (my $init = $parent->can('_init'))
	{
	    $init->($self,%p);
	}
    }

    $self;
}

sub _process_input
{
    my $self = shift;
    my($buf)=@_;

    if ($buf =~ /^\x01.(.)/o)
    {
	my $pktsize = ord($1)+1;
	if (length($buf) >= ($pktsize))
	{
	    my $resp = $TESTRESPONSE{substr($buf,0,$pktsize,'')}
  	        or die "Test module received invalid input: ",hexdump $buf,"\n";
	    $self->_add_output($resp);
	}
    }
    $buf;
}

sub hex2bin
{
    my $hex = $_[0];
    $hex =~ tr/0-9a-fA-F//cd;
    pack("C*",map { hex } unpack("a2"x(length($hex)/2),$hex));
}
    
1;

1;