blob: 20a0ee2e7a048cb616557e464140994ba6edb076 (
plain)
pre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.highlight .hll { background-color: #ffffcc }
.highlight .c { color: #888888 } /* Comment */
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
.highlight .k { color: #008800; font-weight: bold } /* Keyword */
.highlight .ch { color: #888888 } /* Comment.Hashbang */
.highlight .cm { color: #888888 } /* Comment.Multiline */
.highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */
.highlight .cpf { color: #888888 } /* Comment.PreprocFile */
.highlight .c1 { color: #888888 } /* Comment.Single */
.highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */
.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #aa0000 } /* Generic.Error */
.highlight .gh { color: #333333 } /* Generic.Heading */
.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #555555 } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #666666 } /* Generic.Subheading */
.highlight .gt { color: #aa0000 } /* Generic.Traceback */
.highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008800 } /* Keyword.Pseudo */
.highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */
.highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */
.highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */
.highlight .na { color: #336699 } /* Name.Attribute */
.highlight .nb { color: #003388 } /* Name.Builtin */
.highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */
.highlight .no { color: #003366; font-weight: bold } /* Name.Constant */
.highlight .nd { color: #555555 } /* Name.Decorator */
.highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */
.highlight .nl { color: #336699; font-style: italic } /* Name.Label */
.highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */
.highlight .py { color: #336699; font-weight: bold } /* Name.Property */
.highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #336699 } /* Name.Variable */
.highlight .ow { color: #008800 } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */
.highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */
.highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */
.highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */
.highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */
.highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */
.highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */
.highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */
.highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */
.highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */
.highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */
.highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */
.highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */
.highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */
.highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */
.highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */
.highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */
.highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */
.highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */
.highlight .vc { color: #336699 } /* Name.Variable.Class */
.highlight .vg { color: #dd7700 } /* Name.Variable.Global */
.highlight .vi { color: #3333bb } /* Name.Variable.Instance */
.highlight .vm { color: #336699 } /* Name.Variable.Magic */
.highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
/*
* Copyright 2012 Phidgets Inc. All rights reserved.
*/
package com.phidgets;
import java.util.Iterator;
import java.util.LinkedList;
import com.phidgets.event.*;
/**
* This class represents a Phidget RFID Reader. All methods
* to read tags and set outputs on the RFID reader are implemented in this class.
* <p>
* The Phidget RFID reader can read one tag at a time. Both tag and tagloss event handlers are provided,
* as well as control over the antenna so that multiple readers can exist in close proximity without interference.
* See your device's User Guide for more specific API details,
* technical information, and revision details. The User Guide, along with other resources, can be found on
* the product page for your device.
*
* @author Phidgets Inc.
*/
public final class RFIDPhidget extends Phidget
{
public RFIDPhidget () throws PhidgetException
{
super (create ());
}
private static native long create () throws PhidgetException;
/**
* Returns the number of outputs. These are the outputs provided by the terminal block.
* Older RFID readers do not have these outputs, and this method will return 0.
* @return number of outputs
* @throws PhidgetException If this Phidget is not opened and attached.
* See {@link com.phidgets.Phidget#open(int) open} for information on determining if a device is attached.
*/
public native int getOutputCount () throws PhidgetException;
/**
* Returns the state of an output. True indicated activated, False deactivated, which is the default.
* @param index index of the output
* @return state of the output
* @throws PhidgetException If this Phidget is not opened and attached, or the index is out of range.
* See {@link com.phidgets.Phidget#open(int) open} for information on determining if a device is attached.
*/
public native boolean getOutputState (int index) throws PhidgetException;
/**
* Sets the state of a digital output. True indicated activated, False deactivated, which is the default.
* @param index index of the output
* @param state desired state
* @throws PhidgetException If this Phidget is not opened and attached, or the index is out of range.
* See {@link com.phidgets.Phidget#open(int) open} for information on determining if a device is attached.
*/
public native void setOutputState (int index, boolean state) throws PhidgetException;
/**
* Returns the state of the antenna. True indicated that the antenna is active, False indicated inactive.
* @return state of the antenna
* @throws PhidgetException If this Phidget is not opened and attached.
* See {@link com.phidgets.Phidget#open(int) open} for information on determining if a device is attached.
*/
public native boolean getAntennaOn () throws PhidgetException;
/**
* Sets the state of the antenna. True turns the antenna on, False turns it off. The antenna if by default
* turned off, and needs to be explicitely activated before tags can be read. Control over the antenna
* allows multiple readers to be used in close proximity, as multiple readers will interfere with each other if
* their antenna's are activated simultaneously.
* @param state new state for the antenna
* @throws PhidgetException If this Phidget is not opened and attached.
* See {@link com.phidgets.Phidget#open(int) open} for information on determining if a device is attached.
*/
public native void setAntennaOn (boolean state) throws PhidgetException;
/**
* Returns the state of the onboard LED. This LED is by default turned off.
* @return state of the LED
* @throws PhidgetException If this Phidget is not opened and attached.
* See {@link com.phidgets.Phidget#open(int) open} for information on determining if a device is attached.
*/
public native boolean getLEDOn () throws PhidgetException;
/**
* Sets the state of the onboard LED. True turns the LED on, False turns it off. The LED is by default turned off.
* @param state new state for the LED
* @throws PhidgetException If this Phidget is not opened and attached.
* See {@link com.phidgets.Phidget#open(int) open} for information on determining if a device is attached.
*/
public native void setLEDOn (boolean state) throws PhidgetException;
/**
* Returns the last tag read. This method will only return a valid tag after a tag has been seen.
* This method can be used even after a tag has been removed from the reader
* @return tag
* @throws PhidgetException If this Phidget is not opened and attached.
* See {@link com.phidgets.Phidget#open(int) open} for information on determining if a device is attached.
*/
public native String getLastTag () throws PhidgetException;
/**
* Returns the state of whether or not a tag is being read by the reader.
* True indicated that a tag is on (or near) the reader, false indicates that one is not.
* @return tag read state
* @throws PhidgetException If this Phidget is not opened and attached.
* See {@link com.phidgets.Phidget#open(int) open} for information on determining if a device is attached.
*/
public native boolean getTagStatus () throws PhidgetException;
private final void enableDeviceSpecificEvents (boolean b)
{
enableTagGainEvents (b && tagGainListeners.size () > 0);
enableTagLossEvents (b && tagLossListeners.size () > 0);
enableOutputChangeEvents (b && outputChangeListeners.size () > 0);
}
/**
* Adds a tag gained listener. The tag gaiend handler is a method that will be called when a new tag is
seen by the reader. The event is only fired one time for a new tag, so the tag has to be removed and then replaced before
another tag gained event will fire.
* <p>
* There is no limit on the number of tag gained change handlers that can be registered for a particular Phidget.
*
* @param l An implemetation of the {@link com.phidgets.event.TagGainListener TagGainListener} interface
*/
public final void addTagGainListener (TagGainListener l)
{
synchronized (tagGainListeners)
{
tagGainListeners.add (l);
enableTagGainEvents (true);
}} private LinkedList tagGainListeners = new LinkedList ();
private long nativeTagGainHandler = 0;
public final void removeTagGainListener (TagGainListener l)
{
synchronized (tagGainListeners)
{
tagGainListeners.remove (l);
enableTagGainEvents (tagGainListeners.size () > 0);
}} private void fireTagGain (TagGainEvent e)
{
synchronized (tagGainListeners)
{
for (Iterator it = tagGainListeners.iterator (); it.hasNext ();)
((TagGainListener) it.next ()).tagGained (e);
}
}
private native void enableTagGainEvents (boolean b);
/**
* Adds a tag lost listener. The tag lost handler is a method that will be called when a tag is
removed from the reader.
* <p>
* There is no limit on the number of tag lost change handlers that can be registered for a particular Phidget.
*
* @param l An implemetation of the {@link com.phidgets.event.TagLossListener TagLossListener} interface
*/
public final void addTagLossListener (TagLossListener l)
{
synchronized (tagLossListeners)
{
tagLossListeners.add (l);
enableTagLossEvents (true);
}} private LinkedList tagLossListeners = new LinkedList ();
private long nativeTagLossHandler = 0;
public final void removeTagLossListener (TagLossListener l)
{
synchronized (tagLossListeners)
{
tagLossListeners.remove (l);
enableTagLossEvents (tagLossListeners.size () > 0);
}} private void fireTagLoss (TagLossEvent e)
{
synchronized (tagLossListeners)
{
for (Iterator it = tagLossListeners.iterator (); it.hasNext ();)
((TagLossListener) it.next ()).tagLost (e);
}
}
private native void enableTagLossEvents (boolean b);
/**
* Adds an output change listener. The output change handler is a method that will be called when an output has changed.
* <p>
* There is no limit on the number of output change handlers that can be registered for a particular Phidget.
*
* @param l An implemetation of the {@link com.phidgets.event.OutputChangeListener OutputChangeListener} interface
*/
public final void addOutputChangeListener (OutputChangeListener l)
{
synchronized (outputChangeListeners)
{
outputChangeListeners.add (l);
enableOutputChangeEvents (true);
}} private LinkedList outputChangeListeners = new LinkedList ();
private long nativeOutputChangeHandler = 0;
public final void removeOutputChangeListener (OutputChangeListener l)
{
synchronized (outputChangeListeners)
{
outputChangeListeners.remove (l);
enableOutputChangeEvents (outputChangeListeners.size () > 0);
}} private void fireOutputChange (OutputChangeEvent e)
{
synchronized (outputChangeListeners)
{
for (Iterator it = outputChangeListeners.iterator (); it.hasNext ();)
((OutputChangeListener) it.next ()).outputChanged (e);
}
}
private native void enableOutputChangeEvents (boolean b);
}