00001 00002 /* 00003 * Copyright 2012 Phidgets Inc. All rights reserved. 00004 */ 00005 00006 package com.phidgets; 00007 import java.util.Iterator; 00008 import java.util.LinkedList; 00009 import com.phidgets.event.*; 00010 import java.util.Calendar; 00021 public final class GPSPhidget extends Phidget 00022 { 00023 public GPSPhidget () throws PhidgetException 00024 { 00025 super (create ()); 00026 } 00027 private static native long create () throws PhidgetException; 00028 00036 public native double getLatitude () throws PhidgetException; 00044 public native double getLongitude () throws PhidgetException; 00052 public native double getAltitude () throws PhidgetException; 00062 public native double getHeading () throws PhidgetException; 00070 public native double getVelocity () throws PhidgetException; 00078 public native Calendar getDateAndTime () throws PhidgetException; 00087 public native boolean getPositionFixStatus () throws PhidgetException; 00088 00089 private final void enableDeviceSpecificEvents (boolean b) 00090 { 00091 enableGPSPositionFixStatusChangeEvents (b && gpsPositionFixStatusChangeListeners.size () > 0); 00092 enableGPSPositionChangeEvents (b && gpsPositionChangeListeners.size () > 0); 00093 } 00101 public final void addGPSPositionFixStatusChangeListener (GPSPositionFixStatusChangeListener l) 00102 { 00103 synchronized (gpsPositionFixStatusChangeListeners) 00104 { 00105 gpsPositionFixStatusChangeListeners.add (l); 00106 enableGPSPositionFixStatusChangeEvents (true); 00107 }} private LinkedList gpsPositionFixStatusChangeListeners = new LinkedList (); 00108 private long nativeGPSPositionFixStatusChangeHandler = 0; 00109 public final void removeGPSPositionFixStatusChangeListener (GPSPositionFixStatusChangeListener l) 00110 { 00111 synchronized (gpsPositionFixStatusChangeListeners) 00112 { 00113 gpsPositionFixStatusChangeListeners.remove (l); 00114 enableGPSPositionFixStatusChangeEvents (gpsPositionFixStatusChangeListeners.size () > 0); 00115 }} private void fireGPSPositionFixStatusChange (GPSPositionFixStatusChangeEvent e) 00116 { 00117 synchronized (gpsPositionFixStatusChangeListeners) 00118 { 00119 for (Iterator it = gpsPositionFixStatusChangeListeners.iterator (); it.hasNext ();) 00120 ((GPSPositionFixStatusChangeListener) it.next ()).gpsPositionFixStatusChanged (e); 00121 } 00122 } 00123 private native void enableGPSPositionFixStatusChangeEvents (boolean b); 00131 public final void addGPSPositionChangeListener (GPSPositionChangeListener l) 00132 { 00133 synchronized (gpsPositionChangeListeners) 00134 { 00135 gpsPositionChangeListeners.add (l); 00136 enableGPSPositionChangeEvents (true); 00137 }} private LinkedList gpsPositionChangeListeners = new LinkedList (); 00138 private long nativeGPSPositionChangeHandler = 0; 00139 public final void removeGPSPositionChangeListener (GPSPositionChangeListener l) 00140 { 00141 synchronized (gpsPositionChangeListeners) 00142 { 00143 gpsPositionChangeListeners.remove (l); 00144 enableGPSPositionChangeEvents (gpsPositionChangeListeners.size () > 0); 00145 }} private void fireGPSPositionChange (GPSPositionChangeEvent e) 00146 { 00147 synchronized (gpsPositionChangeListeners) 00148 { 00149 for (Iterator it = gpsPositionChangeListeners.iterator (); it.hasNext ();) 00150 ((GPSPositionChangeListener) it.next ()).gpsPositionChanged (e); 00151 } 00152 } 00153 private native void enableGPSPositionChangeEvents (boolean b); 00154 }