NAME
RFID::Alien::Reader - Abstract base class for a Alien RFID reader
SYNOPSIS
This abstract base class provides most of the methods required for interfacing Perl with an Alien RFID reader. To actually create an object, use RFID::Alien::Reader::Serial or RFID::Alien::Reader::TCP. For example:
use RFID::Alien::Reader::Serial;
use Win32::SerialPort;
$com = Win32::SerialPort->new('COM1')
or die "Couldn't open COM port 'COM1': $^E\n";
my $reader =
RFID::Alien::Reader::Serial->new(Port => $com,
PersistTime => 0,
AcquireMode => 'Inventory',
)
or die "Couldn't create reader object";
$reader->set(AntennaSequence => [0,1],
TagListAntennaCombine => 'OFF') == 0
or die "Couldn't set reader properties";
my @tags = $reader->readtags();
foreach my $tag (@tags)
{
print "I see tag ",$tag->id,"\n";
}
DESCRIPTION
This abstract base class implements the commands for communicating with an Alien reader. It is written according to the specifications in the Alien Technology Reader Interface Guide v02.00.00. It was tested with the original tag reader and also the ALR-9780. It inherits from RFID::Reader.
To actually create a reader object, use RFID::Alien::Reader::Serial or RFID::Alien::Reader::TCP. Those classes inherit from this one.
Methods
set
Set various properties of the reader or the internal state of the object. This method takes a hash-style list of any number of key/value pairs, and returns a list of errors that occured. In a scalar context, that evaluates to the number of errors that occured, so you can test for errors like this:
my @errs = $alien->set(SomeVariable => "New Value") == 0
or die "Couldn't set SomeVariable: @errs";
See Properties for the properties that can be set, and see the RFID::Reader set method for more details about this method.
get
Get various properties of the reader or the internal state of the object. This method takes a list of parameters whose value you'd like to get. In a list context, it returns a hash with the parameters you asked for as the keys, and their values as the values. In a scalar context, it returns the value of the last property requested. If an error occurs or a value for the requested property can't be found, it is set to undef
.
For example:
my $AcquireMode = $alien->get('AcquireMode');
my %props = $alien->get(qw(AcquireMode PersistTime ReaderVersion));
See Properties for the properties that can be retreived with get, and the RFID::Reader get method for more information about this method.
readtags
Read all of the tags in the reader's field, honoring the requested Mask and AntennaSequence settings. This returns a (possibly empty) list of RFID::Tag objects. For example:
my @tags = $reader->readtags();
foreach my $tag (@tags)
{
print "I see tag ",$tag->id,"\n";
}
Parameters are a hash-style list of parameters that should be set for just this read. The parameters are actually set to the requested value at the beginning of the method call, and set back before returning, so if you want to use the same parameters for many calls (say in a loop) you will probably want to set them just once with set.
See the RFID::Reader readtags method for more information about this method.
sleeptags
Request that all tags addressed by the reader go to sleep, causing them to ignore all requests from the reader until they are awakened. Which tags are addressed by the reader is affected by the Mask and AntennaSequence settings.
Returns 1 to indicate success; currently it dies on an error, but may return undef
in the future.
This method is not very well tested yet. In particular, although the commands appear to be issued correctly to the reader, the tags don't seem to actually go to sleep.
Parameters are a hash-style list of parameters that should be set for just this read. The parameters are actually set to the requested value at the beginning of the method call, and set back before returning, so if you want to use the same parameters for many calls (say in a loop) you will probably want to set them just once with set.
waketags
Request that all tags addressed by the reader which are currently asleep wake up, causing them to once again pay attention to requests from the reader. Which tags are addressed by the reader is affected by the Mask and AntennaSequence settings.
Returns 1 to indicate success; currently it dies on an error, but may return undef
in the future.
This method is not very well tested yet, since sleeptags doesn't quite behave as expected.
Parameters are a hash-style list of parameters that should be set for just this read. The parameters are actually set to the requested value at the beginning of the method call, and set back before returning, so if you want to use the same parameters for many calls (say in a loop) you will probably want to set them just once with set.
reboot
Request that the reader unit reboot.
The object may behave unpredictably after a reboot; if you want to continue using the reader you should create a new object. This new object will sync up with the reader and should work OK, once the reboot is completed. This may be fixed in the future.
Properties
There are various properties that can be controlled by the get and set methods. Some of these settings will cause one or more commands to be sent to the reader, while other will simply return the internal state of the object. The value for a property is often a string, but can also be an arrayref or hashref. These properties try to hide the internals of the Alien reader, and so their syntax doesn't always exactly match that of the actual Alien command.
AcqCycles, AcqEnterWakeCount, AcqCount, AcqSleepCount, AcqExitWakeCount
These settings affect the operations of the anti-collision algorithm used by Alien to scan for tags. See the Alien documentation for more information.
AcquireMode
Affects the way in which tags are found during a call to readtags. If the mode is set to the string Inventory, an anti-collision search algorithm is used to find all tags in the reader's view; if the mode is set to the string Global Scroll, the reader will quickly search for a single tag.
See the Alien documentation for more information.
AntennaSequence
An arrayref of the antenna numbers that should be queried, and in what order. Antennas are numbered from 0 to 3 (the same as on the front of the reader unit). For example:
$alien->set(AntennaSequence => [0,1,2,3]);
The default AntennaSequence is [0]
; you must override this if you want to read from more than one antenna.
Debug
Send debugging information to STDERR
. Currently this is only on or off, but in the future various debugging levels may be supported. Debugging information is currently mostly I/O with the reader.
Mask
Set or get a bitmask for the tags. After setting the mask, all commands will only apply to tags whose IDs match the given mask.
The mask format is a string beginning with the bits of the tag as a hex number, optionally followed by a slash and the size of the mask, optionally followed by the bit offset in the tag ID where the comparison should start. For example, to look for 8 ones at the end of a tag, you could use:
$alien->set(Mask => 'ff/8/88');
A zero-length mask (which matches all tags) is represented by an empty string.
PersistTime
Controls how long the reader will remember a tag after seeing it. If the reader has seen a tag within this time period when you use readtags, it will be returned even if it is no longer in view of the reader. You can set it to a number of seconds to remember a tag, to 0
to not remember tags, or to -1
to remember tags until the readtags method is executed. The default is -1
.
See the Alien documentation for more information.
TagListAntennaCombine
If this is set to ON
, a tag seen by multiple antennas will only return one tag list entry.
See the Alien documentation for more information.
Time
The current time on the reader unit. All tag responses are timestamped, so setting the time may be useful.
The time is represented as Unix epoch time---that is, the number of seconds since midnight on January 1 1970 in GMT. You can either set or get it using this format.
If you set the time to an empty string, the reader's time will be set to the current time of the computer running the script.
Currently, no attempt is made to deal with the timezone. That may be addressed in the future.
Timeout
Request that requests to the reader that do not complete in the given number of seconds cause a die
to happen.
ReaderVersion
Cannot be set. Returns a string containing information about the reader.
SEE ALSO
RFID::Alien::Reader::Serial, RFID::Alien::Reader::TCP, RFID::Reader, RFID::EPC::Tag, http://whereabouts.eecs.umich.edu/code/rfid-perl/.
AUTHOR
Scott Gifford <gifford@umich.edu>, <sgifford@suspectclass.com>
Copyright (C) 2004-2006 The Regents of the University of Michigan.
See the file LICENSE included with the distribution for license information.