00001 /* 00002 * Copyright 2012 Phidgets Inc. All rights reserved. 00003 */ 00004 00005 package com.phidgets; 00006 00007 import java.util.Iterator; 00008 import java.util.LinkedList; 00009 00010 import com.phidgets.event.*; 00011 00026 public final class InterfaceKitPhidget extends Phidget 00027 { 00035 public InterfaceKitPhidget() throws PhidgetException { 00036 super(create()); 00037 } 00038 00039 private static native long create() throws PhidgetException; 00040 00049 public native int getOutputCount() throws PhidgetException; 00050 00059 public native int getInputCount() throws PhidgetException; 00060 00069 public native int getSensorCount() throws PhidgetException; 00070 00079 public native int getDataRateMin(int index) throws PhidgetException; 00080 00089 public native int getDataRateMax(int index) throws PhidgetException; 00090 00103 public native boolean getInputState(int index) throws PhidgetException; 00104 00119 public native boolean getOutputState(int index) throws PhidgetException; 00120 00135 public native int getSensorValue(int index) throws PhidgetException; 00136 00147 public native int getSensorRawValue(int index) throws PhidgetException; 00148 00159 public native int getSensorChangeTrigger(int index) 00160 throws PhidgetException; 00161 00170 public native int getDataRate(int index) 00171 throws PhidgetException; 00172 00180 public native boolean getRatiometric() 00181 throws PhidgetException; 00182 00191 public native void setOutputState(int index, boolean newVal) 00192 throws PhidgetException; 00193 00204 public native void setSensorChangeTrigger(int index, int newVal) 00205 throws PhidgetException; 00206 00215 public native void setDataRate(int index, int newVal) 00216 throws PhidgetException; 00217 00226 public native void setRatiometric(boolean state) 00227 throws PhidgetException; 00228 00229 private final void enableDeviceSpecificEvents(boolean b) { 00230 enableInputChangeEvents(b && inputChangeListeners.size() > 0); 00231 enableOutputChangeEvents(b && outputChangeListeners.size() > 0); 00232 enableSensorChangeEvents(b && sensorChangeListeners.size() > 0); 00233 } 00234 00235 private LinkedList inputChangeListeners = new LinkedList(); 00236 private long nativeInputChangeHandler = 0; 00237 00246 public final void addInputChangeListener(InputChangeListener l) { 00247 synchronized (inputChangeListeners) { 00248 inputChangeListeners.add(l); 00249 enableInputChangeEvents(true); 00250 } 00251 } 00252 00256 public final void removeInputChangeListener(InputChangeListener l) { 00257 synchronized (inputChangeListeners) { 00258 inputChangeListeners.remove(l); 00259 enableInputChangeEvents(inputChangeListeners.size() > 00260 0); 00261 } 00262 } 00263 private void fireInputChange(InputChangeEvent e) { 00264 synchronized (inputChangeListeners) { 00265 for (Iterator it = inputChangeListeners.iterator(); 00266 it.hasNext(); ) 00267 ((InputChangeListener)it.next()).inputChanged( 00268 e); 00269 } 00270 } 00271 private native void enableInputChangeEvents(boolean b); 00272 00273 private LinkedList outputChangeListeners = new LinkedList(); 00274 private long nativeOutputChangeHandler = 0; 00275 00284 public final void addOutputChangeListener(OutputChangeListener l) { 00285 synchronized (outputChangeListeners) { 00286 outputChangeListeners.add(l); 00287 enableOutputChangeEvents(true); 00288 } 00289 } 00290 00294 public final void removeOutputChangeListener(OutputChangeListener l) { 00295 synchronized (outputChangeListeners) { 00296 outputChangeListeners.remove(l); 00297 enableOutputChangeEvents(outputChangeListeners.size() 00298 > 0); 00299 } 00300 } 00301 private void fireOutputChange(OutputChangeEvent e) { 00302 synchronized (outputChangeListeners) { 00303 for (Iterator it = outputChangeListeners.iterator(); 00304 it.hasNext(); ) 00305 ((OutputChangeListener)it.next()) 00306 .outputChanged(e); 00307 } 00308 } 00309 private native void enableOutputChangeEvents(boolean b); 00310 00311 private LinkedList sensorChangeListeners = new LinkedList(); 00312 private long nativeSensorChangeHandler = 0; 00313 00322 public final void addSensorChangeListener(SensorChangeListener l) { 00323 synchronized (sensorChangeListeners) { 00324 sensorChangeListeners.add(l); 00325 enableSensorChangeEvents(true); 00326 } 00327 } 00328 00332 public final void removeSensorChangeListener(SensorChangeListener l) { 00333 synchronized (sensorChangeListeners) { 00334 sensorChangeListeners.remove(l); 00335 enableSensorChangeEvents(sensorChangeListeners.size() 00336 > 0); 00337 } 00338 } 00339 private void fireSensorChange(SensorChangeEvent e) { 00340 synchronized (sensorChangeListeners) { 00341 for (Iterator it = sensorChangeListeners.iterator(); 00342 it.hasNext(); ) 00343 ((SensorChangeListener)it.next()) 00344 .sensorChanged(e); 00345 } 00346 } 00347 private native void enableSensorChangeEvents(boolean b); 00348 }