diff options
author | Jonathan McCrohan <jmccrohan@gmail.com> | 2012-04-14 12:56:48 +0100 |
---|---|---|
committer | Jonathan McCrohan <jmccrohan@gmail.com> | 2012-04-14 12:56:48 +0100 |
commit | 0b624384cd52be20e61284551d832b499d7b7707 (patch) | |
tree | 6f95a4bbef47abc9720b96c0722e8f632aef228a /Java/com/phidgets/AccelerometerPhidget.java | |
download | libphidget21-0b624384cd52be20e61284551d832b499d7b7707.tar.gz |
Imported Upstream version 2.1.8.20120216upstream/2.1.8.20120216
Diffstat (limited to 'Java/com/phidgets/AccelerometerPhidget.java')
-rw-r--r-- | Java/com/phidgets/AccelerometerPhidget.java | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/Java/com/phidgets/AccelerometerPhidget.java b/Java/com/phidgets/AccelerometerPhidget.java new file mode 100644 index 0000000..c0c82ae --- /dev/null +++ b/Java/com/phidgets/AccelerometerPhidget.java @@ -0,0 +1,116 @@ + +/* + * Copyright 2006 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 Accelerometer. All methods to read + * acceleration data from an Accelerometer are implemented in this class. + <p> + The Phidget Accelerometer provides 2 or 3 axes of acceleration data, at anywhere from 2g to 10g + sensitivity, depending on the specific revision. See your hardware documetation for more information. + They can measure both static (gravity) and dynamic acceleration. + + * @author Phidgets Inc. + */ +public final class AccelerometerPhidget extends Phidget +{ + public AccelerometerPhidget () throws PhidgetException + { + super (create ()); + } + private static native long create () throws PhidgetException; + + /** + * Returns the number of accelerometer axes. Currently all accelerometers provide two or three axes of acceleration - x, y, (and z). + * @return number of axes of acceleration + */ + public native int getAxisCount () throws PhidgetException; + /** + * Returns the acceleration of a particular axis. This value is returned in g's, where one g of acceleration is + * equal to gravity. This means that at a standstill each axis will measure between -1.0 and 1.0 g's depending on + * orientation. + * <P> + * This value will always be between {@link #getAccelerationMin getAccelerationMin} and {@link #getAccelerationMax getAccelerationMax}. + * <p> + * Index 0 is the x-axis, 1 is the y-axis, and 2 is the z-axis (where available). + * + * @param index index of the axis + * @return acceleration of the selected axis + * @throws PhidgetException If this Phidget is not opened and attached, or if 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 double getAcceleration (int index) throws PhidgetException; + /** + * Returns the maximum acceleration value that this axis will report. This will be set to just higher then the maximum + * acceleration that this axis can measure. If the acceleration is equal to this maximum, assume that that axis is saturated + * beyond what it can measure. + * @return maximum acceleration + */ + public native double getAccelerationMax (int index) throws PhidgetException; + /** + * Returns the minimum acceleration value that this axis will report. This will be set to just lower then the minimum + * acceleration that this axis can measure. If the acceleration is equal to this minimum, assume that that axis is saturated + * beyond what it can measure. + * @return minimum acceleration + */ + public native double getAccelerationMin (int index) throws PhidgetException; + /** + * Sets the change trigger for an Axis. This value is in g's and is by default set to 0. + * This is the difference in acceleration that must appear between succesive calls to the + * OnAccelerationChange event handler. + * @param index index of the axis + * @param newVal the new change trigger for this axis + * @throws PhidgetException If this Phidget is not opened and attached, or if 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 setAccelerationChangeTrigger (int index, double newVal) throws PhidgetException; + /** + * Returns the change trigger for an Axis. This value is in g's and is by default set to 0. + * @param index index of the axis + * @return change trigger of the selected axis + * @throws PhidgetException If this Phidget is not opened and attached, or if 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 double getAccelerationChangeTrigger (int index) throws PhidgetException; + + private final void enableDeviceSpecificEvents (boolean b) + { + enableAccelerationChangeEvents (b && accelerationChangeListeners.size () > 0); + } + /** + * Adds an acceleration change listener. The acceleration change handler is a method that will be called when the acceleration + * of an axis has changed by at least the {@link #getAccelerationChangeTrigger(int) Trigger} that has been set for that axis. + * <p> + * There is no limit on the number of acceleration change handlers that can be registered for a particular Phidget. + * + * @param l An implemetation of the {@link com.phidgets.event.AccelerationChangeListener AccelerationChangeListener} interface + */ + public final void addAccelerationChangeListener (AccelerationChangeListener l) + { + synchronized (accelerationChangeListeners) + { + accelerationChangeListeners.add (l); + enableAccelerationChangeEvents (true); + }} private LinkedList accelerationChangeListeners = new LinkedList (); + private long nativeAccelerationChangeHandler = 0; + public final void removeAccelerationChangeListener (AccelerationChangeListener l) + { + synchronized (accelerationChangeListeners) + { + accelerationChangeListeners.remove (l); + enableAccelerationChangeEvents (accelerationChangeListeners.size () > 0); + }} private void fireAccelerationChange (AccelerationChangeEvent e) + { + synchronized (accelerationChangeListeners) + { + for (Iterator it = accelerationChangeListeners.iterator (); it.hasNext ();) + ((AccelerationChangeListener) it.next ()).accelerationChanged (e); + } + } + private native void enableAccelerationChangeEvents (boolean b); +} |