aboutsummaryrefslogtreecommitdiffstats
path: root/Java/com/phidgets/RFIDPhidget.java
blob: 20a0ee2e7a048cb616557e464140994ba6edb076 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
/*
 * 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);
}