diff options
Diffstat (limited to 'plugins')
19 files changed, 0 insertions, 4860 deletions
diff --git a/plugins/DX8/README.txt b/plugins/DX8/README.txt deleted file mode 100644 index 12cd468..0000000 --- a/plugins/DX8/README.txt +++ /dev/null @@ -1,46 +0,0 @@ -This file modified last on 06/06/2003 by Jeff Kesselman - -This is the source tree for the core input API. - -Directory Organization: - -The root contains a master ANT build.xml. -After a successful build you will have the following sub directories: - -- apidocs Where the javadocs get built to - -- lib Where dependant libraries are kept. - -- bin Where the plugin dll and jar files ar built to. - -- src The source files. - - -Build instructions: - -To clean: ant clean -To build: ant all (or just ant) -To build docs: ant javadoc -To test: - This build will install the plug-in into the coreAPI's test - directories. - Use the tests in the coreAPI build.xml to test. - -Release Info: - Initial Release: This release contains an implementation of the input - API designed by Mike Martak of Sun and Thomas (?) of Sony CEA for - the WIn32 platform. All the code in src/input is cross platform. The - Win32 code is segregated to the DirectX plugin (src/DXplugin) which - depends on DirectInput from DX7 (or later). - - 05/09/2003: A number of bugs and problems with the DXPlugin are fixed in this - release. This release also brings the code up to date using the DI8 - interface. This thus is the first release that requries Peter Puck's - DX8 bindings to compile with MinGW. - - 05/09/2003 (second update): - This version adds a new standard value type to the API. - Axis.POV holds standard definitions for values for POV (hat) switches - -- Axis.POV.CENTER and Axis.POV.OFF are synonmous and are - the center position. - -- Axis.POV.UP, Axis.POV.DOWN, Axis.POV.LEFT and Axis.POV.RIGHT - should be self explainatory. - Any hat that claims to be "normalized" will return these values. (It is - recommended that all hats be normalized by the systemn specific plugins.) - diff --git a/plugins/DX8/build.xml b/plugins/DX8/build.xml deleted file mode 100644 index 0a4759b..0000000 --- a/plugins/DX8/build.xml +++ /dev/null @@ -1,103 +0,0 @@ -<?xml version="1.0"?> - -<!-- Written to assume that classpath is rooted in the current directory. --> -<!-- So this should be OK if you make this script in the root of a filesystem. --> -<!-- If not, you may prefer to adjust the basedir, or move some directories around. --> -<!-- The idea is that both Ant and NetBeans have to know what the package root is --> -<!-- for the classes in your application. --> -<project name="Direct Input Plugin" basedir="." default="all"> - - <!-- Don't worry if you don't know the Ant syntax completely or need help on some tasks! --> - <!-- The standard Ant documentation is bundled. See Help | Help Sets | Ant 1.4.1 Manual. --> - - <target name="init"> - <!-- You can set up any variables you want used throughout the script here. --> - <property name="hello" value="world"/> - <mkdir dir="classes"/> - <mkdir dir="bin"/> - <!-- To use e.g. Jikes, uncomment this line. --> - <!-- (Or make the same change in Tools | Options | Ant Settings | Properties.) --> - <!-- <property name="build.compiler" value="jikes"/> --> - <!-- You might like to set up some overridable paths, etc.: --> - <!-- <property name="mylib" value="../lib/mylib.jar"/> --> - </target> - - <target name="compile" depends="init"> - <!-- Both srcdir and destdir should be package roots. --> - <!-- They could be different of course; in that case NetBeans can also be set --> - <!-- up to compile to a different filesystem in the same way; see Compiler Types: --> - <javac srcdir="src/java" destdir="classes" debug="true" deprecation="true" source="1.4"> - <!-- To add something to the classpath: --> - <classpath> - <pathelement location="lib/jinput.jar"/> - <pathelement location="lib/jutils.jar"/> - </classpath> - <!-- To exclude some files: --> - <!-- - <exclude name="com/foo/SomeFile.java"/> - <exclude name="com/foo/somepackage/"/> - --> - </javac> - <exec dir="." executable="g++" os="Windows 2000, Windows XP, Windows 98"> - <arg line=" -D_STRICT_ANSI -D_JNI_IMPLEMENTATION_"/> - <arg line=" -I'${java.home}/../include' -I'${java.home}/../include/win32' -Ic:/dx9/include"/> - <arg line=" -o bin/dxinput.dll src/native/input.cpp -Wl,--export-all-symbols"/> - <arg line=" -shared -Wl,--kill-at -ldxguid -ldinput -ldinput8"/> - </exec> - <copy file="bin/dxinput.dll" todir="../../coreAPI/src/tests/controller" /> - </target> - - <target name="jar" depends="init,compile"> - <!-- To make a standalone app: --> - <!-- 1. Create a myapp.mf manifest somewhere. --> - <!-- 2. Put in it: --> - <!-- Manifest-Version: 1.0 --> - <!-- Main-Class: com.foo.Main --> - <!-- 3. Pass to <jar>: manifest="myapp.mf" --> - <jar jarfile="bin/dxinput.jar" compress="true" basedir="classes"> - <exclude name="**/*.java"/> - <exclude name="**/*.form"/> - <exclude name="dxinput.mf"/> - <exclude name="dxinput.jar"/> - <exclude name="apidoc"/> - </jar> - <copy file="bin/dxinput.jar" todir="../../coreAPI/src/tests/controller" /> - </target> - - <target name="all" depends="compile,jar" description="Build everything."> - <echo message="Application built. Hello ${hello}!"/> - </target> - - <target name="test" depends="init,all" description="Try running it."> - <echo message="Test by running test on the build.xml for input"/> - </target> - - <target name="javadoc" depends="init" description="Javadoc for my API."> - <mkdir dir="apidocs"/> - <javadoc packagenames="net.*" - destdir="apidocs" - additionalparam="-source 1.4"> - <sourcepath> - <pathelement location="src/java"/> - </sourcepath> - <classpath> - <pathelement location="lib/jinput.jar"/> - <pathelement location="lib/jutils.jar"/> - </classpath> - </javadoc> - </target> - - <target name="clean" depends="init" description="Clean all build products."> - <delete> - <fileset dir="classes"> - <include name="**/*.class"/> - </fileset> - </delete> - <delete file="bin/dxinput.jar" failonerror="no"/> - <delete file="bin/dxinput.dll" failonerror="no"/> - <delete file="../../coreAPI/src/tests/controller/dxinput.jar" failonerror="no" /> - <delete file="../../coreAPI/src/test/controller/dxinput.dll" failonerror="no"/> - <delete dir="../../docs/input/win32/apidoc" failonerror="no"/> - </target> - -</project> diff --git a/plugins/DX8/src/java/net/java/games/input/DirectInputAxis.java b/plugins/DX8/src/java/net/java/games/input/DirectInputAxis.java deleted file mode 100644 index e9cfc6e..0000000 --- a/plugins/DX8/src/java/net/java/games/input/DirectInputAxis.java +++ /dev/null @@ -1,219 +0,0 @@ -/* - * %W% %E% - * - * Copyright 2002 Sun Microsystems, Inc. All rights reserved. - * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. - */ -/***************************************************************************** - * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved. - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * - Redistribution of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * - Redistribution in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materails provided with the distribution. - * - * Neither the name Sun Microsystems, Inc. or the names of the contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * This software is provided "AS IS," without a warranty of any kind. - * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING - * ANY IMPLIED WARRANT OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR - * NON-INFRINGEMEN, ARE HEREBY EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN") AND - * ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS - * A RESULT OF USING, MODIFYING OR DESTRIBUTING THIS SOFTWARE OR ITS - * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST - * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, - * INCIDENTAL OR PUNITIVE DAMAGES. HOWEVER CAUSED AND REGARDLESS OF THE THEORY - * OF LIABILITY, ARISING OUT OF THE USE OF OUR INABILITY TO USE THIS SOFTWARE, - * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - * - * You acknowledge that this software is not designed or intended for us in - * the design, construction, operation or maintenance of any nuclear facility - * - *****************************************************************************/ -package net.java.games.input; - -import net.java.games.input.AbstractAxis; -import net.java.games.input.Axis; - -/** - * - * @author martak - * @version - */ -class DirectInputAxis extends AbstractAxis { - - /** - * DIDFT_ constants and macros defined in dinput.h - */ - private static final int DIDFT_ALL = 0x00000000; - private static final int DIDFT_RELAXIS = 0x00000001; - private static final int DIDFT_ABSAXIS = 0x00000002; - private static final int DIDFT_AXIS = 0x00000003; - private static final int DIDFT_PSHBUTTON = 0x00000004; - private static final int DIDFT_TGLBUTTON = 0x00000008; - private static final int DIDFT_BUTTON = 0x0000000C; - private static final int DIDFT_POV = 0x00000010; - private static final int DIDFT_COLLECTION = 0x00000040; - private static final int DIDFT_NODATA = 0x00000080; - private static final int DIDFT_ANYINSTANCE = 0x00FFFF00; - private static final int DIDFT_INSTANCEMASK = DIDFT_ANYINSTANCE; - private static final int DIDFT_FFACTUATOR = 0x01000000; - private static final int DIDFT_FFEFFECTTRIGGER = 0x02000000; - private static final int DIDFT_OUTPUT = 0x10000000; - private static final int DIDFT_NOCOLLECTION = 0x00FFFF00; - private static int DIDFT_MAKEINSTANCE(int n) { - return ((n&0xffff) << 8); - } - private static int DIDFT_GETTYPE(int n) { - return (n&0xFF); - } - private static int DIDFT_GETINSTANCE(int n) { - return ((n >> 8)&0xffff); - } - private static int DIDFT_ENUMCOLLECTION(int n) { - return ((n&0xFFFF) << 8); - } - - private DirectInputDevice device; - /** - * DIJOYSTATE structure defined in dinput.h: - * - * <pre> - * typedef struct DIJOYSTATE { - * LONG lX; - * LONG lY; - * LONG lZ; - * LONG lRx; - * LONG lRy; - * LONG lRz; - * LONG rglSlider[2]; - * DWORD rgdwPOV[4]; - * BYTE rgbButtons[32]; - * } DIJOYSTATE, *LPDIJOYSTATE; - * - * 80 bytes total - * </pre> - */ - private int offset; - private int type; - private int instance; - private int bitmask = 0xffffffff; - private int bitshift = 0; - - private DirectInputAxis(DirectInputDevice device, Axis.Identifier id, - int didft, String name) { - super(name, id); - this.device = device; - this.type = DIDFT_GETTYPE(didft); - this.instance = DIDFT_GETINSTANCE(didft); - if (id == Axis.Identifier.X) { - offset = 0; - } else if (id == Axis.Identifier.Y) { - offset = 1; - } else if (id == Axis.Identifier.Z) { - offset = 2; - } else if (id == Axis.Identifier.RX) { - offset = 3; - } else if (id == Axis.Identifier.RY) { - offset = 4; - } else if (id == Axis.Identifier.RZ) { - offset = 5; - } else if (id == Axis.Identifier.SLIDER) { - //System.out.println("Slider on "+name+" instance = "+instance); - offset = 6 + (instance>>2); - } else if (id == Axis.Identifier.POV) { - //System.out.println("POV on "+name+" instance = "+instance); - offset = 8 + instance; - } else if (id == Axis.Identifier.BUTTON) { - //System.out.println("Button on "+name+" instance = "+instance); - offset = 12 + (instance/4); - bitshift = (instance%4)*8; - bitmask=0xff; - } - } - - /** Returns the data from the last time the control has been polled. - * If this axis is a button, the value returned will be either 0.0f or 1.0f. - * If this axis is normalized, the value returned will be between -1.0f and - * 1.0f. - * @return A float between -1.0 and 1.0 - */ - public float getPollData() { - int data = ((device.data[offset] >> bitshift)&bitmask); - if ((type&DIDFT_BUTTON) != 0 ) { - return (float)((data&0x80)>>7); - } else if ((type&DIDFT_AXIS)!=0){ // all axes are set for -32768 to 32738 - return ((float)data)/32768; - } else if ((type&DIDFT_POV)!=0) { - if (data == -1) { - return Axis.POV.OFF; - } else if (data == 0.0) { - return Axis.POV.UP; - } else if (data == 4500) { - return Axis.POV.UP_RIGHT; - } else if (data == 9000) { - return Axis.POV.RIGHT; - } else if (data == 13500) { - return Axis.POV.DOWN_RIGHT; - } else if (data == 18000) { - return Axis.POV.DOWN; - } else if (data == 22500) { - return Axis.POV.DOWN_LEFT; - } else if (data == 27000) { - return Axis.POV.LEFT; - } else if (data == 31500) { - return Axis.POV.UP_LEFT; - } else { - System.err.print("Unexpected value for DX8 HAT: "+data); - return Axis.POV.OFF; - } - } else { // return raw value - return (float)data; - } - - } - - /** Returns <code>true</code> if data returned from <code>poll</code> - * is relative to the last call, or <code>false</code> if data - * is absolute. - * @return true if data has chnaged since last poll, else false - */ - public boolean isRelative() { - return (type & DIDFT_RELAXIS) != 0; - } - - /** Returns whether or not the axis is analog, or false if it is digital. - * @return true if analog, false if digital - */ - public boolean isAnalog() { - return (type & DIDFT_AXIS) != 0; - } - - /** Returns whether or not data polled from this axis is normalized - * between the values of -1.0f and 1.0f. - * @return true if data is normalized, false if not. - */ - public boolean isNormalized() { - return (type & (DIDFT_BUTTON|DIDFT_AXIS|DIDFT_POV)) != 0; - } - - /** Creates a new DirectInputAxis (factory method). - * This is a function used internally during set up - * @return The new DirectInputAxis object. - * @param device The device to attach this axis to. - * - * @param didft The identifier for the axis as provided by DX8. - * @param name A name to give the new axis. - * @param id The identifier for the device - */ - public static DirectInputAxis createAxis(DirectInputDevice device, - Axis.Identifier id, int didft, String name) { - return new DirectInputAxis(device, id, didft, name); - } -} diff --git a/plugins/DX8/src/java/net/java/games/input/DirectInputDevice.java b/plugins/DX8/src/java/net/java/games/input/DirectInputDevice.java deleted file mode 100644 index d269961..0000000 --- a/plugins/DX8/src/java/net/java/games/input/DirectInputDevice.java +++ /dev/null @@ -1,227 +0,0 @@ -/* - * %W% %E% - * - * Copyright 2002 Sun Microsystems, Inc. All rights reserved. - * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. - */ -/***************************************************************************** - * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved. - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * - Redistribution of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * - Redistribution in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materails provided with the distribution. - * - * Neither the name Sun Microsystems, Inc. or the names of the contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * This software is provided "AS IS," without a warranty of any kind. - * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING - * ANY IMPLIED WARRANT OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR - * NON-INFRINGEMEN, ARE HEREBY EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN") AND - * ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS - * A RESULT OF USING, MODIFYING OR DESTRIBUTING THIS SOFTWARE OR ITS - * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST - * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, - * INCIDENTAL OR PUNITIVE DAMAGES. HOWEVER CAUSED AND REGARDLESS OF THE THEORY - * OF LIABILITY, ARISING OUT OF THE USE OF OUR INABILITY TO USE THIS SOFTWARE, - * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - * - * You acknowledge that this software is not designed or intended for us in - * the design, construction, operation or maintenance of any nuclear facility - * - *****************************************************************************/ -package net.java.games.input; - -import net.java.games.input.AbstractController; -import net.java.games.input.Axis; -import net.java.games.input.Controller; -import java.util.ArrayList; -import java.util.Iterator; - -/** - * - * @author martak - * @version - */ -class DirectInputDevice extends AbstractController { - - /** - * DIDEVTYPE_ constants from dinput.h header file - ** JPK NOTE: This changed in DI8. In general this - * is fragile anda way shoudl be found to tie these mroe directly - * to the header files. - */ - /* Mike's <=DX7 types - private static final int DIDEVTYPEJOYSTICK_UNKNOWN = 1; - private static final int DIDEVTYPEJOYSTICK_TRADITIONAL = 2; - private static final int DIDEVTYPEJOYSTICK_FLIGHTSTICK = 3; - private static final int DIDEVTYPEJOYSTICK_GAMEPAD = 4; - private static final int DIDEVTYPEJOYSTICK_RUDDER = 5; - private static final int DIDEVTYPEJOYSTICK_WHEEL = 6; - private static final int DIDEVTYPEJOYSTICK_HEADTRACKER = 7; - */ - - /** - * Pointer to the IDirectInputDevice for this device - */ - private long lpDevice; - - /** - * Type of device - */ - private Type type; - - /** - * Do we need to poll data? - */ - private boolean polled = true; - /** - * Data when polling, as per the DIJOYSTATE structure in dinput.h; - * @see DirectInputAxis for a breakdown of this structure - */ - int[] data = new int[32]; - - /** Array list of rumblers */ - private ArrayList rumblerList = new ArrayList(); - - /** - * Private constructor - * @param lpDevice A pointer to the IDirectInputDevice for the device. - * @param subtype The subtype of device, as defined in the DIDEVTYPE - * constants above - * @param productName The product name for the device - * @param instanceName The name of the device - */ - private DirectInputDevice(long lpDevice, int subtype, String productName, - String instanceName,boolean polled) { - super(productName + " " + instanceName); - this.lpDevice = lpDevice; - this.polled = polled; - System.out.println("Creating "+productName+" polling = "+polled); - switch(subtype) { - /* - case DIDEVTYPEJOYSTICK_GAMEPAD: - type = Type.GAMEPAD; break; - case DIDEVTYPEJOYSTICK_RUDDER: - type = Type.RUDDER; break; - case DIDEVTYPEJOYSTICK_WHEEL: - type = Type.WHEEL; break; - case DIDEVTYPEJOYSTICK_HEADTRACKER: - type = Type.HEADTRACKER; break; - case DIDEVTYPEJOYSTICK_TRADITIONAL: // fall through - case DIDEVTYPEJOYSTICK_FLIGHTSTICK: // fall through - */ - default: - type = Type.STICK; break; - } - axes = initDirectInputAxes(); - } - - /** - * Used instead of overriding initAxes because it needs the - * pointer to the IDirectInputDevice - */ - private Axis[] initDirectInputAxes() { - ArrayList list = new ArrayList(); - enumObjects(lpDevice, list); - Axis[] ret = new Axis[list.size()]; - Iterator it = list.iterator(); - int i = 0; - while (it.hasNext()) { - ret[i] = (Axis)it.next(); - i++; - } - return ret; - } - - /** - * Callback called by enumObjects to add a new axis into the list - * @param list This in which to add the new axis - * @param id The identifier for the axis, based on GUID - * @param didft The combination of DIDFT_ flags that make up the type and - * instance number of the axis. - * @param name The name to call the axis. - */ - private void addAxis(ArrayList list, Axis.Identifier id, int didft, - String name) { - list.add(DirectInputAxis.createAxis(this, id, didft, name)); - } - - /** - * Callback called by enumDevice to add a rumbler - * - * @param effect the natie effect id - * @param axisID The axis ID - */ - private void addRumbler(long effect, Axis.Identifier axisID, String axisName) { - rumblerList.add(new DirectInputRumbler(this, effect, axisID, axisName)); - } - - /** Polls axes for data. Returns false if the controller is no longer valid. - * Polling reflects the current state of the device when polled, and is - * unbuffered. - * @return False if the co troller is no longer valid, else true. - */ - public boolean poll() { - return pollNative(lpDevice, data, polled); - } - - /** Returns the type of Controller. - * @return The type of the controller. - */ - public Type getType() { - return type; - } - - /** Returns the zero-based port number for this Controller. - * @return The port number. - */ - public int getPortNumber() { - // REMIND : We may be able to parse this from the name string - return 0; - } - - /** - * Returns the rumbler array - */ - public Rumbler[] getRumblers() { - return (Rumbler[]) rumblerList.toArray(new Rumbler[0]); - } - - /** - * Polls the device; native method. The data from the poll is stored in - * the data array. - */ - private native boolean pollNative(long lpDevice, int[] data, - boolean polled); - - /** - * Enumerates the axes on the device - */ - private native boolean enumObjects(long lpDevice, ArrayList list); - - /** Creates a new DirectInputDevice (factory method) - * This is a function used internally during set up - * @param polled Whether this device's driver should actually be - * polled during a call to Poll or whether it is an - * interrupt driven device that should ignore poll - * requests. - * @param lpDevice A pointer to the IDirectInputDevice for the device. - * @param subtype The subtype of device, as defined in the DIDEVTYPE - * constants above - * @param productName The product name for the device - * @param instanceName The name of the device - * @return The new DirectInputDevice object - */ - public static DirectInputDevice createDevice(long lpDevice, int subtype, - String productName, String instanceName, boolean polled) { - return new DirectInputDevice(lpDevice, subtype, productName, - instanceName,polled); - } -} // class DirectInputDevice diff --git a/plugins/DX8/src/java/net/java/games/input/DirectInputEnvironmentPlugin.java b/plugins/DX8/src/java/net/java/games/input/DirectInputEnvironmentPlugin.java deleted file mode 100644 index fcaa278..0000000 --- a/plugins/DX8/src/java/net/java/games/input/DirectInputEnvironmentPlugin.java +++ /dev/null @@ -1,186 +0,0 @@ -/* - * %W% %E% - * - * Copyright 2002 Sun Microsystems, Inc. All rights reserved. - * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. - */ -/***************************************************************************** - * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved. - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * - Redistribution of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * - Redistribution in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materails provided with the distribution. - * - * Neither the name Sun Microsystems, Inc. or the names of the contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * This software is provided "AS IS," without a warranty of any kind. - * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING - * ANY IMPLIED WARRANT OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR - * NON-INFRINGEMEN, ARE HEREBY EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN") AND - * ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS - * A RESULT OF USING, MODIFYING OR DESTRIBUTING THIS SOFTWARE OR ITS - * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST - * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, - * INCIDENTAL OR PUNITIVE DAMAGES. HOWEVER CAUSED AND REGARDLESS OF THE THEORY - * OF LIABILITY, ARISING OUT OF THE USE OF OUR INABILITY TO USE THIS SOFTWARE, - * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - * - * You acknowledge that this software is not designed or intended for us in - * the design, construction, operation or maintenance of any nuclear facility - * - *****************************************************************************/ -package net.java.games.input; - -import java.security.AccessController; -import java.util.ArrayList; -import java.util.Iterator; -import net.java.games.input.Controller; -import net.java.games.input.ControllerEnvironment; -//import sun.security.action.LoadLibraryAction; -import net.java.games.util.plugins.Plugin; - -/** DirectInput implementation of controller environment - * @author martak - * @version 1.0 - */ -public class DirectInputEnvironmentPlugin extends ControllerEnvironment - implements Plugin -{ - - static { - /** Mikes old code, causes it to be laoded by wrong loader - java.security.AccessController.doPrivileged( - new LoadLibraryAction("jinput")); - */ - System.loadLibrary("dxinput"); - } - - /** - * DIDEVTYPE_ constants from dinput.h header file - * JPK NOTE: changed in DX8 so had to be changed. This is - * fragile, we should find a way to set them from - * the C side sowe can stay up to date with header - */ - /** DX7 and earlier - private static final int DIDEVTYPE_DEVICE = 1; - private static final int DIDEVTYPE_MOUSE = 2; - private static final int DIDEVTYPE_KEYBOARD = 3; - private static final int DIDEVTYPE_JOYSTICK = 4; - private static final int DIDEVTYPE_HID = 0x00010000; - private static int GET_DIDEVICE_TYPE(int dwDevType) { - return (int)((byte)dwDevType); - } - private static int GET_DIDEVICE_SUBTYPE(int dwDevType) { - return (int)((byte)((((short)dwDevType) >> 8) & 0xFF)); - } - **/ - /* DX8 and 9 */ - private static final int DI8DEVTYPE_DEVICE = 0x11; - private static final int DI8DEVTYPE_MOUSE = 0x12; - private static final int DI8DEVTYPE_KEYBOARD = 0x13; - private static final int DI8DEVTYPE_JOYSTICK = 0x14; - private static final int DI8DEVTYPE_GAMEPAD = 0x15; - private static final int DI8DEVTYPE_DRIVING = 0x16; - private static final int DI8DEVTYPE_FLIGHT = 0x17; - private static final int DI8DEVTYPE_1STPERSON = 0x18; - private static final int DI8DEVTYPE_DEVICECTRL = 0x19; - private static final int DI8DEVTYPE_SCREENPOINTER = 0x1A; - private static final int DI8DEVTYPE_REMOTE = 0x1B; - private static final int DI8DEVTYPE_SUPPLEMENTAL = 0x1C; - - private static int GET_DIDEVICE_TYPE(int dwDevType) { - return (dwDevType&0xFF); - } - private static int GET_DIDEVICE_SUBTYPE(int dwDevType) { - return (int)((byte)((((short)dwDevType) >> 8) & 0xFF)); - } - - // Pointer to DirectInput instance - private long lpDirectInput; - // Permanent array of controllers - private Controller[] controllers; - - /** Creates new DirectInputEnvironment */ - public DirectInputEnvironmentPlugin() { - lpDirectInput = directInputCreate(); - enumControllers(); - } - - /** Returns a list of all controllers available to this environment, - * or an empty array if there are no controllers in this environment. - * @return An array of controllers that may be empty. - */ - public Controller[] getControllers() { - return controllers; - } - - private void enumControllers() { - // If direct input fails, create an empty array - if (lpDirectInput == 0) { - controllers = new Controller[] {}; - return; - } - // Create temporary controller array - ArrayList tempDevices = new ArrayList(); - // Eumerate devices - enumDevices(lpDirectInput, tempDevices); - // Set up permanent controller array - controllers = new Controller[tempDevices.size()]; - Iterator it = tempDevices.iterator(); - int i = 0; - while (it.hasNext()) { - controllers[i] = (Controller)it.next(); - i++; - } - } - - /** - * Creates a new device, adding it to the list supplied. - * @param lpDevice A pointer to the IDirectInputDevice for the device. - * @param type The type of device to create, as defined by the constants - * in dinput.h (see DI8DEVTYPE constants above). - * @param productName The product name for the device - * @param instanceName The name of the device - */ - private void addDevice(ArrayList list, long lpDevice, - int type, String productName, String instanceName, boolean polled) { - Controller c; - int category = GET_DIDEVICE_TYPE(type); - int subtype = GET_DIDEVICE_SUBTYPE(type); - //System.out.println("Category = "+category); - if (category == DI8DEVTYPE_MOUSE) { - c = DirectInputMouse.createMouse(lpDevice, subtype, productName, - instanceName); - } else if (category == DI8DEVTYPE_KEYBOARD) { - c = DirectInputKeyboard.createKeyboard(lpDevice, subtype, - productName, instanceName); - } else { - // commented out the assert as we have already got devices that are - // gamepad type, but wr are still going to create them as - // DirectInputDevices - //assert category == DI8DEVTYPE_JOYSTICK; - c = DirectInputDevice.createDevice(lpDevice, subtype, productName, - instanceName,polled); - } - if (c != null) { - list.add(c); - } - } - - /** - * Returns the direct input instance, or 0 if failed to initialize - */ - private native long directInputCreate(); - - /** - * Enumerates all devices, calling createDevice for each one - */ - private native boolean enumDevices(long lpDirectInput, ArrayList list); -} // class DirectInputEnvironment diff --git a/plugins/DX8/src/java/net/java/games/input/DirectInputKeyboard.java b/plugins/DX8/src/java/net/java/games/input/DirectInputKeyboard.java deleted file mode 100644 index 6faf163..0000000 --- a/plugins/DX8/src/java/net/java/games/input/DirectInputKeyboard.java +++ /dev/null @@ -1,208 +0,0 @@ -/* - * %W% %E% - * - * Copyright 2002 Sun Microsystems, Inc. All rights reserved. - * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. - */ -/***************************************************************************** - * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved. - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * - Redistribution of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * - Redistribution in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materails provided with the distribution. - * - * Neither the name Sun Microsystems, Inc. or the names of the contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * This software is provided "AS IS," without a warranty of any kind. - * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING - * ANY IMPLIED WARRANT OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR - * NON-INFRINGEMEN, ARE HEREBY EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN") AND - * ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS - * A RESULT OF USING, MODIFYING OR DESTRIBUTING THIS SOFTWARE OR ITS - * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST - * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, - * INCIDENTAL OR PUNITIVE DAMAGES. HOWEVER CAUSED AND REGARDLESS OF THE THEORY - * OF LIABILITY, ARISING OUT OF THE USE OF OUR INABILITY TO USE THIS SOFTWARE, - * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - * - * You acknowledge that this software is not designed or intended for us in - * the design, construction, operation or maintenance of any nuclear facility - * - *****************************************************************************/ -package net.java.games.input; - -import net.java.games.input.AbstractAxis; -import net.java.games.input.Axis; -import net.java.games.input.StandardKeyboard; - -/** - * DirectInput keyboard implementation. - * @author martak - * @version - */ -class DirectInputKeyboard extends StandardKeyboard { - - /** - * DIDEVTYPE_ constants from dinput.h header file - */ - private static final int DIDEVTYPEKEYBOARD_UNKNOWN = 0; - private static final int DIDEVTYPEKEYBOARD_PCXT = 1; - private static final int DIDEVTYPEKEYBOARD_OLIVETTI = 2; - private static final int DIDEVTYPEKEYBOARD_PCAT = 3; - private static final int DIDEVTYPEKEYBOARD_PCENH = 4; - private static final int DIDEVTYPEKEYBOARD_NOKIA1050 = 5; - private static final int DIDEVTYPEKEYBOARD_NOKIA9140 = 6; - private static final int DIDEVTYPEKEYBOARD_NEC98 = 7; - private static final int DIDEVTYPEKEYBOARD_NEC98LAPTOP = 8; - private static final int DIDEVTYPEKEYBOARD_NEC98106 = 9; - private static final int DIDEVTYPEKEYBOARD_JAPAN106 = 10; - private static final int DIDEVTYPEKEYBOARD_JAPANAX = 11; - private static final int DIDEVTYPEKEYBOARD_J3100 = 12; - - /** - * Key index crosstable; maps indices into the data array to virtual keys - * in the key array in StandardKeyboard. - * For example, the key F11 is at index 84 in the array of keys in - * StandardKeyboard, yet it is data element 87 (0x57) in our data array. - * <p> - * To access the data element of a particular key (F11), we use the - * crosstable as follows: - * <p><code> - * KeyID f11 = StandardKey.KeyID.F11; - * int keyIndex = f11.getKeyIndex(); // returns 84 - * int crossIndex = CROSSTABLE[keyIndex]; // returns 0x57 (87) - * </code> - * To find a key given the data element index (87), we do a simple search - * through the crosstable starting at that index (index 87/0x57 = 0x65) and - * looking backwards until we find our key itself, or a lower number - * (meaning the key was not found). We can only take advantage of this - * algorithm only because on Windows, our crosstable is in increasing order. - */ - private final static int[] CROSSTABLE = { - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, // _9 - 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, // Y - 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, // D - 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, // BACKSLASH - 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, // RSHIFT - 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, // F7 - 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, // NUMPAD5 - 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x57, 0x58, 0x64, 0x65, // F14 - 0x66, 0x70, 0x79, 0x7B, 0x7D, 0x8D, 0x90, 0x91, 0x92, 0x93, 0x94, // KANJI - 0x95, 0x96, 0x97, 0x9C, 0x9D, 0xB3, 0xB5, 0xB7, 0xB8, 0xC5, 0xC7, // HOME - 0xC8, 0xC9, 0xCB, 0xCD, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xDB, 0xDC, // RWIN - 0xDD, 0xDE, 0xDF // SLEEP - }; - - /** - * Pointer to the IDirectInputDevice for this device - */ - private long lpDevice; - - /** - * Subtype of keyboard, defined by DIDEVTYPE constants - */ - private int subtype; - - /** - * Polling key data - */ - private byte[] keyData = new byte[256]; - - /** - * Private constructor - * @param lpDevice A pointer to the IDirectInputDevice for the device. - * @param subtype The subtype of keyboard, as defined in the DIDEVTYPE - * constants above - * @param productName The product name for the device - * @param instanceName The name of the device - */ - private DirectInputKeyboard(long lpDevice, int subtype, String productName, - String instanceName) { - super(productName + " (" + instanceName + ")"); - this.lpDevice = lpDevice; - this.subtype = subtype; - } - - /** - * Callback to rename a given key by index, name - * @param index the index in the data array - * @param name the name of the key - */ - private void renameKey(int index, String name) { - int keyIndex = index; - if (keyIndex > CROSSTABLE.length) { - keyIndex = CROSSTABLE.length - 1; - } - for (; CROSSTABLE[keyIndex] > index; keyIndex--) - ; - if (CROSSTABLE[keyIndex] == index) { - Axis[] axes = getAxes(); - AbstractAxis key = (AbstractAxis)axes[index]; - if (name != null && name.length() > 0) { - //System.out.println("Renaming key " + key.getName() + - // " to " + name + " index=" + - // index + " keyIndex=" + keyIndex + " CROSSTAB=" + - // CROSSTABLE[keyIndex]); - key.setName(name); - } - } else { - //System.out.println("Key not found " + name + " index=" + index + - // " keyIndex=" + keyIndex + " CROSSTAB=" + - // CROSSTABLE[keyIndex]); - } - } - - /** Polls axes for data. Returns false if the controller is no longer valid. - * Polling reflects the current state of the device when polled. - * @return False if the KB is no longer valid, true otherwise. - */ - public boolean poll() { - return pollNative(lpDevice, keyData); - } - - /** Returns whether or not the given key has been pressed since the last - * call to poll. - * @param key The key whose state to check. - * @return true if this key has changed state since last read of its state, false otherwise. - */ - protected boolean isKeyPressed(Key key) { - KeyID id = (KeyID)key.getIdentifier(); - int keyIndex = id.getKeyIndex(); - int crossIndex = CROSSTABLE[keyIndex]; - return ((keyData[crossIndex] & 0x80) != 0); - } - - /** - * Polls the device; native method - */ - private native boolean pollNative(long lpDevice, byte[] keyData); - - /** - * Renames the keys with the name provided by DirectInput - */ - private native boolean renameKeys(long lpDevice); - - /** Creates a new DirectInputKeyboard (factory method) - * This is a function used internally during set up. - * @param lpDevice A pointer to the IDirectInputDevice for the device. - * @param subtype The subtype of keyboard, as defined in the DIDEVTYPE - * constants above - * @param productName The product name for the keyboard - * @param instanceName The name of the keyboard - * @return The new DirectInputKeyboard object. - */ - public static DirectInputKeyboard createKeyboard(long lpDevice, - int subtype, String productName, String instanceName) { - DirectInputKeyboard ret = new DirectInputKeyboard(lpDevice, subtype, - productName, instanceName); - ret.renameKeys(lpDevice); - return ret; - } -} // class DirectInputKeyboard diff --git a/plugins/DX8/src/java/net/java/games/input/DirectInputMouse.java b/plugins/DX8/src/java/net/java/games/input/DirectInputMouse.java deleted file mode 100644 index 7241414..0000000 --- a/plugins/DX8/src/java/net/java/games/input/DirectInputMouse.java +++ /dev/null @@ -1,352 +0,0 @@ -/* - * %W% %E% - * - * Copyright 2002 Sun Microsystems, Inc. All rights reserved. - * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. - */ -/***************************************************************************** - * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved. - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * - Redistribution of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * - Redistribution in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materails provided with the distribution. - * - * Neither the name Sun Microsystems, Inc. or the names of the contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * This software is provided "AS IS," without a warranty of any kind. - * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING - * ANY IMPLIED WARRANT OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR - * NON-INFRINGEMEN, ARE HEREBY EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN") AND - * ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS - * A RESULT OF USING, MODIFYING OR DESTRIBUTING THIS SOFTWARE OR ITS - * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST - * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, - * INCIDENTAL OR PUNITIVE DAMAGES. HOWEVER CAUSED AND REGARDLESS OF THE THEORY - * OF LIABILITY, ARISING OUT OF THE USE OF OUR INABILITY TO USE THIS SOFTWARE, - * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - * - * You acknowledge that this software is not designed or intended for us in - * the design, construction, operation or maintenance of any nuclear facility - * - *****************************************************************************/ -package net.java.games.input; - -import net.java.games.input.AbstractAxis; -import net.java.games.input.Axis; -import net.java.games.input.Mouse; - -/** - * DirectInput mouse implementation. - * @author martak - * @version - */ -class DirectInputMouse extends Mouse { - - /** - * DIDEVTYPE_ constants from dinput.h header file - */ - private static final int DIDEVTYPEMOUSE_UNKNOWN = 1; - private static final int DIDEVTYPEMOUSE_TRADITIONAL = 2; - private static final int DIDEVTYPEMOUSE_FINGERSTICK = 3; - private static final int DIDEVTYPEMOUSE_TOUCHPAD = 4; - private static final int DIDEVTYPEMOUSE_TRACKBALL = 5; - - /** - * Pointer to the IDirectInputDevice for this device - */ - private long lpDevice; - - /** - * Type of mouse - */ - private Type type; - - /** - * Mouse data - */ - private byte[] mouseData = new byte[20]; - - /** - * Private constructor - * @param lpDevice A pointer to the IDirectInputDevice for the device. - * @param subtype The subtype of mouse, as defined in the DIDEVTYPE - * constants above - * @param productName The product name for the device - * @param instanceName The name of the device - */ - private DirectInputMouse(long lpDevice, int subtype, String productName, - String instanceName) { - super(productName + " " + instanceName); - this.lpDevice = lpDevice; - buttons = new ButtonsImpl(); - ball = new BallImpl(); - switch(subtype) { - case DIDEVTYPEMOUSE_FINGERSTICK: - type = Type.FINGERSTICK; break; - case DIDEVTYPEMOUSE_TOUCHPAD: - type = Type.TRACKPAD; break; - case DIDEVTYPEMOUSE_TRACKBALL: - type = Type.TRACKBALL; break; - case DIDEVTYPEMOUSE_TRADITIONAL: // fall through - case DIDEVTYPEMOUSE_UNKNOWN: // fall through - default: - type = Type.MOUSE; break; - } - renameAxes(lpDevice); - } - - /** - * Callback to rename a given axis by type, name - */ - private void renameAxis(Axis.Identifier id, String name) { - AbstractAxis axis; - if (id instanceof ButtonID) { - axis = (AbstractAxis)getButtons().getAxis(id); - } else { - axis = (AbstractAxis)getBall().getAxis(id); - } - axis.setName(name); - //System.out.println("Renaming " + name); - } - - /** Polls axes for data. Returns false if the controller is no longer valid. - * Polling reflects the current state of the device when polled. - * @return false if the mosue is no lonegr valid, true otherwise. - */ - public boolean poll() { - return pollNative(lpDevice, mouseData); - } - - /** Returns the type of the Controller. - * @return The device type of the controller (logically this - * shoudl be some form of "mouse" .) - */ - public Type getType() { - return type; - } - - /** Creates a new DirectInputMouse (factory method) - * This is a function used internally during set up. - * @param lpDevice A pointer to the IDirectInputDevice for the device. - * @param subtype The subtype of mouse, as defined in the DIDEVTYPE - * constants above - * @param productName The product name for the keyboard - * @param instanceName The name of the keyboard - * @return The new DirectInputMouse object. - */ - public static DirectInputMouse createMouse(long lpDevice, int subtype, - String productName, String instanceName) { - return new DirectInputMouse(lpDevice, subtype, productName, - instanceName); - } - - /** - * Implementation class representing the mouse ball - */ - class BallImpl extends Ball { - - private int numAxes; - - /** - * Public constructor - */ - public BallImpl() { - super(DirectInputMouse.this.getName() + " ball"); - numAxes = getNumAxes(lpDevice); - x = new BallAxis(Axis.Identifier.X); - y = new BallAxis(Axis.Identifier.Y); - if(numAxes > 2) { - wheel = new BallAxis(Axis.Identifier.SLIDER); - } - } - } // class DirectInputMouse.BallImpl - - /** - * Implementation class representing the mouse buttons - */ - class ButtonsImpl extends Buttons { - - private int numButtons; - - /** - * Public constructor - */ - public ButtonsImpl() { - super(DirectInputMouse.this.getName() + " buttons"); - numButtons = getNumButtons(lpDevice); - left = new ButtonImpl(ButtonID.LEFT); - right = new ButtonImpl(ButtonID.RIGHT); - if(numButtons>2) { - middle = new ButtonImpl(ButtonID.MIDDLE); - } - if(numButtons>3) { - side = new ButtonImpl(ButtonID.SIDE); - } - if(numButtons>4) { - extra = new ButtonImpl(ButtonID.EXTRA); - } - if(numButtons>5) { - forward = new ButtonImpl(ButtonID.FORWARD); - } - if(numButtons>6) { - back = new ButtonImpl(ButtonID.BACK); - } - } - } // class DirectInputMouse.ButtonsImpl - - /** - * Polls the device; native method - */ - private native boolean pollNative(long lpDevice, byte[] mouseData); - - /** - * Renames the axes with the name provided by DirectInput - */ - private native boolean renameAxes(long lpDevice); - - // another Endolf special - /** - * Gets the number of buttons the mouse supports - */ - private native int getNumButtons(long lpDevice); - /** - * Gets the number of axes the mouse supports - */ - private native int getNumAxes(long lpDevice); - - /** - * Mouse button axis implementation - */ - class ButtonImpl extends Button { - - /** - * Index into the mouseData array - */ - private final int index; - - /** Public constructor - * @param id An ID of a button to create an obejct to represent. - * - */ - public ButtonImpl(ButtonID id) { - super(id.getName(), id); - if (id == ButtonID.LEFT) { - index = 12; - } else if (id == ButtonID.RIGHT) { - index = 13; - } else if (id == ButtonID.MIDDLE) { - index = 14; - } else if (id == ButtonID.SIDE) { - index = 15; - } else if (id == ButtonID.EXTRA) { - index = 16; - } else if (id == ButtonID.FORWARD) { - index = 17; - } else if (id == ButtonID.BACK) { - index = 18; - } else { - throw new RuntimeException("Unknown button"); - } - } - - /** Returns the data from the last time the control has been polled. - * If this axis is a button, the value returned will be either 0.0f or 1.0f. - * If this axis is normalized, the value returned will be between -1.0f and - * 1.0f. - * @return state of controller. (Note: DX8 mice actually - * queue state so what is returned is the next state, - * not necessarily the most current one.) - */ - public float getPollData() { - // Mouse button - byte data = mouseData[index]; - if ((data & 0x80) != 0) { - return 1.0f; - } else { - return 0.0f; - } - } - - /** Returns <code>true</code> if data returned from <code>poll</code> - * is relative to the last call, or <code>false</code> if data - * is absolute. - * @return true if data is relative, otherwise false. - */ - public boolean isRelative() { - return false; - } - } // class DirectInputMouse.ButtonImpl - - /** - * Mouse ball axis implementation - */ - class BallAxis extends AbstractAxis { - - /** - * Starting index into the mouseData array - */ - private final int index; - - /** Public constructor - * @param id An ID for a mouse axis to create an object to represent. - */ - public BallAxis(Identifier id) { - super(id.getName(), id); - if (id == Identifier.X) { - index = 0; - } else if (id == Identifier.Y) { - index = 4; - } else if (id == Identifier.SLIDER) { - index = 8; - } else { - throw new RuntimeException("Unknown mouse axis"); - } - } - - // Endolf changed this comment, we *are* a mouse axis if we are in here, - // and mouse axes no longer are normalised at all - /** Returns the data from the last time the control has been polled. - * - * @return data The total mouse axis change since the last poll - */ - public float getPollData() { - int data = ((int)mouseData[index+3] << 24) | - ((int)mouseData[index + 2] << 16) | - ((int)mouseData[index + 1] << 8) | - ((int)mouseData[index]); - return (float)data; - } - - /** Returns <code>true</code> if data returned from <code>poll</code> - * is relative to the last call, or <code>false</code> if data - * is absolute. - * @return true if relative, otherwise false. - */ - public boolean isRelative() { - return true; - } - - /** Returns whether or not the axis is analog, or false if it is digital. - * @return true if analog, false if digital - */ - public boolean isAnalog() { - return true; - } - - /** Returns whether or not data polled from this axis is normalized between the values of -1.0f and 1.0f. - * - * @return true if normalized, otherwise false. - */ - public boolean isNormalized() { - return false; - } - - } // class DirectInputMouse.MouseBallAxis -} // class DirectInputMouse diff --git a/plugins/DX8/src/java/net/java/games/input/DirectInputRumbler.java b/plugins/DX8/src/java/net/java/games/input/DirectInputRumbler.java deleted file mode 100644 index 444bf02..0000000 --- a/plugins/DX8/src/java/net/java/games/input/DirectInputRumbler.java +++ /dev/null @@ -1,101 +0,0 @@ -/** - * Copyright (C) 2003 Jeremy Booth ([email protected]) - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. Redistributions in binary - * form must reproduce the above copyright notice, this list of conditions and - * the following disclaimer in the documentation and/or other materials provided - * with the distribution. - * The name of the author may not be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE - */ -package net.java.games.input; - -/** - * Implementation of the Rumbler interface for direct x - * - * @author Endolf - */ -public class DirectInputRumbler implements Rumbler { - - /** The parent device */ - private DirectInputDevice device; - /** The native effect */ - private long effect; - /** The identifier of the axis we are attached too */ - private Axis.Identifier axisID; - /** The name of the axis this rumbler is attached too */ - private String axisName; - - /** - * Creates a new instance of DirectInputRumbler - * - * @param device The parent device - * @param effect The native effect - * @param axisID The id of the axis this rumbler is attached too - * @param axisName The name of the axis this rumbler is attached too - */ - public DirectInputRumbler(DirectInputDevice device, long effect, Axis.Identifier axisID, String axisName) { - this.device = device; - this.effect = effect; - this.axisID = axisID; - this.axisName = axisName; - } - - /** - * Gets the identifier of the axis this rumbler is attached too - * - * @return The axis id - */ - public Axis.Identifier getAxisIdentifier() { - return axisID; - } - - /** - * Gets the name of the axis this rumbler is attached too - * - * @return The axis name - */ - public String getAxisName() { - return axisName; - } - - /** - * Rumbles this rumbler at the given intensity. - * This will start or stop the effect if necesary. - * The intensity is in the range of -1 to 1 and will be clipped if values - * outside that range are provided. - * - * @param intensity The intensity - */ - public void rumble(float intensity) { - if(intensity>1f) { - intensity = 1.0f; - } else if(intensity<-1f) { - intensity = -1.0f; - } - setRumble(effect, intensity); - } - - /** - * Performs the native call(s) to run the effect - * - * @param effect The native effect - * @param intensity The intensity of the rumble - */ - private native void setRumble(long effect, float intensity); -} diff --git a/plugins/DX8/src/native/input.cpp b/plugins/DX8/src/native/input.cpp deleted file mode 100644 index c4eb7af..0000000 --- a/plugins/DX8/src/native/input.cpp +++ /dev/null @@ -1,1114 +0,0 @@ -/* - * %W% %E% - * - * Copyright 2002 Sun Microsystems, Inc. All rights reserved. - * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. - */ - -#ifndef WIN32 - #error This is a Windows-only file -#endif - -// hard define as DX7 -//#define DIRECTINPUT_VERSION 0x0800 -#include <windows.h> -#include <jni.h> -#include <dinput.h> - - -/* - ****************************************************************************** - * Global variables - ****************************************************************************** - */ -jclass CLASS_AxisIdentifier = NULL; -jclass CLASS_ButtonIdentifier = NULL; -jclass CLASS_DirectInputEnvironmentPlugin = NULL; -jclass CLASS_DirectInputDevice = NULL; -jclass CLASS_DirectInputKeyboard = NULL; -jclass CLASS_DirectInputMouse = NULL; -jmethodID MID_AddDevice = NULL; -jmethodID MID_AddAxis = NULL; -jmethodID MID_AddRumbler = NULL; -jmethodID MID_RenameKey = NULL; -jmethodID MID_RenameAxis = NULL; -jfieldID FID_X = NULL; -jfieldID FID_Y = NULL; -jfieldID FID_Z = NULL; -jfieldID FID_RX = NULL; -jfieldID FID_RY = NULL; -jfieldID FID_RZ = NULL; -jfieldID FID_Slider = NULL; -jfieldID FID_Button = NULL; -jfieldID FID_POV = NULL; -jfieldID FID_Left = NULL; -jfieldID FID_Right = NULL; -jfieldID FID_Middle = NULL; -jfieldID FID_Extra = NULL; -jfieldID FID_Side = NULL; -jfieldID FID_Forward = NULL; -jfieldID FID_Back = NULL; - -const char* FD_AxisIdentifier = "Lnet/java/games/input/Axis$Identifier;"; -const char* FD_ButtonIdentifier = "Lnet/java/games/input/Mouse$ButtonID;"; -// Dummy input window. This is needed because DirectX evidently needs a window -// to do anything, such as setting the cooperative level for a device. -const TCHAR* DUMMY_WINDOW_NAME = "InputControllerWindow"; -HWND hwndDummy = NULL; -// Buffer size -// Endolf changed the name as it is specific to the mouse -// Endolf increased the size as he kept making it go pop -const DWORD MOUSE_BUFFER_SIZE = 32; - -// Class for handing device data to the callback for EnumDevices -class DeviceParamData { -public: - DeviceParamData(LPDIRECTINPUT8 lpdi, JNIEnv* e, jobject o, jobject l) : - lpDirectInput(lpdi), env(e), obj(o), list(l) - { - } - LPDIRECTINPUT8 lpDirectInput; - JNIEnv* env; - jobject obj; - jobject list; -}; - -// Class for handing device data to the callback for EnumObjects -class ObjectParamData { -public: - ObjectParamData(LPDIRECTINPUTDEVICE8 lpDev, JNIEnv* e, jobject o, - jobject l) : - lpDevice(lpDev), env(e), obj(o), list(l) - { - } - LPDIRECTINPUTDEVICE8 lpDevice; - JNIEnv* env; - jobject obj; - jobject list; -}; - -void PrintOutput(TCHAR* tszMessage) { - printf("%s\n", tszMessage); -} - -void PrintDIError(TCHAR* tszOutput, HRESULT res) { - TCHAR tszMessage[256]; -#define CHECK_RESULT(r) case r: \ -sprintf(tszMessage, "%s : %s", tszOutput, #r); \ -break; - switch (res) { - CHECK_RESULT(DI_OK) - CHECK_RESULT(DI_NOTATTACHED) - CHECK_RESULT(DI_POLLEDDEVICE) - CHECK_RESULT(DI_DOWNLOADSKIPPED) - CHECK_RESULT(DI_EFFECTRESTARTED) - CHECK_RESULT(DI_TRUNCATED) - CHECK_RESULT(DI_TRUNCATEDANDRESTARTED) - CHECK_RESULT(DIERR_OLDDIRECTINPUTVERSION) - CHECK_RESULT(DIERR_BETADIRECTINPUTVERSION) - CHECK_RESULT(DIERR_BADDRIVERVER) - CHECK_RESULT(DIERR_DEVICENOTREG) - CHECK_RESULT(DIERR_NOTFOUND) - //CHECK_RESULT(DIERR_OBJECTNOTFOUND) - CHECK_RESULT(DIERR_INVALIDPARAM) - CHECK_RESULT(DIERR_NOINTERFACE) - CHECK_RESULT(DIERR_GENERIC) - CHECK_RESULT(DIERR_OUTOFMEMORY) - CHECK_RESULT(DIERR_UNSUPPORTED) - CHECK_RESULT(DIERR_NOTINITIALIZED) - CHECK_RESULT(DIERR_ALREADYINITIALIZED) - CHECK_RESULT(DIERR_NOAGGREGATION) - CHECK_RESULT(DIERR_OTHERAPPHASPRIO) - CHECK_RESULT(DIERR_INPUTLOST) - CHECK_RESULT(DIERR_ACQUIRED) - CHECK_RESULT(DIERR_NOTACQUIRED) - //CHECK_RESULT(DIERR_READONLY) - //CHECK_RESULT(DIERR_HANDLEEXISTS) - CHECK_RESULT(DIERR_INSUFFICIENTPRIVS) - CHECK_RESULT(DIERR_DEVICEFULL) - CHECK_RESULT(DIERR_MOREDATA) - CHECK_RESULT(DIERR_NOTDOWNLOADED) - CHECK_RESULT(DIERR_HASEFFECTS) - CHECK_RESULT(DIERR_NOTEXCLUSIVEACQUIRED) - CHECK_RESULT(DIERR_INCOMPLETEEFFECT) - CHECK_RESULT(DIERR_NOTBUFFERED) - CHECK_RESULT(DIERR_EFFECTPLAYING) - CHECK_RESULT(DIERR_UNPLUGGED) - CHECK_RESULT(DIERR_REPORTFULL) - default: sprintf(tszMessage, "Unknown"); break; - } - PrintOutput(tszMessage); -} - -/* - ****************************************************************************** - * DirectInputEnvironmentPlugin - ****************************************************************************** - */ - -/* - * Initialize all class, method, and field IDs - */ -BOOL InitIDs(JNIEnv* env) { - CLASS_AxisIdentifier = - env->FindClass("net/java/games/input/Axis$Identifier"); - if (CLASS_AxisIdentifier == NULL) { - return FALSE; - } - FID_X = env->GetStaticFieldID(CLASS_AxisIdentifier, "X", - FD_AxisIdentifier); - if (FID_X == NULL) { - return FALSE; - } - FID_Y = env->GetStaticFieldID(CLASS_AxisIdentifier, "Y", - FD_AxisIdentifier); - if (FID_Y == NULL) { - return FALSE; - } - FID_Z = env->GetStaticFieldID(CLASS_AxisIdentifier, "Z", - FD_AxisIdentifier); - if (FID_Z == NULL) { - return FALSE; - } - FID_RX = env->GetStaticFieldID(CLASS_AxisIdentifier, "RX", - FD_AxisIdentifier); - if (FID_RX == NULL) { - return FALSE; - } - FID_RY = env->GetStaticFieldID(CLASS_AxisIdentifier, "RY", - FD_AxisIdentifier); - if (FID_RY == NULL) { - return FALSE; - } - FID_RZ = env->GetStaticFieldID(CLASS_AxisIdentifier, "RZ", - FD_AxisIdentifier); - if (FID_RZ == NULL) { - return FALSE; - } - FID_Slider = env->GetStaticFieldID(CLASS_AxisIdentifier, "SLIDER", - FD_AxisIdentifier); - if (FID_Slider == NULL) { - return FALSE; - } - FID_Button = env->GetStaticFieldID(CLASS_AxisIdentifier, "BUTTON", - FD_AxisIdentifier); - if (FID_Button == NULL) { - return FALSE; - } - FID_POV = env->GetStaticFieldID(CLASS_AxisIdentifier, "POV", - FD_AxisIdentifier); - if (FID_POV == NULL) { - return FALSE; - } - CLASS_ButtonIdentifier = - env->FindClass("net/java/games/input/Mouse$ButtonID"); - if (CLASS_ButtonIdentifier == NULL) { - return FALSE; - } - FID_Left = env->GetStaticFieldID(CLASS_ButtonIdentifier, "LEFT", - FD_ButtonIdentifier); - if (FID_Left == NULL) { - return FALSE; - } - FID_Right = env->GetStaticFieldID(CLASS_ButtonIdentifier, "RIGHT", - FD_ButtonIdentifier); - if (FID_Right == NULL) { - return FALSE; - } - FID_Middle = env->GetStaticFieldID(CLASS_ButtonIdentifier, "MIDDLE", - FD_ButtonIdentifier); - if (FID_Middle == NULL) { - return FALSE; - } -// Endolf - FID_Side = env->GetStaticFieldID(CLASS_ButtonIdentifier, "SIDE", - FD_ButtonIdentifier); - if (FID_Side == NULL) { - return FALSE; - } - FID_Extra = env->GetStaticFieldID(CLASS_ButtonIdentifier, "EXTRA", - FD_ButtonIdentifier); - if (FID_Extra == NULL) { - return FALSE; - } - FID_Forward = env->GetStaticFieldID(CLASS_ButtonIdentifier, "FORWARD", - FD_ButtonIdentifier); - if (FID_Forward == NULL) { - return FALSE; - } - FID_Back = env->GetStaticFieldID(CLASS_ButtonIdentifier, "BACK", - FD_ButtonIdentifier); - if (FID_Back == NULL) { - return FALSE; - } - - CLASS_DirectInputEnvironmentPlugin = - env->FindClass("net/java/games/input/DirectInputEnvironmentPlugin"); - if (CLASS_DirectInputEnvironmentPlugin == NULL) { - return FALSE; - } - MID_AddDevice = env->GetMethodID(CLASS_DirectInputEnvironmentPlugin, "addDevice", - "(Ljava/util/ArrayList;JILjava/lang/String;Ljava/lang/String;Z)V"); - if (MID_AddDevice == NULL) { - return FALSE; - } - CLASS_DirectInputDevice = - env->FindClass("net/java/games/input/DirectInputDevice"); - if (CLASS_DirectInputDevice == NULL) { - return FALSE; - } - MID_AddAxis = env->GetMethodID(CLASS_DirectInputDevice, "addAxis", - "(Ljava/util/ArrayList;Lnet/java/games/input/Axis$Identifier;ILjava/lang/String;)V"); - if (MID_AddAxis == NULL) { - return FALSE; - } - MID_AddRumbler = env->GetMethodID(CLASS_DirectInputDevice, "addRumbler", - "(JLnet/java/games/input/Axis$Identifier;Ljava/lang/String;)V"); - if (MID_AddRumbler == NULL) { - return FALSE; - } - CLASS_DirectInputKeyboard = - env->FindClass("net/java/games/input/DirectInputKeyboard"); - if (CLASS_DirectInputKeyboard == NULL) { - return FALSE; - } - MID_RenameKey = env->GetMethodID(CLASS_DirectInputKeyboard, "renameKey", - "(ILjava/lang/String;)V"); - if (MID_RenameKey == NULL) { - return FALSE; - } - CLASS_DirectInputMouse = - env->FindClass("net/java/games/input/DirectInputMouse"); - if (CLASS_DirectInputMouse == NULL) { - return FALSE; - } - MID_RenameAxis = env->GetMethodID(CLASS_DirectInputMouse, "renameAxis", - "(Lnet/java/games/input/Axis$Identifier;Ljava/lang/String;)V"); - if (MID_RenameAxis == NULL) { - return FALSE; - } - return TRUE; -} - -/* - * WndProc for our dummy input window - */ -LRESULT CALLBACK DummyWndProc( - HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - return DefWindowProc(hWnd, message, wParam, lParam); -} - -/* - * Register the dummy input window class - */ -BOOL RegisterDummyWindow(HINSTANCE hInstance) -{ - WNDCLASSEX wcex; - wcex.cbSize = sizeof(WNDCLASSEX); - wcex.style = CS_HREDRAW | CS_VREDRAW; - wcex.lpfnWndProc = (WNDPROC)DummyWndProc; - wcex.cbClsExtra = 0; - wcex.cbWndExtra = 0; - wcex.hInstance = hInstance; - wcex.hIcon = NULL; - wcex.hCursor = NULL; - wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); - wcex.lpszMenuName = (LPCSTR)NULL; - wcex.lpszClassName = DUMMY_WINDOW_NAME; - wcex.hIconSm = NULL; - return RegisterClassEx(&wcex); -} - -/* - * Class: org_java_games_input_DirectInputEnvironmentPlugin - * Method: directInputCreate - * Signature: ()J - */ -extern "C" JNIEXPORT jlong JNICALL -Java_net_java_games_input_DirectInputEnvironmentPlugin_directInputCreate - (JNIEnv* env, jobject obj) -{ - // Get our module handle - HINSTANCE hInst = GetModuleHandle(NULL); - - // Register the dummy input window - if (!RegisterDummyWindow(hInst)) { - return (jlong)0; - } - - // Create the dummy input window - hwndDummy = CreateWindow(DUMMY_WINDOW_NAME, NULL, - WS_POPUP | WS_ICONIC, - 0, 0, 0, 0, NULL, NULL, hInst, NULL); - if (hwndDummy == NULL) - { - return (jlong)0; - } - - // Create the IDirectInput object - DWORD dwVersion = DIRECTINPUT_VERSION; - LPDIRECTINPUT8 lpDirectInput = NULL; - HRESULT res; - if (FAILED(res = DirectInput8Create(hInst, DIRECTINPUT_VERSION, - IID_IDirectInput8,(VOID **)&lpDirectInput, NULL))){ - PrintDIError("DirectInputCreate", res); - return (jlong)0; - } - - // Initialize method, class, and field IDs - if (!InitIDs(env)) { - lpDirectInput->Release(); - return (jlong)0; - } - - return (jlong)(long)lpDirectInput; -} - -BOOL CALLBACK CountFFAxesCallback( const DIDEVICEOBJECTINSTANCE* pdidoi, - VOID* pContext ) -{ - DWORD* pdwNumForceFeedbackAxis = (DWORD*) pContext; - - if( (pdidoi->dwFlags & DIDOI_FFACTUATOR) != 0 ) { - //printf("%s is ff enabled\n", pdidoi->tszName); - (*pdwNumForceFeedbackAxis)++; - } - - return DIENUM_CONTINUE; -} - -/* - * Enumeration callback for devices - * - * returns DIENUM_CONTINUE or DIENUM_STOP - */ - -/** jeff's new enum callback */ -BOOL CALLBACK EnumDeviceCallback(LPCDIDEVICEINSTANCE lpddi, LPVOID pvRef) -{ - DeviceParamData* pData = (DeviceParamData*)pvRef; - LPDIRECTINPUT8 lpDirectInput = pData->lpDirectInput; - JNIEnv* env = pData->env; - jobject obj = pData->obj; - jobject list = pData->list; - LPDIRECTINPUTDEVICE8 lpDevice = NULL; - LPUNKNOWN pUnknown = NULL; - HRESULT res; - - // Create the device object - if (FAILED(res = lpDirectInput->CreateDevice(lpddi->guidInstance, &lpDevice, - pUnknown))){ - PrintDIError("CreateDevice", res); - return DIENUM_STOP; - } - - /* - LPDIRECTINPUTDEVICE8 lpDevice2 = NULL; - // Get the IDirectDrawDevice8 interface from the object - res = lpDevice->QueryInterface(IID_IDirectInputDevice8, - (void**)&lpDevice2); - if (res != DI_OK) { - PrintDIError("QueryInterface DID2", res); - lpDevice->Release(); - return DIENUM_STOP; - } - */ - - //find out if this device is ff enabled - DWORD numForceFeedbackAxis = 0; - res = lpDevice->EnumObjects( CountFFAxesCallback, - (VOID*)&numForceFeedbackAxis, DIDFT_AXIS ); - if(FAILED(res)) { - PrintDIError("getting ff devices", res); - } - - // Set the data format - LPCDIDATAFORMAT lpDataFormat; - DWORD category = GET_DIDEVICE_TYPE(lpddi->dwDevType)&0xFF; - switch (category){ - case DI8DEVTYPE_KEYBOARD: - //printf("found Keyboard\n"); - lpDataFormat = &c_dfDIKeyboard; - break; - case DI8DEVTYPE_MOUSE: - //printf("found mouse\n"); - lpDataFormat = &c_dfDIMouse2; - // set up buffering - DIPROPDWORD dipropdw; - dipropdw.diph.dwSize = sizeof(DIPROPDWORD); - dipropdw.diph.dwHeaderSize = sizeof(DIPROPHEADER); - dipropdw.diph.dwObj = 0; - dipropdw.diph.dwHow = DIPH_DEVICE; - dipropdw.dwData = MOUSE_BUFFER_SIZE; - if (FAILED( - res = lpDevice->SetProperty(DIPROP_BUFFERSIZE, - &dipropdw.diph))) { - PrintDIError("SetProperty", res); - lpDevice->Release(); - return DIENUM_STOP; - } - break; - case DI8DEVTYPE_JOYSTICK: - default: - //printf("found stick\n"); - lpDataFormat = &c_dfDIJoystick; - break; - } - - if (FAILED(res = lpDevice->SetDataFormat(lpDataFormat))){ - PrintDIError("SetDataFormat", res); - lpDevice->Release(); - return DIENUM_STOP; - } - - if(numForceFeedbackAxis>0) { - // Set the cooperative level - if(FAILED(res = lpDevice->SetCooperativeLevel(hwndDummy, - DISCL_EXCLUSIVE | DISCL_BACKGROUND))){ - PrintDIError("SetCooperativeLevel", res); - lpDevice->Release(); - return DIENUM_STOP; - } - } else { - // Set the cooperative level - if(FAILED(res = lpDevice->SetCooperativeLevel(hwndDummy, - DISCL_NONEXCLUSIVE | DISCL_BACKGROUND))){ - PrintDIError("SetCooperativeLevel", res); - lpDevice->Release(); - return DIENUM_STOP; - } - } - - // get polling - DIDEVCAPS didc; - // Allocate space for all the device's objects (axes, buttons, POVS) - ZeroMemory( &didc, sizeof(DIDEVCAPS) ); - didc.dwSize = sizeof(DIDEVCAPS); - if (FAILED(res=lpDevice->GetCapabilities(&didc))){ - PrintDIError("Get Device Capabilities", res); - lpDevice->Release(); - return DIENUM_STOP; - } - jboolean polled = JNI_FALSE; - if ((didc.dwFlags)&DIDC_POLLEDDATAFORMAT) { - polled = JNI_TRUE; - } - - // Acquire the device - if(FAILED(res = lpDevice->Acquire())){ - PrintDIError("Acquire", res); - lpDevice->Release(); - return DIENUM_STOP; - } - - // Set the variables for the Java callback - jint type = (jint)lpddi->dwDevType&0xffff; - //printf("type == %x\n",type); - jstring productName = env->NewStringUTF(lpddi->tszProductName); - if (productName == NULL) { - lpDevice->Release(); - return DIENUM_STOP; - } - jstring instanceName = env->NewStringUTF(lpddi->tszInstanceName); - if (instanceName == NULL) { - lpDevice->Release(); - return DIENUM_STOP; - } - - // Add the device into the list - env->CallVoidMethod(obj, MID_AddDevice, list, (jlong)(long)lpDevice, type, - productName, instanceName,(jboolean)polled); - return DIENUM_CONTINUE; -} - -/* - * Class: org_java_games_input_DirectInputEnvironmentPlugin - * Method: enumDevices - * Signature: (JLjava/util/ArrayList;)Z - */ -extern "C" JNIEXPORT jboolean JNICALL -Java_net_java_games_input_DirectInputEnvironmentPlugin_enumDevices - (JNIEnv* env, jobject obj, jlong lDirectInput, jobject list) -{ - LPDIRECTINPUT8 lpDirectInput = (LPDIRECTINPUT8)(long)lDirectInput; - DWORD dwDevType = DI8DEVCLASS_ALL; - DeviceParamData data(lpDirectInput, env, obj, list); - LPVOID pvRef = (LPVOID)&data; - DWORD dwFlags = DIEDFL_ATTACHEDONLY; - HRESULT res; - if(FAILED(res=lpDirectInput->EnumDevices(dwDevType, - EnumDeviceCallback, pvRef, dwFlags))){ - PrintDIError("EnumDevices", res); - return JNI_FALSE; - } - return JNI_TRUE; -} - -/* - ****************************************************************************** - * DirectInputDevice - ****************************************************************************** - */ - -/* - * Class: org_java_games_input_DirectInputDevice - * Method: pollNative - * Signature: (J[B)Z - */ -extern "C" JNIEXPORT jboolean JNICALL -Java_net_java_games_input_DirectInputDevice_pollNative - (JNIEnv* env, jobject obj, jlong lDevice, jintArray baData, - jboolean pollme) -{ - LPDIRECTINPUTDEVICE8 lpDevice = (LPDIRECTINPUTDEVICE8)(long)lDevice; - // Reacquire the device - HRESULT res = lpDevice->Acquire(); - if (res != DI_OK && res != S_FALSE) { - PrintDIError("Acquire", res); - return JNI_FALSE; - } - // Poll the device - if (pollme == JNI_TRUE) { - res = lpDevice->Poll(); - // Changed this to FAILED(res) instead of res != DI_OK as it was - // causeing problems and the dx samples check for FAILED too. - if ( FAILED(res) ) { - PrintDIError("Poll", res); - return JNI_FALSE; - } - } - // Get the device state (data) - DIJOYSTATE data; - res = lpDevice->GetDeviceState(sizeof(data), &data); - if (res != DI_OK) { - PrintDIError("GetDeviceState", res); - return JNI_FALSE; - } - // Copy the data into the byte array - env->SetIntArrayRegion(baData, 0, (jsize)(sizeof(data)/4), (jint*)&data); - return JNI_TRUE; -} - -/* - * Enumeration callback for device objects - * - * returns DIENUM_CONTINUE or DIENUM_STOP - */ -BOOL CALLBACK EnumObjectsCallback(LPCDIDEVICEOBJECTINSTANCE lpddoi, - LPVOID pvRef) -{ - ObjectParamData* pData = (ObjectParamData*)pvRef; - LPDIRECTINPUTDEVICE8 lpDevice = pData->lpDevice; - JNIEnv* env = pData->env; - jobject obj = pData->obj; - jobject list = pData->list; - jobject identifier = NULL; - char ffEnabled = 0; - - HRESULT res; - if (lpddoi->guidType == GUID_XAxis) { - identifier = env->GetStaticObjectField(CLASS_AxisIdentifier, FID_X); - } else if (lpddoi->guidType == GUID_YAxis) { - identifier = env->GetStaticObjectField(CLASS_AxisIdentifier, FID_Y); - } else if (lpddoi->guidType == GUID_ZAxis) { - identifier = env->GetStaticObjectField(CLASS_AxisIdentifier, FID_Z); - } else if (lpddoi->guidType == GUID_RxAxis) { - identifier = env->GetStaticObjectField(CLASS_AxisIdentifier, FID_RX); - } else if (lpddoi->guidType == GUID_RyAxis) { - identifier = env->GetStaticObjectField(CLASS_AxisIdentifier, FID_RY); - } else if (lpddoi->guidType == GUID_RzAxis) { - identifier = env->GetStaticObjectField(CLASS_AxisIdentifier, FID_RZ); - } else if (lpddoi->guidType == GUID_Slider) { - identifier = env->GetStaticObjectField(CLASS_AxisIdentifier, FID_Slider); - } else if (lpddoi->guidType == GUID_Button) { - identifier = env->GetStaticObjectField(CLASS_AxisIdentifier, FID_Button); - } else if (lpddoi->guidType == GUID_POV) { - identifier = env->GetStaticObjectField(CLASS_AxisIdentifier, FID_POV); - } else { - // Do not add this axis into the list, since we don't know what it is - return DIENUM_CONTINUE; - } - if (identifier == NULL) { - return DIENUM_STOP; - } - if (DIDFT_GETTYPE(lpddoi->dwType)&DIDFT_AXIS){ - // set axis range - DIPROPRANGE joy_axis_range; - joy_axis_range.lMin = -32768; - joy_axis_range.lMax = 32768; - joy_axis_range.diph.dwSize=sizeof(DIPROPRANGE); - joy_axis_range.diph.dwHeaderSize=sizeof(DIPROPHEADER); - joy_axis_range.diph.dwHow = DIPH_BYID; - joy_axis_range.diph.dwObj=lpddoi->dwType; - if (FAILED( - res=lpDevice->SetProperty(DIPROP_RANGE,&joy_axis_range.diph))){ - PrintDIError("SetProperty", res); - } - - //check if this axis is ff enabled - if( (lpddoi->dwFlags & DIDOI_FFACTUATOR) != 0 ) { - //printf("%s is ff enabled\n", lpddoi->tszName); - ffEnabled = 1; - } - } - - jint didft = (jint)lpddoi->dwType; - jstring name = env->NewStringUTF(lpddoi->tszName); - // Add the axis into our list - env->CallVoidMethod(obj, MID_AddAxis, list, identifier, didft, - name); - - if(ffEnabled) { - // This application needs only one effect: Applying raw forces. - DWORD rgdwAxes; - LONG rglDirection = 0; - if(lpddoi->guidType == GUID_XAxis) { - //printf("effect is in the x axis\n"); - rgdwAxes = DIJOFS_X; - } else if(lpddoi->guidType == GUID_YAxis) { - //printf("effect is in the y axis\n"); - rgdwAxes = DIJOFS_Y; - } else if(lpddoi->guidType == GUID_ZAxis) { - //printf("effect is in the z axis\n"); - rgdwAxes = DIJOFS_Z; - } - - DICONSTANTFORCE cf = { DI_FFNOMINALMAX }; - - DIEFFECT eff; - ZeroMemory( &eff, sizeof(eff) ); - eff.dwSize = sizeof(DIEFFECT); - eff.dwFlags = DIEFF_CARTESIAN | DIEFF_OBJECTOFFSETS; - eff.dwDuration = INFINITE; - eff.dwSamplePeriod = 0; - eff.dwGain = DI_FFNOMINALMAX; - eff.dwTriggerButton = DIEB_NOTRIGGER; - eff.dwTriggerRepeatInterval = 0; - eff.cAxes = 1; - eff.rgdwAxes = &rgdwAxes; - eff.rglDirection = &rglDirection; - eff.lpEnvelope = 0; - eff.cbTypeSpecificParams = sizeof(DICONSTANTFORCE); - eff.lpvTypeSpecificParams = &cf; - eff.dwStartDelay = 0; - cf.lMagnitude = (long) (0); - - LPDIRECTINPUTEFFECT g_pEffect; - // Create the prepared effect - if( FAILED( res = lpDevice->CreateEffect( GUID_ConstantForce, - &eff, &g_pEffect, NULL ) ) ) - { - PrintDIError("Create effect", res); - return res; - } - - env->CallVoidMethod(obj, MID_AddRumbler, (jlong)(long)g_pEffect, identifier, name); - } - return DIENUM_CONTINUE; -} - -/* - * Class: org_java_games_input_DirectInputRumbler - * Method setRumble - * Signature (JF)Z - */ -extern "C" JNIEXPORT jboolean JNICALL -Java_net_java_games_input_DirectInputRumbler_setRumble - (JNIEnv *env, jobject obj, jlong effect, jfloat value) -{ - LPDIRECTINPUTEFFECT g_pEffect = (LPDIRECTINPUTEFFECT)(long)effect; - float force = (float)value; - HRESULT hr; - - DICONSTANTFORCE cf = { DI_FFNOMINALMAX }; - - DIEFFECT eff; - ZeroMemory( &eff, sizeof(eff) ); - eff.dwSize = sizeof(DIEFFECT); - eff.cbTypeSpecificParams = sizeof(DICONSTANTFORCE); - eff.lpvTypeSpecificParams = &cf; - cf.lMagnitude = (long) (((float)DI_FFNOMINALMAX)*force); - - //printf("force: %f, mag: %d\n", force, cf.lMagnitude); - - hr = g_pEffect->SetParameters( &eff, DIEP_TYPESPECIFICPARAMS ); - if (FAILED(hr)) { - PrintDIError("set parameters", hr); - return hr; - } - - if(force!=0) { - hr = g_pEffect->Start(1,0); - if (FAILED(hr)) { - PrintDIError("start", hr); - return hr; - } - } else { - hr = g_pEffect->Stop(); - if (FAILED(hr)) { - PrintDIError("stop", hr); - return hr; - } - } -} - -/* - * Class: org_java_games_input_DirectInputDevice - * Method: enumObjects - * Signature: (JLjava/util/ArrayList;)Z - */ -extern "C" JNIEXPORT jboolean JNICALL -Java_net_java_games_input_DirectInputDevice_enumObjects - (JNIEnv* env, jobject obj, jlong lDevice, jobject list) -{ - LPDIRECTINPUTDEVICE8 lpDevice = (LPDIRECTINPUTDEVICE8)(long)lDevice; - ObjectParamData data(lpDevice, env, obj, list); - LPVOID pvRef = (LPVOID)&data; - DWORD dwFlags = DIDFT_ALL; - // Enum objects - HRESULT res = lpDevice->EnumObjects(EnumObjectsCallback, pvRef, dwFlags); - if (res != DI_OK) { - PrintDIError("EnumObjects", res); - return JNI_FALSE; - } - return JNI_TRUE; -} - -/* - ****************************************************************************** - * DirectInputKeyboard - ****************************************************************************** - */ - -/* - * Class: org_java_games_input_DirectInputKeyboard - * Method: pollNative - * Signature: (J[B)Z - */ -extern "C" JNIEXPORT jboolean JNICALL -Java_net_java_games_input_DirectInputKeyboard_pollNative - (JNIEnv* env, jobject obj, jlong lDevice, jbyteArray baData) -{ - LPDIRECTINPUTDEVICE8 lpDevice = (LPDIRECTINPUTDEVICE8)(long)lDevice; - // Reacquire the device - HRESULT res = lpDevice->Acquire(); - if (res != DI_OK && res != S_FALSE) { - PrintDIError("Acquire", res); - return JNI_FALSE; - } - // Get the device state (data) - char data[256]; - res = lpDevice->GetDeviceState(sizeof(data), data); - if (res != DI_OK) { - PrintDIError("GetDeviceState", res); - return JNI_FALSE; - } - env->SetByteArrayRegion(baData, 0, (jsize)sizeof(data), (jbyte*)&data); - return JNI_TRUE; -} - -/* - * Enumeration callback to rename keyboard keys - * - * returns DIENUM_CONTINUE or DIENUM_STOP - */ -BOOL CALLBACK RenameKeysCallback(LPCDIDEVICEOBJECTINSTANCE lpddoi, - LPVOID pvRef) -{ - ObjectParamData* pData = (ObjectParamData*)pvRef; - //LPDIRECTINPUTDEVICE8 lpDevice = pData->lpDevice; - JNIEnv* env = pData->env; - jobject obj = pData->obj; - jint index = (jint)lpddoi->dwOfs; - jstring name = env->NewStringUTF(lpddoi->tszName); - env->CallVoidMethod(obj, MID_RenameKey, index, name); - return DIENUM_CONTINUE; -} - -/* - * Class: org_java_games_input_DirectInputKeyboard - * Method: renameKeys - * Signature: (J)Z - */ -extern "C" JNIEXPORT jboolean JNICALL -Java_net_java_games_input_DirectInputKeyboard_renameKeys - (JNIEnv* env, jobject obj, jlong lDevice) -{ - LPDIRECTINPUTDEVICE8 lpDevice = (LPDIRECTINPUTDEVICE8)(long)lDevice; - ObjectParamData data(lpDevice, env, obj, NULL); - LPVOID pvRef = (LPVOID)&data; - DWORD dwFlags = DIDFT_ALL; - // Enum objects - HRESULT res = lpDevice->EnumObjects(RenameKeysCallback, pvRef, dwFlags); - if (res != DI_OK) { - PrintDIError("EnumObjects", res); - return JNI_FALSE; - } - return JNI_TRUE; -} - -/* - ****************************************************************************** - * DirectInputMouse - ****************************************************************************** - */ - -/* - * Class: org_java_games_input_DirectInputMouse - * Method: getNumAxes - * Signature: (J)I - */ -extern "C" JNIEXPORT jint JNICALL -Java_net_java_games_input_DirectInputMouse_getNumAxes - (JNIEnv* env, jobject obj, jlong lDevice) -{ - LPDIRECTINPUTDEVICE8 lpDevice = (LPDIRECTINPUTDEVICE8)(long)lDevice; - // Reacquire the device - HRESULT res = lpDevice->Acquire(); - if (res != DI_OK && res != S_FALSE) { - PrintDIError("Acquire", res); - return 0; - } - DIDEVCAPS deviceCaps; - // Allocate space for all the device's objects (axes, buttons, POVS) - ZeroMemory( &deviceCaps, sizeof(DIDEVCAPS) ); - deviceCaps.dwSize = sizeof(DIDEVCAPS); - res = lpDevice->GetCapabilities(&deviceCaps); - if(res != DI_OK) { - PrintDIError("GetCapabilities", res); - return JNI_FALSE; - } - return deviceCaps.dwAxes; -} - -/* - * Class: org_java_games_input_DirectInputMouse - * Method: getNumButtons - * Signature: (J)I - */ -extern "C" JNIEXPORT jint JNICALL -Java_net_java_games_input_DirectInputMouse_getNumButtons - (JNIEnv* env, jobject obj, jlong lDevice) -{ - LPDIRECTINPUTDEVICE8 lpDevice = (LPDIRECTINPUTDEVICE8)(long)lDevice; - // Reacquire the device - HRESULT res = lpDevice->Acquire(); - if (res != DI_OK && res != S_FALSE) { - PrintDIError("Acquire", res); - return 0; - } - DIDEVCAPS deviceCaps; - // Allocate space for all the device's objects (axes, buttons, POVS) - ZeroMemory( &deviceCaps, sizeof(DIDEVCAPS) ); - deviceCaps.dwSize = sizeof(DIDEVCAPS); - res = lpDevice->GetCapabilities(&deviceCaps); - if(res != DI_OK) { - PrintDIError("GetCapabilities", res); - return JNI_FALSE; - } - return deviceCaps.dwButtons; -} - -/* - * Class: org_java_games_input_DirectInputMouse - * Method: pollNative - * Signature: (J[B)Z - */ -extern "C" JNIEXPORT jboolean JNICALL -Java_net_java_games_input_DirectInputMouse_pollNative - (JNIEnv* env, jobject obj, jlong lDevice, jbyteArray baData) -{ - LPDIRECTINPUTDEVICE8 lpDevice = (LPDIRECTINPUTDEVICE8)(long)lDevice; - // Reacquire the device - HRESULT res = lpDevice->Acquire(); - if (res != DI_OK && res != S_FALSE) { - PrintDIError("Acquire", res); - return JNI_FALSE; - } - // Get the data - DIMOUSESTATE2 data; - res = lpDevice->GetDeviceState(sizeof(data), &data); - if (res != DI_OK) { - PrintDIError("GetDeviceState", res); - return JNI_FALSE; - } - - // Endolf woz here - // Set the axis data to 0, we only want the buttons for this second - data.lX = 0; - data.lY = 0; - data.lZ = 0; - - DIDEVICEOBJECTDATA dataBuffer[MOUSE_BUFFER_SIZE]; - DWORD numEvents = MOUSE_BUFFER_SIZE; - HRESULT res2 = lpDevice->GetDeviceData(sizeof(DIDEVICEOBJECTDATA), dataBuffer, &numEvents, 0); - switch(res2) { - case DIERR_INPUTLOST: - printf("DIERR_INPUTLOST\n"); - break; - case DIERR_INVALIDPARAM: - printf("DIERR_INVALIDPARAM\n"); - break; - case DIERR_NOTACQUIRED: - printf("DIERR_NOTACQUIRED\n"); - break; - case DIERR_NOTBUFFERED: - printf("DIERR_NOTBUFFERED\n"); - break; - case DIERR_NOTINITIALIZED: - printf("DIERR_NOTINITIALIZED\n"); - break; - case DI_BUFFEROVERFLOW: - printf("DI_BUFFEROVERFLOW\n"); - break; - } - int i=0; - for(i=0;i<numEvents;i++) { - switch(dataBuffer[i].dwOfs) { - case DIMOFS_BUTTON0: - if(dataBuffer[i].dwData == 0x80) { - data.rgbButtons[0] = 0x80; - } - break; - case DIMOFS_BUTTON1: - if(dataBuffer[i].dwData == 0x80) { - data.rgbButtons[1] = 0x80; - } - break; - case DIMOFS_BUTTON2: - if(dataBuffer[i].dwData == 0x80) { - data.rgbButtons[2] = 0x80; - } - break; - case DIMOFS_BUTTON3: - if(dataBuffer[i].dwData == 0x80) { - data.rgbButtons[3] = 0x80; - } - break; - case DIMOFS_BUTTON4: - if(dataBuffer[i].dwData == 0x80) { - data.rgbButtons[4] = 0x80; - } - break; - case DIMOFS_BUTTON5: - if(dataBuffer[i].dwData == 0x80) { - data.rgbButtons[5] = 0x80; - } - break; - case DIMOFS_BUTTON6: - if(dataBuffer[i].dwData == 0x80) { - data.rgbButtons[6] = 0x80; - } - break; - case DIMOFS_BUTTON7: - if(dataBuffer[i].dwData == 0x80) { - data.rgbButtons[7] = 0x80; - } - break; - case DIMOFS_X: - data.lX += dataBuffer[i].dwData; - break; - case DIMOFS_Y: - data.lY += dataBuffer[i].dwData; - break; - case DIMOFS_Z: - data.lZ += dataBuffer[i].dwData; - break; - default: - printf("Uknown data offset (%d)\n", dataBuffer[i].dwOfs); - } - } - - //printf("axis data in native at poll end is x: %d, y: %d, z: %d\n", data.lX, data.lY, data.lZ); - - // Set the data in our array - env->SetByteArrayRegion(baData, 0, (jsize)sizeof(data), (jbyte*)&data); - return JNI_TRUE; -} - -/* - * Enumeration callback to rename mouse axes - * - * returns DIENUM_CONTINUE or DIENUM_STOP - */ -BOOL CALLBACK RenameAxesCallback(LPCDIDEVICEOBJECTINSTANCE lpddoi, - LPVOID pvRef) -{ - ObjectParamData* pData = (ObjectParamData*)pvRef; - //LPDIRECTINPUTDEVICE8 lpDevice = pData->lpDevice; - JNIEnv* env = pData->env; - jobject obj = pData->obj; - jobject identifier; - switch (lpddoi->dwOfs) { - case DIMOFS_X: - identifier = env->GetStaticObjectField(CLASS_AxisIdentifier, - FID_X); - break; - case DIMOFS_Y: - identifier = env->GetStaticObjectField(CLASS_AxisIdentifier, - FID_Y); - break; - case DIMOFS_Z: - identifier = env->GetStaticObjectField(CLASS_AxisIdentifier, - FID_Slider); - break; - case DIMOFS_BUTTON0: - identifier = env->GetStaticObjectField(CLASS_ButtonIdentifier, - FID_Left); - break; - case DIMOFS_BUTTON1: - identifier = env->GetStaticObjectField(CLASS_ButtonIdentifier, - FID_Right); - break; - case DIMOFS_BUTTON2: - identifier = env->GetStaticObjectField(CLASS_ButtonIdentifier, - FID_Middle); - break; - case DIMOFS_BUTTON3: - identifier = env->GetStaticObjectField(CLASS_ButtonIdentifier, - FID_Side); - break; - case DIMOFS_BUTTON4: - identifier = env->GetStaticObjectField(CLASS_ButtonIdentifier, - FID_Extra); - break; - case DIMOFS_BUTTON5: - identifier = env->GetStaticObjectField(CLASS_ButtonIdentifier, - FID_Forward); - break; - case DIMOFS_BUTTON6: - identifier = env->GetStaticObjectField(CLASS_ButtonIdentifier, - FID_Back); - break; - default: - return DIENUM_CONTINUE; // Not an axis we know - } - jstring name = env->NewStringUTF(lpddoi->tszName); - env->CallVoidMethod(obj, MID_RenameAxis, identifier, name); - return DIENUM_CONTINUE; -} - -/* - * Class: org_java_games_input_DirectInputMouse - * Method: renameAxes - * Signature: (J)Z - */ -extern "C" JNIEXPORT jboolean JNICALL -Java_net_java_games_input_DirectInputMouse_renameAxes - (JNIEnv* env, jobject obj, jlong lDevice) -{ - LPDIRECTINPUTDEVICE8 lpDevice = (LPDIRECTINPUTDEVICE8)(long)lDevice; - ObjectParamData data(lpDevice, env, obj, NULL); - LPVOID pvRef = (LPVOID)&data; - DWORD dwFlags = DIDFT_ALL; - // Enum objects - HRESULT res = lpDevice->EnumObjects(RenameAxesCallback, pvRef, dwFlags); - if (res != DI_OK) { - PrintDIError("EnumObjects", res); - return JNI_FALSE; - } - return JNI_TRUE; -} - - diff --git a/plugins/OSX/build.xml b/plugins/OSX/build.xml deleted file mode 100644 index 066c838..0000000 --- a/plugins/OSX/build.xml +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0" ?> -<project basedir="." default="all" name="OSX Plugin"> - <description>OSX JInput Plugin</description> - <property name="src" location="src" /> - <property name="build" location="classes" /> - <property name="dist" location="dist" /> - <property name="plugins" location="plugins" /> - - <target name="init"> - <mkdir dir="classes"/> - <mkdir dir="dist"/> - </target> - - <target depends="init" name="compile"> - <javac debug="true" deprecation="true" destdir="${build}" source="1.4" srcdir="src/java"> - <classpath> - <pathelement location="../../coreAPI/bin/jinput.jar"/> - <pathelement location="../../coreAPI/lib/jutils.jar"/> - </classpath> - </javac> - </target> - - <target depends="init,compile" name="jar"> - <jar jarfile="${dist}/HIDWrapper.jar" compress="true" basedir="${build}"> - <exclude name="**/*.java"/> - <exclude name="HIDWrapper.jar"/> - <exclude name="apidoc"/> - </jar> - <copy file="${dist}/HIDWrapper.jar" todir="../../coreAPI/src/tests/controller" /> - </target> - - <target depends="compileNativeJinputLib,jar" description="Build everything." name="all"> - <echo message="Native OSX JInput library built!"/> - </target> - - <target name="javadoc" depends="init" description="Javadoc for OS X plugin for JInput."> - <mkdir dir="apidocs"/> - <javadoc packagenames="net.java.games.input.*" - destdir="apidocs" - additionalparam="-source 1.4" - link="../../../coreAPI/apidocs"> - <sourcepath> - <pathelement location="src/java"/> - </sourcepath> - <classpath> - <pathelement location="../../coreAPI/bin/jinput.jar"/> - <pathelement location="../../coreAPI/lib/jutils.jar"/> - </classpath> - </javadoc> - </target> - - <target description="Clean all build products." name="clean"> - <delete failonerror="no"> - <fileset dir="${build}"> - <include name="**/*.class"/> - </fileset> - </delete> - <delete file="${dist}/HIDWrapper.jar" failonerror="no"/> - <delete file="${dist}/libjinput.jnilib" failonerror="no"/> - <delete file="../../coreAPI/src/tests/controller/HIDWrapper.jar" failonerror="no" /> - <delete file="../../coreAPI/src/tests/controller/libjinput.jnilib" failonerror="no"/> - <delete file="apidoc" failonerror="no"/> - </target> - - <target depends="init,compile" name="createJNIHeaders"> - <javah destdir="src/native"> - <classpath> - <pathelement path="${build}"/> - <pathelement location="../../coreAPI/classes"/> - </classpath> - <class name="net.java.games.input.OSXEnvironmentPlugin"/> - </javah> - </target> - - - <target name="compileNativeJinputLib" depends="init,createJNIHeaders" > - <ant dir="src/native" target="compileNativeJinputLib"/> - <copy file="src/native/libjinput.jnilib" todir="${dist}" /> - <copy file="${dist}/libjinput.jnilib" todir="../../coreAPI/src/tests/controller" /> - </target> -</project> diff --git a/plugins/OSX/src/java/net/java/games/input/InputController.java b/plugins/OSX/src/java/net/java/games/input/InputController.java deleted file mode 100644 index 2a5442b..0000000 --- a/plugins/OSX/src/java/net/java/games/input/InputController.java +++ /dev/null @@ -1,13 +0,0 @@ -package net.java.games.input; - -/** - * Created by IntelliJ IDEA. - * User: gpierce - * Date: Aug 2, 2003 - * Time: 2:57:15 PM - * To change this template use Options | File Templates. - */ -public interface InputController -{ - public void addControllerElement( InputControllerElement element ); -} diff --git a/plugins/OSX/src/java/net/java/games/input/InputControllerElement.java b/plugins/OSX/src/java/net/java/games/input/InputControllerElement.java deleted file mode 100644 index 8ba92c3..0000000 --- a/plugins/OSX/src/java/net/java/games/input/InputControllerElement.java +++ /dev/null @@ -1,195 +0,0 @@ -package net.java.games.input; - -/** - * Created by IntelliJ IDEA. - * User: gpierce - * Date: Aug 2, 2003 - * Time: 2:59:26 PM - * To change this template use Options | File Templates. - */ -public class InputControllerElement -{ - private long hidCookie; - private int elementType; - private int usagePage; - private int usage; - - private int rawMin; - private int rawMax; - private int scaledMin; - private int scaledMax; - - private int dataBitSize; - - private boolean isRelative; - private boolean isWrapping; - private boolean isNonLinear; - private boolean hasPreferredState; - private boolean hasNullState; - - public InputControllerElement() - { - } - - public InputControllerElement(long hidCookie, int elementType, int usage, int usagePage, - int rawMin, int rawMax, int scaledMin, int scaledMax, - int dataBitSize, boolean isRelative, boolean isWrapping, - boolean isNonLinear, boolean hasPreferredState, boolean hasNullState ) - { - this.hidCookie = hidCookie; - this.elementType = elementType; - this.usage = usage; - this.usagePage = usagePage; - this.rawMin = rawMin; - this.rawMax = rawMax; - this.scaledMin = scaledMin; - this.scaledMax = scaledMax; - this.dataBitSize = dataBitSize; - this.isRelative = isRelative; - this.isWrapping = isWrapping; - this.isNonLinear = isNonLinear; - this.hasPreferredState = hasPreferredState; - this.hasNullState = hasNullState; - } - - public long getHidCookie() - { - return hidCookie; - } - - public void setHidCookie(long hidCookie) - { - this.hidCookie = hidCookie; - } - - public int getElementType() - { - return elementType; - } - - public void setElementType(int elementType) - { - this.elementType = elementType; - } - - public int getUsagePage() - { - return usagePage; - } - - public void setUsagePage(int usagePage) - { - this.usagePage = usagePage; - } - - public int getUsage() - { - return usage; - } - - public void setUsage(int usage) - { - this.usage = usage; - } - - public int getRawMin() - { - return rawMin; - } - - public void setRawMin(int rawMin) - { - this.rawMin = rawMin; - } - - public int getRawMax() - { - return rawMax; - } - - public void setRawMax(int rawMax) - { - this.rawMax = rawMax; - } - - public int getScaledMin() - { - return scaledMin; - } - - public void setScaledMin(int scaledMin) - { - this.scaledMin = scaledMin; - } - - public int getScaledMax() - { - return scaledMax; - } - - public void setScaledMax(int scaledMax) - { - this.scaledMax = scaledMax; - } - - public int getDataBitSize() - { - return dataBitSize; - } - - public void setDataBitSize(int dataBitSize) - { - this.dataBitSize = dataBitSize; - } - - public boolean isRelative() - { - return isRelative; - } - - public void setRelative(boolean relative) - { - isRelative = relative; - } - - public boolean isWrapping() - { - return isWrapping; - } - - public void setWrapping(boolean wrapping) - { - isWrapping = wrapping; - } - - public boolean isNonLinear() - { - return isNonLinear; - } - - public void setNonLinear(boolean nonLinear) - { - isNonLinear = nonLinear; - } - - public boolean isHasPreferredState() - { - return hasPreferredState; - } - - public void setHasPreferredState(boolean hasPreferredState) - { - this.hasPreferredState = hasPreferredState; - } - - public boolean isHasNullState() - { - return hasNullState; - } - - public void setHasNullState(boolean hasNullState) - { - this.hasNullState = hasNullState; - } - -} diff --git a/plugins/OSX/src/java/net/java/games/input/OSXEnvironmentPlugin.java b/plugins/OSX/src/java/net/java/games/input/OSXEnvironmentPlugin.java deleted file mode 100755 index 41a28fc..0000000 --- a/plugins/OSX/src/java/net/java/games/input/OSXEnvironmentPlugin.java +++ /dev/null @@ -1,484 +0,0 @@ -/* - * %W% %E% - * - * Copyright 2002 Sun Microsystems, Inc. All rights reserved. - * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. - */ -/***************************************************************************** -* Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved. -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* - Redistribution of source code must retain the above copyright notice, -* this list of conditions and the following disclaimer. -* -* - Redistribution in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materails provided with the distribution. -* -* Neither the name Sun Microsystems, Inc. or the names of the contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* This software is provided "AS IS," without a warranty of any kind. -* ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING -* ANY IMPLIED WARRANT OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR -* NON-INFRINGEMEN, ARE HEREBY EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN") AND -* ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS -* A RESULT OF USING, MODIFYING OR DESTRIBUTING THIS SOFTWARE OR ITS -* DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST -* REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, -* INCIDENTAL OR PUNITIVE DAMAGES. HOWEVER CAUSED AND REGARDLESS OF THE THEORY -* OF LIABILITY, ARISING OUT OF THE USE OF OUR INABILITY TO USE THIS SOFTWARE, -* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* -* You acknowledge that this software is not designed or intended for us in -* the design, construction, operation or maintenance of any nuclear facility -* -*****************************************************************************/ -package net.java.games.input; - -import java.security.AccessController; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.HashMap; - -import net.java.games.input.Controller; -import net.java.games.input.ControllerEnvironment; -import net.java.games.util.plugins.Plugin; - -/** OSX HIDManager implementation of controller environment -* @author gregorypierce -* @version 1.0 -*/ -public class OSXEnvironmentPlugin extends ControllerEnvironment implements Plugin -{ - - - public static final int HID_DEVICE_MOUSE = 0x02; - public static final int HID_DEVICE_JOYSTICK = 0x04; - public static final int HID_DEVICE_GAMEPAD = 0x05; - public static final int HID_DEVICE_KEYBOARD = 0x06; - - - public static final int HID_USAGE_POINTER = 0x01; - public static final int HID_USAGE_XAXIS = 0x30; - public static final int HID_USAGE_YAXIS = 0x31; - public static final int HID_USAGE_ZAXIS = 0x32; - public static final int HID_USAGE_XAXIS_ROTATION = 0x33; - public static final int HID_USAGE_YAXIS_ROTATION = 0x34; - public static final int HID_USAGE_ZAXIS_ROTATION = 0x35; - public static final int HID_USAGE_SLIDER = 0x36; - public static final int HID_USAGE_DIAL = 0x37; - public static final int HID_USAGE_WHEEL = 0x38; - public static final int HID_USAGE_HAT = 0x39; - public static final int HID_USAGE_DPAD_UP = 0x90; - public static final int HID_USAGE_DPAD_DOWN = 0x91; - public static final int HID_USAGE_DPAD_LEFT = 0x92; - public static final int HID_USAGE_DPAD_RIGHT = 0x93; - - - public static final int HID_USAGE_KEYBOARD_ERRORROLLOVER = 0x01; /* ErrorRollOver */ - public static final int HID_USAGE_KEYBOARD_POSTFAIL = 0x02; /* POSTFail */ - public static final int HID_USAGE_KEYBOARD_ERRORUNDEFINED = 0x03; /* ErrorUndefined */ - public static final int HID_USAGE_KEYBOARD_A = 0x04; /* a or A */ - public static final int HID_USAGE_KEYBOARD_B = 0x05; /* b or B */ - public static final int HID_USAGE_KEYBOARD_C = 0x06; /* c or C */ - public static final int HID_USAGE_KEYBOARD_D = 0x07; /* d or D */ - public static final int HID_USAGE_KEYBOARD_E = 0x08; /* e or E */ - public static final int HID_USAGE_KEYBOARD_F = 0x09; /* f or F */ - public static final int HID_USAGE_KEYBOARD_G = 0x0A; /* g or G */ - public static final int HID_USAGE_KEYBOARD_H = 0x0B; /* h or H */ - public static final int HID_USAGE_KEYBOARD_I = 0x0C; /* i or I */ - public static final int HID_USAGE_KEYBOARD_J = 0x0D; /* j or J */ - public static final int HID_USAGE_KEYBOARD_K = 0x0E; /* k or K */ - public static final int HID_USAGE_KEYBOARD_L = 0x0F; /* l or L */ - public static final int HID_USAGE_KEYBOARD_M = 0x10; /* m or M */ - public static final int HID_USAGE_KEYBOARD_N = 0x11; /* n or N */ - public static final int HID_USAGE_KEYBOARD_O = 0x12; /* o or O */ - public static final int HID_USAGE_KEYBOARD_P = 0x13; /* p or P */ - public static final int HID_USAGE_KEYBOARD_Q = 0x14; /* q or Q */ - public static final int HID_USAGE_KEYBOARD_R = 0x15; /* r or R */ - public static final int HID_USAGE_KEYBOARD_S = 0x16; /* s or S */ - public static final int HID_USAGE_KEYBOARD_T = 0x17; /* t or T */ - public static final int HID_USAGE_KEYBOARD_U = 0x18; /* u or U */ - public static final int HID_USAGE_KEYBOARD_V = 0x19; /* v or V */ - public static final int HID_USAGE_KEYBOARD_W = 0x1A; /* w or W */ - public static final int HID_USAGE_KEYBOARD_X = 0x1B; /* x or X */ - public static final int HID_USAGE_KEYBOARD_Y = 0x1C; /* y or Y */ - public static final int HID_USAGE_KEYBOARD_Z = 0x1D; /* z or Z */ - public static final int HID_USAGE_KEYBOARD_1 = 0x1E; /* 1 or ! */ - public static final int HID_USAGE_KEYBOARD_2 = 0x1F; /* 2 or @ */ - public static final int HID_USAGE_KEYBOARD_3 = 0x20; /* 3 or # */ - public static final int HID_USAGE_KEYBOARD_4 = 0x21; /* 4 or $ */ - public static final int HID_USAGE_KEYBOARD_5 = 0x22; /* 5 or % */ - public static final int HID_USAGE_KEYBOARD_6 = 0x23; /* 6 or ^ */ - public static final int HID_USAGE_KEYBOARD_7 = 0x24; /* 7 or & */ - public static final int HID_USAGE_KEYBOARD_8 = 0x25; /* 8 or * */ - public static final int HID_USAGE_KEYBOARD_9 = 0x26; /* 9 or ( */ - public static final int HID_USAGE_KEYBOARD_0 = 0x27; /* 0 or ) */ - public static final int HID_USAGE_KEYBOARD_ENTER = 0x28; /* Return (Enter) */ - public static final int HID_USAGE_KEYBOARD_ESCAPE = 0x29; /* Escape */ - public static final int HID_USAGE_KEYBOARD_BACKSPACE = 0x2A; /* Delete (Backspace) */ - public static final int HID_USAGE_KEYBOARD_TAB = 0x2B; /* Tab */ - public static final int HID_USAGE_KEYBOARD_SPACEBAR = 0x2C; /* Spacebar */ - public static final int HID_USAGE_KEYBOARD_HYPHEN = 0x2D; /* - or _ */ - public static final int HID_USAGE_KEYBOARD_EQUALSIGN = 0x2E; /* = or + */ - public static final int HID_USAGE_KEYBOARD_OPENBRACKET = 0x2F; /* [ or { */ - public static final int HID_USAGE_KEYBOARD_CLOSEBRACKET = 0x30; /* ] or } */ - public static final int HID_USAGE_KEYBOARD_BACKSLASH = 0x31; /* \ or | */ - public static final int HID_USAGE_KEYBOARD_NONUSPOUNT = 0x32; /* Non-US # or _ */ - public static final int HID_USAGE_KEYBOARD_SEMICOLON = 0x33; /* ; or : */ - public static final int HID_USAGE_KEYBOARD_QUOTE = 0x34; /* ' or " */ - public static final int HID_USAGE_KEYBOARD_TILDE = 0x35; /* Grave Accent and Tilde */ - public static final int HID_USAGE_KEYBOARD_COMMA = 0x36; /* , or < */ - public static final int HID_USAGE_KEYBOARD_PERIOD = 0x37; /* . or > */ - public static final int HID_USAGE_KEYBOARD_SLASH = 0x38; /* / or ? */ - public static final int HID_USAGE_KEYBOARD_CAPSLOCK = 0x39; /* Caps Lock */ - public static final int HID_USAGE_KEYBOARD_F1 = 0x3A; /* F1 */ - public static final int HID_USAGE_KEYBOARD_F2 = 0x3B; /* F2 */ - public static final int HID_USAGE_KEYBOARD_F3 = 0x3C; /* F3 */ - public static final int HID_USAGE_KEYBOARD_F4 = 0x3D; /* F4 */ - public static final int HID_USAGE_KEYBOARD_F5 = 0x3E; /* F5 */ - public static final int HID_USAGE_KEYBOARD_F6 = 0x3F; /* F6 */ - public static final int HID_USAGE_KEYBOARD_F7 = 0x40; /* F7 */ - public static final int HID_USAGE_KEYBOARD_F8 = 0x41; /* F8 */ - public static final int HID_USAGE_KEYBOARD_F9 = 0x42; /* F9 */ - public static final int HID_USAGE_KEYBOARD_F10 = 0x43; /* F10 */ - public static final int HID_USAGE_KEYBOARD_F11 = 0x44; /* F11 */ - public static final int HID_USAGE_KEYBOARD_F12 = 0x45; /* F12 */ - public static final int HID_USAGE_KEYBOARD_PRINTSCREEN = 0x46; /* Print Screen */ - public static final int HID_USAGE_KEYBOARD_SCROLLLOCK = 0x47; /* Scroll Lock */ - public static final int HID_USAGE_KEYBOARD_PAUSE = 0x48; /* Pause */ - public static final int HID_USAGE_KEYBOARD_INSERT = 0x49; /* Insert */ - public static final int HID_USAGE_KEYBOARD_HOME = 0x4A; /* Home */ - public static final int HID_USAGE_KEYBOARD_PAGEUP = 0x4B; /* Page Up */ - public static final int HID_USAGE_KEYBOARD_DELETE = 0x4C; /* Delete Forward */ - public static final int HID_USAGE_KEYBOARD_END = 0x4D; /* End */ - public static final int HID_USAGE_KEYBOARD_PAGEDOWN = 0x4E; /* Page Down */ - public static final int HID_USAGE_KEYBOARD_RIGHTARROW = 0x4F; /* Right Arrow */ - public static final int HID_USAGE_KEYBOARD_LEFTARROW = 0x50; /* Left Arrow */ - public static final int HID_USAGE_KEYBOARD_DOWNARROW = 0x51; /* Down Arrow */ - public static final int HID_USAGE_KEYBOARD_UPARROW = 0x52; /* Up Arrow */ - public static final int HID_USAGE_KEYPAD_NUMLOCK = 0x53; /* Keypad NumLock or Clear */ - public static final int HID_USAGE_KEYPAD_SLASH = 0x54; /* Keypad / */ - public static final int HID_USAGE_KEYPAD_ASTERICK = 0x55; /* Keypad * */ - public static final int HID_USAGE_KEYPAD_HYPHEN = 0x56; /* Keypad - */ - public static final int HID_USAGE_KEYPAD_PLUS = 0x57; /* Keypad + */ - public static final int HID_USAGE_KEYPAD_ENTER = 0x58; /* Keypad Enter */ - public static final int HID_USAGE_KEYPAD_1 = 0x59; /* Keypad 1 or End */ - public static final int HID_USAGE_KEYPAD_2 = 0x5A; /* Keypad 2 or Down Arrow */ - public static final int HID_USAGE_KEYPAD_3 = 0x5B; /* Keypad 3 or Page Down */ - public static final int HID_USAGE_KEYPAD_4 = 0x5C; /* Keypad 4 or Left Arrow */ - public static final int HID_USAGE_KEYPAD_5 = 0x5D; /* Keypad 5 */ - public static final int HID_USAGE_KEYPAD_6 = 0x5E; /* Keypad 6 or Right Arrow */ - public static final int HID_USAGE_KEYPAD_7 = 0x5F; /* Keypad 7 or Home */ - public static final int HID_USAGE_KEYPAD_8 = 0x60; /* Keypad 8 or Up Arrow */ - public static final int HID_USAGE_KEYPAD_9 = 0x61; /* Keypad 9 or Page Up */ - public static final int HID_USAGE_KEYPAD_0 = 0x62; /* Keypad 0 or Insert */ - public static final int HID_USAGE_KEYPAD_PERIOD = 0x63; /* Keypad . or Delete */ - public static final int HID_USAGE_KEYBOARD_NONUSBACKSLASH = 0x64; /* Non-US \ or | */ - public static final int HID_USAGE_KEYBOARD_APPLICATION = 0x65; /* Application */ - public static final int HID_USAGE_KEYBOARD_POWER = 0x66; /* Power */ - public static final int HID_USAGE_KEYPAD_EQUALSIGN = 0x67; /* Keypad = */ - public static final int HID_USAGE_KEYBOARD_F13 = 0x68; /* F13 */ - public static final int HID_USAGE_KEYBOARD_F14 = 0x69; /* F14 */ - public static final int HID_USAGE_KEYBOARD_F15 = 0x6A; /* F15 */ - public static final int HID_USAGE_KEYBOARD_F16 = 0x6B; /* F16 */ - public static final int HID_USAGE_KEYBOARD_F17 = 0x6C; /* F17 */ - public static final int HID_USAGE_KEYBOARD_F18 = 0x6D; /* F18 */ - public static final int HID_USAGE_KEYBOARD_F19 = 0x6E; /* F19 */ - public static final int HID_USAGE_KEYBOARD_F20 = 0x6F; /* F20 */ - public static final int HID_USAGE_KEYBOARD_F21 = 0x70; /* F21 */ - public static final int HID_USAGE_KEYBOARD_F22 = 0x71; /* F22 */ - public static final int HID_USAGE_KEYBOARD_F23 = 0x72; /* F23 */ - public static final int HID_USAGE_KEYBOARD_F24 = 0x73; /* F24 */ - public static final int HID_USAGE_KEYBOARD_EXECUTE = 0x74; /* Execute */ - public static final int HID_USAGE_KEYBOARD_HELP = 0x75; /* Help */ - public static final int HID_USAGE_KEYBOARD_MENU = 0x76; /* Menu */ - public static final int HID_USAGE_KEYBOARD_SELECT = 0x77; /* Select */ - public static final int HID_USAGE_KEYBOARD_STOP = 0x78; /* Stop */ - public static final int HID_USAGE_KEYBOARD_AGAIN = 0x79; /* Again */ - public static final int HID_USAGE_KEYBOARD_UNDO = 0x7A; /* Undo */ - public static final int HID_USAGE_KEYBOARD_CUT = 0x7B; /* Cut */ - public static final int HID_USAGE_KEYBOARD_COPY = 0x7C; /* Copy */ - public static final int HID_USAGE_KEYBOARD_PASTE = 0x7D; /* Paste */ - public static final int HID_USAGE_KEYBOARD_FIND = 0x7E; /* Find */ - public static final int HID_USAGE_KEYBOARD_MUTE = 0x7F; /* Mute */ - public static final int HID_USAGE_KEYBOARD_VOLUMEUP = 0x80; /* Volume Up */ - public static final int HID_USAGE_KEYBOARD_VOLUMEDOWN = 0x81; /* Volume Down */ - public static final int HID_USAGE_KEYBOARD_LOCKINGCAPSLOCK = 0x82; /* Locking Caps Lock */ - public static final int HID_USAGE_KEYBOARD_LOCKINGNUMLOCK = 0x83; /* Locking Num Lock */ - public static final int HID_USAGE_KEYBOARD_LOCKINGSCROLLLOCK = 0x84; /* Locking Scroll Lock */ - public static final int HID_USAGE_KEYPAD_COMMA = 0x85; /* Keypad Comma */ - public static final int HID_USAGE_KEYPAD_EQUALSSIGNAS400 = 0x86; /* Keypad Equal Sign for AS/400 */ - public static final int HID_USAGE_KEYBOARD_INTERNATIONAL1 = 0x87; /* International1 */ - public static final int HID_USAGE_KEYBOARD_INTERNATIONAL2 = 0x88; /* International2 */ - public static final int HID_USAGE_KEYBOARD_INTERNATIONAL3 = 0x89; /* International3 */ - public static final int HID_USAGE_KEYBOARD_INTERNATIONAL4 = 0x8A; /* International4 */ - public static final int HID_USAGE_KEYBOARD_INTERNATIONAL5 = 0x8B; /* International5 */ - public static final int HID_USAGE_KEYBOARD_INTERNATIONAL6 = 0x8C; /* International6 */ - public static final int HID_USAGE_KEYBOARD_INTERNATIONAL7 = 0x8D; /* International7 */ - public static final int HID_USAGE_KEYBOARD_INTERNATIONAL8 = 0x8E; /* International8 */ - public static final int HID_USAGE_KEYBOARD_INTERNATIONAL9 = 0x8F; /* International9 */ - public static final int HID_USAGE_KEYBOARD_LANG1 = 0x90; /* LANG1 */ - public static final int HID_USAGE_KEYBOARD_LANG2 = 0x91; /* LANG2 */ - public static final int HID_USAGE_KEYBOARD_LANG3 = 0x92; /* LANG3 */ - public static final int HID_USAGE_KEYBOARD_LANG4 = 0x93; /* LANG4 */ - public static final int HID_USAGE_KEYBOARD_LANG5 = 0x94; /* LANG5 */ - public static final int HID_USAGE_KEYBOARD_LANG6 = 0x95; /* LANG6 */ - public static final int HID_USAGE_KEYBOARD_LANG7 = 0x96; /* LANG7 */ - public static final int HID_USAGE_KEYBOARD_LANG8 = 0x97; /* LANG8 */ - public static final int HID_USAGE_KEYBOARD_LANG9 = 0x98; /* LANG9 */ - public static final int HID_USAGE_KEYBOARD_ALTERNATEERASE = 0x99; /* AlternateErase */ - public static final int HID_USAGE_KEYBOARD_SYSREQORATTENTION = 0x9A; /* SysReq/Attention */ - public static final int HID_USAGE_KEYBOARD_CANCEL = 0x9B; /* Cancel */ - public static final int HID_USAGE_KEYBOARD_CLEAR = 0x9C; /* Clear */ - public static final int HID_USAGE_KEYBOARD_PRIOR = 0x9D; /* Prior */ - public static final int HID_USAGE_KEYBOARD_RETURN = 0x9E; /* Return */ - public static final int HID_USAGE_KEYBOARD_SEPARATOR = 0x9F; /* Separator */ - public static final int HID_USAGE_KEYBOARD_OUT = 0xA0; /* Out */ - public static final int HID_USAGE_KEYBOARD_OPER = 0xA1; /* Oper */ - public static final int HID_USAGE_KEYBOARD_CLEARORAGAIN = 0xA2; /* Clear/Again */ - public static final int HID_USAGE_KEYBOARD_CRSELORPROPS = 0xA3; /* CrSel/Props */ - public static final int HID_USAGE_KEYBOARD_EXSEL = 0xA4; /* ExSel */ - /* 0xA5-0xDF Reserved */ - public static final int HID_USAGE_KEYBOARD_LEFTCONTROL = 0xE0; /* Left Control */ - public static final int HID_USAGE_KEYBOARD_LEFTSHIFT = 0xE1; /* Left Shift */ - public static final int HID_USAGE_KEYBOARD_LEFTALT = 0xE2; /* Left Alt */ - public static final int HID_USAGE_KEYBOARD_LEFTGUI = 0xE3; /* Left GUI */ - public static final int HID_USAGE_KEYBOARD_RIGHTCONTROL = 0xE4; /* Right Control */ - public static final int HID_USAGE_KEYBOARD_RIGHTSHIFT = 0xE5; /* Right Shift */ - public static final int HID_USAGE_KEYBOARD_RIGHTALT = 0xE6; /* Right Alt */ - public static final int HID_USAGE_KEYBOARD_RIGHTGUI = 0xE7; /* Right GUI */ - /* 0xE8-0xFFFF Reserved */ - public static final int HID_USAGE_KEYBOARD__RESERVED = 0xFFFF; - - - public static final int HID_USAGEPAGE_UNDEFINED = 0x00; - public static final int HID_USAGEPAGE_GENERICDESKTOP = 0x01; - public static final int HID_USAGEPAGE_SIMULATION = 0x02; - public static final int HID_USAGEPAGE_VR = 0x03; - public static final int HID_USAGEPAGE_SPORT = 0x04; - public static final int HID_USAGEPAGE_GAME = 0x05; - public static final int HID_USAGEPAGE_KEYBOARD = 0x07; /* USB Device Class Definition for Human Interface Devices (HID). Note: the usage type for all key codes is Selector (Sel). */ - public static final int HID_USAGEPAGE_LED = 0x08; - public static final int HID_USAGEPAGE_BUTTON = 0x09; - public static final int HID_USAGEPAGE_ORDINAL = 0x0A; - public static final int HID_USAGEPAGE_TELEPHONY = 0x0B; - public static final int HID_USAGEPAGE_CONSUMER = 0x0C; - public static final int HID_USAGEPAGE_DIGITIZER = 0x0D; - public static final int HID_USAGEPAGE_PID = 0x0F; /* USB Physical Interface Device definitions for force feedback and related devices. */ - public static final int HID_USAGEPAGE_UNICODE = 0x10; - public static final int HID_USAGEPAGE_ALPHANUMERIC_DISPLAY = 0x14; - public static final int HID_USAGEPAGE_POWERDEVICE = 0x84; /* Power Device Page */ - public static final int HID_USAGEPAGE_BATTERY_SYSTEM = 0x85; /* Battery System Page */ - public static final int HID_USAGEPAGE_BARCODE_SCANNER = 0x8C; /* (Point of Sale) USB Device Class Definition for Bar Code Scanner Devices */ - public static final int HID_USAGEPAGE_SCALE = 0x8D; /* (Point of Sale) USB Device Class Definition for Scale Devices */ - public static final int HID_USAGEPAGE_CAMERA_CONTROL = 0x90; /* USB Device Class Definition for Image Class Devices */ - public static final int HID_USAGEPAGE_ARCADE = 0x91; /* OAAF Definitions for arcade and coinop related Devices */ - public static final int HID_USAGEPAGE_VENDOR_DEFINED_START = 0xFF00; - - - public static final int HID_ELEMENTTYPE_INPUT_MISC = 1; - public static final int HID_ELEMENTTYPE_INPUT_BUTTON = 2; - public static final int HID_ELEMENTTYPE_INPUT_AXIS = 3; - public static final int HID_ELEMENTTYPE_INPUT_SCANCODES = 4; - public static final int HID_ELEMENTTYPE_OUTPUT = 129; - public static final int HID_ELEMENTTYPE_FEATURE = 257; - public static final int HID_ELEMENTTYPE_COLLECTION = 513; - - - - - - - static - { - System.loadLibrary("jinput"); - } - - public native void hidCreate(); - public native void hidDispose(); - public native void enumDevices(); - - /** - * Opens an input device and returns the address of the input queue for that device - */ - public native long openDevice( long lpDevice, int queueDepth ); - public native void closeDevice( long lpDevice, long lpQueue ); - - - /** - * Polls a device and returns the element top most on the input queue. The elements that - * are returned are only those that have had their hidCookies registered with registerDeviceElement. - * @param lpQueue - * @return - */ - public native int pollDevice( long lpQueue ); - public native int pollElement( long lpDevice, long hidCookie ); - public native void registerDeviceElement( long lpQueue, long hidCookie ); - public native void deregisterDeviceElement( long lpQueue, long hidCookie ); - - - private HashMap devices = new HashMap(); - - - public OSXEnvironmentPlugin() - { - System.out.println("net.java.games.input.OSXEnvironmentPlugin instance created"); - - System.out.println("Creating HID engine"); - hidCreate(); - - System.out.println("Enumerating devices"); - enumDevices(); - } - - public void finalize() - { - System.out.println("Disposing HID engine"); - hidDispose(); - } - - public Controller[] getControllers() - { - return (Controller[])(devices.values().toArray( new Controller[0])); - } - - public Controller createController( long lpDevice, String productName, int usage ) - { - - switch (usage) - { - case (HID_DEVICE_MOUSE): - System.out.println("Found mouse [" + productName + "] device address [" + lpDevice + "]"); - return new OSXMouse( this, lpDevice, productName ); - case (HID_DEVICE_JOYSTICK): - System.out.println("Found joystick [" + productName + "] device address [" + lpDevice + "]"); - return new OSXJoystick( this, lpDevice, productName ); - case (HID_DEVICE_GAMEPAD): - System.out.println("Found gamepad [" + productName + "] device address [" + lpDevice + "]"); - return new OSXGamepad( this, lpDevice, productName ); - case (HID_DEVICE_KEYBOARD): - System.out.println("Found keyboard [" + productName + "] device address [" + lpDevice + "]"); - return new OSXKeyboard( this, lpDevice, productName ); - - default: - System.out.println("Found device of unknown or unsupported type. Usage[" + usage + "], ProductName[" + productName + "] - ignoring"); - return null; - } - } - - /** - * Add a controller to the device list - * @param lpDevice - * @param productName - * @param usage - */ - private void addController( long lpDevice, String productName, int usage ) - { - Controller controller = null; - - controller = createController( lpDevice, productName, usage ); - - if ( controller != null ) - { - devices.put( new Long(lpDevice), controller ); - } - } - - /** - * Adds an InputControllerElement to a device. This method is invoked from native code. - * @param lpDevice - * @param elementCookie - * @param elementType - * @param usage - * @param usagePage - * @param rawMin - * @param rawMax - * @param scaledMin - * @param scaledMax - * @param dataBitSize - * @param isRelative - * @param isWrapping - * @param isNonLinear - * @param hasPreferredState - * @param hasNullState - */ - private void addControllerElement( long lpDevice, - long elementCookie, - int elementType, - int usage, - int usagePage, - int rawMin, - int rawMax, - int scaledMin, - int scaledMax, - int dataBitSize, - boolean isRelative, - boolean isWrapping, - boolean isNonLinear, - boolean hasPreferredState, - boolean hasNullState) - { - InputControllerElement element = new InputControllerElement( elementCookie, elementType, usage, usagePage, - rawMin, rawMax, scaledMin, scaledMax, - dataBitSize, isRelative, isWrapping, isNonLinear, - hasPreferredState, hasNullState ); - - - InputController inputController = (InputController)devices.get( new Long( lpDevice) ); - if ( inputController != null ) - { - inputController.addControllerElement( element ); - } - } - - - - public void testDevice( long lpDevice ) - { - System.out.println("Opening device "); - long lpQueue = openDevice( lpDevice, 32 ); - - for ( int i = 0; i < 50; i++ ) - { - try - { - pollDevice( lpQueue ); - Thread.sleep(10); - } - catch( Exception e ) - { - System.out.println("Interrupted" + e ); - } - } - - System.out.println("Closing device"); - closeDevice( lpDevice, lpQueue ); - } - - public static void main (String args[]) - { - System.out.println("Started net.java.games.input.OSXEnvironmentPlugin"); - OSXEnvironmentPlugin newjni = new OSXEnvironmentPlugin(); - - //newjni.hidCreate(); - - //newjni.enumDevices(); - - - Controller[] controllers = newjni.getControllers(); - - for ( int i = 0; i < controllers.length; i++ ) - { - System.out.println("Controller [" + controllers[i].getName() +"] enumerated..."); - } - - //newjni.hidDispose(); - - System.out.println("Done"); - } - -}
\ No newline at end of file diff --git a/plugins/OSX/src/java/net/java/games/input/OSXGamepad.java b/plugins/OSX/src/java/net/java/games/input/OSXGamepad.java deleted file mode 100644 index d739b6c..0000000 --- a/plugins/OSX/src/java/net/java/games/input/OSXGamepad.java +++ /dev/null @@ -1,82 +0,0 @@ -package net.java.games.input; - -/** - * Created by IntelliJ IDEA. - * User: gpierce - * Date: Aug 2, 2003 - * Time: 3:59:09 PM - * To change this template use Options | File Templates. - */ -public class OSXGamepad extends AbstractController implements InputController -{ - private OSXEnvironmentPlugin plugin; - private long lpDevice; - private long lpQueue; - - public OSXGamepad( OSXEnvironmentPlugin plugin, long lpDevice, String productName ) - { - super( productName ); - - this.plugin = plugin; - this.lpDevice = lpDevice; - - openDevice(); - } - public boolean poll() - { - plugin.pollDevice( lpQueue ); - - return true; - } - - public void openDevice() - { - this.lpQueue = plugin.openDevice( this.lpDevice, 32 ); - } - - public void closeDevice() - { - plugin.closeDevice( this.lpDevice, this.lpQueue ); - } - - public void pollDevice() - { - plugin.pollDevice( this.lpQueue ); - } - - public void addControllerElement(InputControllerElement element) - { - switch ( element.getElementType() ) - { - case OSXEnvironmentPlugin.HID_ELEMENTTYPE_INPUT_MISC: - System.out.println("*Adding misc component"); - break; - - case OSXEnvironmentPlugin.HID_ELEMENTTYPE_INPUT_BUTTON: - System.out.println("*Adding button"); - break; - - case OSXEnvironmentPlugin.HID_ELEMENTTYPE_INPUT_AXIS: - System.out.println("*Adding axis"); - break; - - case OSXEnvironmentPlugin.HID_ELEMENTTYPE_INPUT_SCANCODES: - System.out.println("*Adding scancode"); - break; - - case OSXEnvironmentPlugin.HID_ELEMENTTYPE_OUTPUT: - System.out.println("*Adding forcefeedback"); - break; - - case OSXEnvironmentPlugin.HID_ELEMENTTYPE_FEATURE: - - System.out.println("*Adding feature"); - break; - - case OSXEnvironmentPlugin.HID_ELEMENTTYPE_COLLECTION: - System.out.println("*Adding collection"); - break; - - } - } -} diff --git a/plugins/OSX/src/java/net/java/games/input/OSXJoystick.java b/plugins/OSX/src/java/net/java/games/input/OSXJoystick.java deleted file mode 100644 index f200514..0000000 --- a/plugins/OSX/src/java/net/java/games/input/OSXJoystick.java +++ /dev/null @@ -1,83 +0,0 @@ -package net.java.games.input; - -/** - * Created by IntelliJ IDEA. - * User: gpierce - * Date: Aug 2, 2003 - * Time: 3:58:45 PM - * To change this template use Options | File Templates. - */ -public class OSXJoystick extends AbstractController implements InputController -{ - private OSXEnvironmentPlugin plugin; - private long lpDevice; - private long lpQueue; - - public OSXJoystick( OSXEnvironmentPlugin plugin, long lpDevice, String productName ) - { - super( productName ); - - this.plugin = plugin; - this.lpDevice = lpDevice; - - openDevice(); - } - - public boolean poll() - { - plugin.pollDevice( lpQueue ); - - return true; - } - - public void openDevice() - { - this.lpQueue = plugin.openDevice( this.lpDevice, 32 ); - } - - public void closeDevice() - { - plugin.closeDevice( this.lpDevice, this.lpQueue ); - } - - public void pollDevice() - { - plugin.pollDevice( this.lpQueue ); - } - - public void addControllerElement(InputControllerElement element) - { - switch ( element.getElementType() ) - { - case OSXEnvironmentPlugin.HID_ELEMENTTYPE_INPUT_MISC: - System.out.println("*Adding misc component"); - break; - - case OSXEnvironmentPlugin.HID_ELEMENTTYPE_INPUT_BUTTON: - System.out.println("*Adding button"); - break; - - case OSXEnvironmentPlugin.HID_ELEMENTTYPE_INPUT_AXIS: - System.out.println("*Adding axis"); - break; - - case OSXEnvironmentPlugin.HID_ELEMENTTYPE_INPUT_SCANCODES: - System.out.println("*Adding scancode"); - break; - - case OSXEnvironmentPlugin.HID_ELEMENTTYPE_OUTPUT: - System.out.println("*Adding forcefeedback"); - break; - - case OSXEnvironmentPlugin.HID_ELEMENTTYPE_FEATURE: - - System.out.println("*Adding feature"); - break; - - case OSXEnvironmentPlugin.HID_ELEMENTTYPE_COLLECTION: - System.out.println("*Adding collection"); - break; - - } - } -} diff --git a/plugins/OSX/src/java/net/java/games/input/OSXKeyboard.java b/plugins/OSX/src/java/net/java/games/input/OSXKeyboard.java deleted file mode 100644 index 4809a75..0000000 --- a/plugins/OSX/src/java/net/java/games/input/OSXKeyboard.java +++ /dev/null @@ -1,253 +0,0 @@ -package net.java.games.input; - -import java.util.HashMap; - -/** - * Created by IntelliJ IDEA. - * User: gpierce - * Date: Aug 2, 2003 - * Time: 3:57:58 PM - * To change this template use Options | File Templates. - */ -public class OSXKeyboard extends StandardKeyboard implements InputController -{ - - private final static int[] CROSSTABLE = { - 0x00, // VOID - 0x29, // ESCAPE - 0x1E, // _1 - 0x1F, // _2 - 0x20, // _3 - 0x21, // _4 - 0x22, // _5 - 0x23, // _6 - 0x24, // _7 - 0x25, // _8 - 0x26, // _9 - 0x27, // _0 - 0x2D, // MINUS - 0x2E, // EQUALS - 0x2A, // BACK - 0x2B, // TAB - 0x14, // Q - 0x1A, // W - 0x08, // E - 0x15, // R - 0x17, // T - 0x1C, // Y - 0x18, // U - 0x0C, // I - 0x12, // O - 0x13, // P - 0x2F, // [ - 0x30, // ] - 0x28, // RETURN - 0xE0, // LEFT CONTROL - 0x04, // A - 0x16, // S - 0x07, // D - 0x09, // F - 0x0A, // G - 0x0B, // H - 0x0D, // J - 0x0E, // K - 0x0F, // L - 0x33, // ; - 0x34, // ' - 0x35, // ~ - 0xE1, // / - 0x31, // BACKSLASH (\) - 0x1D, // Z - 0x1B, // X - 0x06, // C - 0x19, // V - 0x05, // B - 0x11, // N - 0x10, // M - 0x36, // , - 0x37, // . - 0x38, // SLASH (/) - 0xE5, // RSHIFT - 0x55, // MULT (*) - 0xE2, // LEFT ALT - 0x2C, // SPACE - 0x39, // CAPSLOCK - 0x3A, // F1 - 0x3B, // F2 - 0x3C, // F3 - 0x3D, // F4 - 0x3E, // F5 - 0x3F, // F6 - 0x40, // F7 - 0x41, // F8 - 0x42, // F9 - 0x43, // F10 - 0x53, // NUMLOCK - 0x47, // SCROLLLOCK - 0x5F, // NUMPAD7 - 0x60, // NUMPAD8 - 0x61, // NUMPAD9 - 0x56, // SUBTRACT (KEYPAD -) - 0x5C, // NUMPAD4 - 0x5D, // NUMPAD5 - 0x5E, // NUMPAD6 - 0x57, // ADD (KEYPAD +) - 0x59, // NUMPAD1 - 0x5A, // NUMPAD2 - 0x5B, // NUMPAD3 - 0x62, // NUMPAD0 - 0x63, // DECIMAL (KEYPAD .) - 0x44, // F11 - 0x45, // F12 - 0x68, // F13 - 0x69, // F14 - 0x6A, // F15 - 0x87, // KANA - 0x88, // CONVERT - 0x89, // NONCONVERT - 0x8A, // YEN - 0x67, // NUMPAD= - 0x8B, // CIRCUMFLEX - 0x8C, // AT - 0x8D, // COLON - 0x9F, // UNDERLINE - 0x8E, // KANJI - 0x78, // STOP - 0x8F, // AX - 0x90, // UNLABELED - 0x58, // NUMPAD ENTER - 0xE4, // RIGHT CONTROL - 0x85, // NUMPAD COMMA - 0x54, // DIVIDE ( NUMPAD /) - 0x9A, // SYSREQ - 0xE6, // RIGHT ALT - 0x48, // PAUSE - 0x4A, // HOME - 0x52, // UP - 0x9D, // PRIOR - 0x50, // LEFT - 0x4F, // RIGHT - 0x4D, // END - 0x51, // DOWN - 0xA2, // NEXT - 0x49, // INSERT - 0x4C, // DELETE - 0xE3, // LEFT WIN - 0xE7, // RIGHT WIN - 0x65, // APPS - 0x66, // POWER - 0x66 // SLEEP - }; - - private OSXEnvironmentPlugin plugin; - private long lpDevice; - private long lpQueue; - private HashMap keys = new HashMap(); - - private static int[] COOKIETABLE = new int[CROSSTABLE.length ]; - - public OSXKeyboard( OSXEnvironmentPlugin plugin, long lpDevice, String productName ) - { - super( productName ); - - this.plugin = plugin; - this.lpDevice = lpDevice; - - openDevice(); - } - - public void openDevice() - { - this.lpQueue = plugin.openDevice( this.lpDevice, 256 ); - } - - public void closeDevice() - { - plugin.closeDevice( this.lpDevice, this.lpQueue ); - } - - public void addControllerElement(InputControllerElement element) - { - System.out.println("Adding keyboard elements usage page[" + element.getUsagePage() + "] usage [" + element.getUsage() + "] type [" + element.getElementType() + "]" ); - - switch( element.getUsagePage() ) - { - case OSXEnvironmentPlugin.HID_USAGEPAGE_KEYBOARD: - - System.out.println("Found keyboard element"); - - if ( element.getElementType() == OSXEnvironmentPlugin.HID_ELEMENTTYPE_INPUT_BUTTON ) - { - // register this key with the queue system as all buttons are retrieved from the - // input controllers queue - // - System.out.println("Registering button-key (usage page [" + element.getUsagePage() + "], usage[" + element.getUsage() + "], elementType [" + element.getElementType() + "], hidCookie [" + element.getHidCookie() + "])"); - - - if ( keys.get( new Long( element.getUsage() )) == null ) - { - plugin.registerDeviceElement( lpQueue, element.getHidCookie() ); - - keys.put( new Long( element.getUsage() ), element ); - System.out.println("Registered key [" + element.getHidCookie() + "]"); - } - else - { - System.out.println("Ignoring key [" + element.getHidCookie() + "] already enumerated."); - } - } - else - { - System.out.println("Ignoring non-button-key (usage page [" + element.getUsagePage() + "], usage[" + element.getUsage() + "], elementType [" + element.getElementType() + "], hidCookie [" + element.getHidCookie() + "])"); - } - break; - - default: - } - } - - public boolean poll() - { - plugin.pollDevice( lpQueue ); - - - return true; - } - - - /** Returns whether or not the given key has been pressed since the last - * call to poll. - * @param key The key whose state to check. - * @return true if this key has changed state since last read of its state, false otherwise. - */ - protected boolean isKeyPressed(Keyboard.Key key) - { - KeyID id = (KeyID)key.getIdentifier(); - int keyIndex = id.getKeyIndex(); - - // get that key code out of the crosstable and find the proper InputControllerElement/button for that key - // - //TODO: Optimize this - put the usages in another array the same size as the crosstable so the hidCookies - // can be retrieved directly without the Long creation - int usage = CROSSTABLE[keyIndex]; - InputControllerElement element = (InputControllerElement) keys.get( new Long(usage) ); - - - if ( element != null ) - { - int value = plugin.pollElement( lpDevice, element.getHidCookie() ); - - System.out.println("Key Poll result [" + value + "]"); - if ( value == 1 ) - { - return true; - } - else - { - return false; - } - } - - return false; - } -} diff --git a/plugins/OSX/src/java/net/java/games/input/OSXMouse.java b/plugins/OSX/src/java/net/java/games/input/OSXMouse.java deleted file mode 100644 index 31e683e..0000000 --- a/plugins/OSX/src/java/net/java/games/input/OSXMouse.java +++ /dev/null @@ -1,251 +0,0 @@ -package net.java.games.input; - -/** - * Created by IntelliJ IDEA. - * User: gpierce - * Date: Aug 2, 2003 - * Time: 3:57:00 PM - * To change this template use Options | File Templates. - */ -public class OSXMouse extends Mouse implements InputController -{ - private OSXEnvironmentPlugin plugin; - private long lpDevice; - private long lpQueue; - private int buttonCount = 0; - - - public OSXMouse( OSXEnvironmentPlugin plugin, long lpDevice, String productName ) - { - super( productName ); - - this.plugin = plugin; - this.lpDevice = lpDevice; - - openDevice(); - - buttons = new ButtonsImpl(); - ball = new BallImpl(); - } - - public void openDevice() - { - this.lpQueue = plugin.openDevice( this.lpDevice, 32 ); - } - - public void closeDevice() - { - plugin.closeDevice( this.lpDevice, this.lpQueue ); - } - - public boolean poll() - { - plugin.pollDevice( this.lpQueue ); - - return true; - } - - public void addControllerElement(InputControllerElement element) - { - - switch ( element.getUsagePage() ) - { - case OSXEnvironmentPlugin.HID_USAGEPAGE_BUTTON: - buttonCount ++; - System.out.println("Adding button [" + buttonCount + "]"); - ((ButtonsImpl)buttons).addButton(element); - break; - - - case OSXEnvironmentPlugin.HID_USAGEPAGE_GENERICDESKTOP: - switch( element.getUsage() ) - { - case OSXEnvironmentPlugin.HID_USAGE_POINTER: - System.out.println("Adding pointer - this will contain axis"); - break; - - case OSXEnvironmentPlugin.HID_USAGE_XAXIS: - ((BallImpl)ball).addXAxis(element); - System.out.println("Adding X Axis") ; - break; - - case OSXEnvironmentPlugin.HID_USAGE_YAXIS: - ((BallImpl)ball).addYAxis(element); - System.out.println("Adding Y Axis"); - break; - - case OSXEnvironmentPlugin.HID_USAGE_WHEEL: - ((BallImpl)ball).addWheelAxis(element); - System.out.println("Adding wheel"); - break; - - default: - - } - break; - - - default: - - } - } - - /** - * Implementation class representing the mouse ball - */ - class BallImpl extends Ball - { - /** - * Public constructor - */ - public BallImpl() - { - super(OSXMouse.this.getName() + " ball"); - } - - public void addXAxis( InputControllerElement element ) - { - x = new BallAxis( Axis.Identifier.X, element ); - } - - public void addYAxis( InputControllerElement element ) - { - y = new BallAxis( Axis.Identifier.Y, element ); - } - - public void addWheelAxis( InputControllerElement element ) - { - wheel = new BallAxis( Axis.Identifier.SLIDER, element ); - } - } - - - /** - * Implementation class representing the mouse buttons - */ - class ButtonsImpl extends Buttons - { - /** - * Public constructor - */ - public ButtonsImpl() - { - super(OSXMouse.this.getName() + " buttons"); - } - - public void addButton( InputControllerElement element ) - { - if ( left == null ) - { - left = new ButtonImpl( ButtonID.LEFT, element ); - } - else if ( right == null ) - { - right = new ButtonImpl( ButtonID.RIGHT, element ); - } - else if ( middle == null ) - { - middle = new ButtonImpl( ButtonID.MIDDLE, element ); - } - } - } - - /** - * Mouse button axis implementation - */ - class ButtonImpl extends Button - { - - private long hidCookie; - private boolean isRelative; - - - /** Public constructor - * @param id An ID of a button to create an obejct to represent. - * - */ - public ButtonImpl(ButtonID id, InputControllerElement element) - { - super(id.getName(), id); - this.hidCookie = element.getHidCookie(); - this.isRelative = element.isRelative(); - } - - /** Returns the data from the last time the control has been polled. - * If this axis is a button, the value returned will be either 0.0f or 1.0f. - * If this axis is normalized, the value returned will be between -1.0f and - * 1.0f. - * @return state of controller. (Note: DX8 mice actually - * queue state so what is returned is the next state, - * not necessarily the most current one.) - */ - public float getPollData() - { - return (float) plugin.pollElement( lpDevice, hidCookie ); - } - - /** Returns <code>true</code> if data returned from <code>poll</code> - * is relative to the last call, or <code>false</code> if data - * is absolute. - * @return true if data is relative, otherwise false. - */ - public boolean isRelative() - { - return isRelative; - } - } - - - /** - * Mouse ball axis implementation - */ - class BallAxis extends AbstractAxis - { - - private long hidCookie; - private boolean isRelative; - - /** Public constructor - * @param id An ID for a mouse axis to create an object to represent. - */ - public BallAxis(Identifier id, InputControllerElement element) - { - super(id.getName(), id); - - this.hidCookie = element.getHidCookie(); - this.isRelative = element.isRelative(); - } - - /** Returns the data from the last time the control has been polled. - * If this axis is a button, the value returned will be either 0.0f or 1.0f. - * If this axis is normalized, the value returned will be between -1.0f and - * 1.0f. - * @return data. (Note that mice queue state in DX8 so what - * is returned is the next stae in the queue, not - * necessarily the most current one.) - */ - public float getPollData() - { - return (float) plugin.pollElement( lpDevice, hidCookie ); - } - - /** Returns <code>true</code> if data returned from <code>poll</code> - * is relative to the last call, or <code>false</code> if data - * is absolute. - * @return true if relative, otherwise false. - */ - public boolean isRelative() - { - return isRelative; - } - - /** Returns whether or not the axis is analog, or false if it is digital. - * @return true if analog, false if digital - */ - public boolean isAnalog() - { - return true; - } - } - -} diff --git a/plugins/OSX/src/native/build.xml b/plugins/OSX/src/native/build.xml deleted file mode 100644 index b88c856..0000000 --- a/plugins/OSX/src/native/build.xml +++ /dev/null @@ -1,23 +0,0 @@ -<?xml version="1.0" ?> -<project name="OS X Plugin, Native code" basedir="." default="compileNativeJinputLib"> - <description>OSX JInput Native Plugin</description> - <property name="src" location="src" /> - <property name="build" location="classes" /> - <property name="dist" location="../../dist" /> - <property name="plugins" location="plugins" /> - - <target name="init"> - <mkdir dir="build"/> - </target> - - <target name="compileNativeJinputLib" depends="init"> - <exec dir="." executable="cc" os="Mac OS X"> - - <arg line="-c -I${java.home}/include jinputjnilib.c"/> - </exec> - <exec dir="." executable="cc" os="Mac OS X"> - <arg line="-bundle -o libjinput.jnilib jinputjnilib.o -framework JavaVM -framework CoreFoundation -framework IOKit "/> - </exec> - </target> - -</project> diff --git a/plugins/OSX/src/native/jinputjnilib.c b/plugins/OSX/src/native/jinputjnilib.c deleted file mode 100644 index 86c7347..0000000 --- a/plugins/OSX/src/native/jinputjnilib.c +++ /dev/null @@ -1,839 +0,0 @@ -/* - * %W% %E% - * - * Copyright 2002 Sun Microsystems, Inc. All rights reserved. - * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. - */ -/***************************************************************************** -* Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved. -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* - Redistribution of source code must retain the above copyright notice, -* this list of conditions and the following disclaimer. -* -* - Redistribution in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materails provided with the distribution. -* -* Neither the name Sun Microsystems, Inc. or the names of the contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* This software is provided "AS IS," without a warranty of any kind. -* ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING -* ANY IMPLIED WARRANT OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR -* NON-INFRINGEMEN, ARE HEREBY EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN") AND -* ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS -* A RESULT OF USING, MODIFYING OR DESTRIBUTING THIS SOFTWARE OR ITS -* DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST -* REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, -* INCIDENTAL OR PUNITIVE DAMAGES. HOWEVER CAUSED AND REGARDLESS OF THE THEORY -* OF LIABILITY, ARISING OUT OF THE USE OF OUR INABILITY TO USE THIS SOFTWARE, -* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* -* You acknowledge that this software is not designed or intended for us in -* the design, construction, operation or maintenance of any nuclear facility -* -*****************************************************************************/ - -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <ctype.h> -#include <sys/errno.h> -#include <sysexits.h> -#include <mach/mach.h> -#include <mach/mach_error.h> -#include <IOKit/IOKitLib.h> -#include <IOKit/IOCFPlugIn.h> -#include <IOKit/hid/IOHIDLib.h> -#include <IOKit/hid/IOHIDKeys.h> -#include <CoreFoundation/CoreFoundation.h> -#include <Carbon/Carbon.h> -#include "net_java_games_input_OSXEnvironmentPlugin.h" - -Boolean init( JNIEnv * env ); -void createMasterPort(); -void disposeMasterPort(); - - -void createHIDDevice(io_object_t hidDevice, IOHIDDeviceInterface ***hidDeviceInterface); -IOReturn openDevice(IOHIDDeviceInterface ***hidDeviceInterface); -IOReturn closeDevice(IOHIDDeviceInterface ***hidDeviceInterface); - - -Boolean showDictionaryElement (CFDictionaryRef dictionary, CFStringRef key); -void showProperty(const void * key, const void * value); -void displayCFProperty(CFStringRef object, CFTypeRef value); -void CFObjectShow( CFTypeRef value ); -void CFObjectSend( CFTypeRef value ); - -jclass CLASS_JNIWrapper = NULL; -jmethodID MID_AddController = NULL; -jmethodID MID_AddControllerElement = NULL; -mach_port_t masterPort = NULL; -io_iterator_t hidObjectIterator; - -long elementCookie; -long elementType; -long usage; -long usagePage; -long min; -long max; -long scaledMin; -long scaledMax; -long size; -jboolean isRelative; -jboolean isWrapping; -jboolean isNonLinear; - - -JNIEnv * lpEnv; -jlong lpDevice; -jobject lpObj; -jboolean completeElement = JNI_FALSE; - - - - -Boolean showDictionaryElement (CFDictionaryRef dictionary, CFStringRef key) -{ - CFTypeRef value = CFDictionaryGetValue (dictionary, key); - if (value) - { - const char * c = CFStringGetCStringPtr (key, CFStringGetSystemEncoding ()); - if (c) - { - printf ("%s", c); - } - else - { - CFIndex bufferSize = CFStringGetLength (key) + 1; - char * buffer = (char *)malloc (bufferSize); - if (buffer) - { - if (CFStringGetCString (key, buffer, bufferSize, CFStringGetSystemEncoding ())) - printf ("%s", buffer); - free(buffer); - } - } - - printf("="); - - CFObjectShow( value ); - - printf("\n"); - } - return (value != NULL); -} - -static void showCFArray (const void * value, void * parameter) -{ - if (CFGetTypeID (value) != CFDictionaryGetTypeID ()) - { - return; - } - - CFObjectShow(value); -} - -void CFObjectShow( CFTypeRef value ) -{ - CFTypeID type = CFGetTypeID(value); - if (type == CFArrayGetTypeID()) - { - CFRange range = {0, CFArrayGetCount (value)}; - - //Show an element array containing one or more element dictionaries - CFArrayApplyFunction (value, range, showCFArray, 0); - } - else if (type == CFBooleanGetTypeID()) - { - printf(CFBooleanGetValue(value) ? "true" : "false"); - } - else if (type == CFDictionaryGetTypeID()) - { - printf("Map\n"); - - - showDictionaryElement (value, CFSTR(kIOHIDElementCookieKey)); - showDictionaryElement (value, CFSTR(kIOHIDElementCollectionTypeKey)); - - showDictionaryElement (value, CFSTR(kIOHIDElementMinKey)); - showDictionaryElement (value, CFSTR(kIOHIDElementMaxKey)); - showDictionaryElement (value, CFSTR(kIOHIDElementScaledMinKey)); - showDictionaryElement (value, CFSTR(kIOHIDElementScaledMaxKey)); - - showDictionaryElement (value, CFSTR(kIOHIDElementSizeKey)); - showDictionaryElement (value, CFSTR(kIOHIDElementIsRelativeKey)); - showDictionaryElement (value, CFSTR(kIOHIDElementIsWrappingKey)); - showDictionaryElement (value, CFSTR(kIOHIDElementIsNonLinearKey)); -#ifdef kIOHIDElementHasPreferredStateKey - showDictionaryElement (value, CFSTR(kIOHIDElementHasPreferredStateKey)); -#else - showDictionaryElement (value, CFSTR(kIOHIDElementHasPreferedStateKey)); -#endif - showDictionaryElement (value, CFSTR(kIOHIDElementHasNullStateKey)); - showDictionaryElement (value, CFSTR(kIOHIDElementVendorSpecificKey)); - showDictionaryElement (value, CFSTR(kIOHIDElementUnitKey)); - showDictionaryElement (value, CFSTR(kIOHIDElementUnitExponentKey)); - showDictionaryElement (value, CFSTR(kIOHIDElementNameKey)); - showDictionaryElement (value, CFSTR(kIOHIDElementKey)); - - printf("\n\n\n"); - } - else if (type == CFNumberGetTypeID()) - { - long number; - if (CFNumberGetValue (value, kCFNumberLongType, &number)) - { - printf("0x%lx (%ld)", number, number); - } - } - else if (type == CFStringGetTypeID()) - { - const char * c = CFStringGetCStringPtr (value, CFStringGetSystemEncoding ()); - if (c) - { - printf ("%s", c); - } - else - { - CFIndex bufferSize = CFStringGetLength (value) + 1; - char * buffer = (char *)malloc (bufferSize); - if (buffer) - { - if (CFStringGetCString (value, buffer, bufferSize, CFStringGetSystemEncoding ())) - { - printf ("%s", buffer); - } - - free(buffer); - } - } - } -} - -//////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////// - -Boolean init(JNIEnv* env) -{ - CLASS_JNIWrapper = (*env)->FindClass(env,"net/java/games/input/OSXEnvironmentPlugin"); - if ( CLASS_JNIWrapper == NULL ) - { - printf("Class OSXEnvironmentPlugin not found... \n"); - return FALSE; - } - - MID_AddController = (*env)->GetMethodID(env, CLASS_JNIWrapper, "addController", "(JLjava/lang/String;I)V"); - if (MID_AddController == NULL) - { - printf("Method addController not found... \n"); - return FALSE; - } - - MID_AddControllerElement = (*env)->GetMethodID(env, CLASS_JNIWrapper, "addControllerElement", "(JJIIIIIIIIZZZZZ)V"); - if (MID_AddControllerElement == NULL) - { - printf("Method addControllerElement not found... \n"); - return FALSE; - } - - return TRUE; -} - -void createMasterPort() -{ - IOReturn ioReturnValue = kIOReturnSuccess; - - //Get a Mach port to initiate communication with I/O Kit. - // - ioReturnValue = IOMasterPort(bootstrap_port, &masterPort); -} - -void disposeMasterPort() -{ - //Free master port if we created one. - // - if (masterPort) - { - mach_port_deallocate(mach_task_self(), masterPort); - } -} - -void createHIDDevice( io_object_t hidDevice, IOHIDDeviceInterface ***hidDeviceInterface ) -{ - io_name_t className; - IOCFPlugInInterface **plugInInterface = NULL; - HRESULT plugInResult = S_OK; - SInt32 score = 0; - IOReturn ioReturnValue = kIOReturnSuccess; - - ioReturnValue = IOObjectGetClass(hidDevice, className); - if ( ioReturnValue != kIOReturnSuccess ) - { - printf("Failed to get IOObject class name."); - } - - printf("Found device type [%s]\n", className); - - ioReturnValue = IOCreatePlugInInterfaceForService(hidDevice, - kIOHIDDeviceUserClientTypeID, - kIOCFPlugInInterfaceID, - &plugInInterface, - &score); - - if (ioReturnValue == kIOReturnSuccess) - { - //Call a method of the intermediate plug-in to create the device - //interface - // - plugInResult = (*plugInInterface)->QueryInterface(plugInInterface, - CFUUIDGetUUIDBytes(kIOHIDDeviceInterfaceID), - (LPVOID) hidDeviceInterface); - if ( plugInResult != S_OK ) - { - printf("Couldn't create HID class device interface"); - } - - (*plugInInterface)->Release(plugInInterface); - } -} - -IOReturn openDevice(IOHIDDeviceInterface ***hidDeviceInterface) -{ - IOReturn ioReturnValue = kIOReturnSuccess; - - //todo, change this to be controlled from the java layer at each device - // - ioReturnValue = (**hidDeviceInterface)->open(*hidDeviceInterface, 0 ); - if ( ioReturnValue != kIOReturnSuccess ) - { - printf("Unable to open device - return [%d]\n", ioReturnValue ); - } - else - { - printf("Successfully opened device \n"); - } - - return ioReturnValue; -} - -IOReturn closeDevice(IOHIDDeviceInterface ***hidDeviceInterface) -{ - IOReturn ioReturnValue = kIOReturnSuccess; - - ioReturnValue = (**hidDeviceInterface)->close(*hidDeviceInterface); - if ( ioReturnValue != kIOReturnSuccess ) - { - printf("Unable to close device - return [%d]\n", ioReturnValue ); - } - else - { - printf("Successfully closed device \n"); - } - - // release the device interface - // - (**hidDeviceInterface)->Release(*hidDeviceInterface); - - return ioReturnValue; -} - -static void sendCFArray(const void * value, void * parameter) -{ - if (CFGetTypeID (value) != CFDictionaryGetTypeID ()) - { - return; - } - - CFObjectSend(value); -} - -void CFObjectSend( CFTypeRef value ) -{ - CFTypeID type = CFGetTypeID(value); - if (type == CFArrayGetTypeID()) - { - CFRange range = {0, CFArrayGetCount (value)}; - - //Show an element array containing one or more element dictionaries - CFArrayApplyFunction (value, range, sendCFArray, 0); - } - else if (type == CFDictionaryGetTypeID()) - { -// printf("Sending Map\n"); - - - CFTypeRef val = CFDictionaryGetValue( value, CFSTR(kIOHIDElementCookieKey) ); - if ( val ) - { - CFNumberGetValue ( val , kCFNumberLongType, &elementCookie); - printf("ElementCookie - 0x%lx (%ld) \n", elementCookie, elementCookie); - } - - val = CFDictionaryGetValue( value, CFSTR(kIOHIDElementTypeKey) ); - if ( val ) - { - CFNumberGetValue ( val, kCFNumberLongType, &elementType); - printf("element Type - 0x%lx (%ld) \n", elementType, elementType); - } - - val = CFDictionaryGetValue( value, CFSTR(kIOHIDElementUsageKey) ); - if ( val ) - { - CFNumberGetValue ( val, kCFNumberLongType, &usage); - printf("usage - 0x%lx (%ld) \n", usage, usage); - } - - val = CFDictionaryGetValue( value, CFSTR(kIOHIDElementUsagePageKey) ); - if ( val ) - { - CFNumberGetValue ( val, kCFNumberLongType, &usagePage); - printf("usage page- 0x%lx (%ld) \n", usagePage, usagePage); - } - - val = CFDictionaryGetValue( value, CFSTR(kIOHIDElementMinKey) ); - if ( val ) - { - CFNumberGetValue ( val, kCFNumberLongType, &min); - //printf("min - 0x%lx (%ld) \n", min, min); - } - - val = CFDictionaryGetValue( value, CFSTR(kIOHIDElementMaxKey) ); - if ( val ) - { - CFNumberGetValue ( val, kCFNumberLongType, &max); - //printf("max - 0x%lx (%ld) \n", max, max); - } - - val = CFDictionaryGetValue( value, CFSTR(kIOHIDElementScaledMinKey) ); - if ( val ) - { - CFNumberGetValue ( val, kCFNumberLongType, &scaledMin); - //printf("scaledMin - 0x%lx (%ld) \n", scaledMin, scaledMin); - } - - val = CFDictionaryGetValue( value, CFSTR(kIOHIDElementScaledMaxKey) ); - if ( val ) - { - CFNumberGetValue ( val, kCFNumberLongType, &scaledMax); - //printf("scaledMax - 0x%lx (%ld) \n", scaledMax, scaledMax); - } - - val = CFDictionaryGetValue( value, CFSTR(kIOHIDElementSizeKey) ); - if ( val ) - { - CFNumberGetValue ( val, kCFNumberLongType, &size); - //printf("Size - 0x%lx (%ld) \n", size, size); - } - - jboolean isRelative = JNI_FALSE; - val = CFDictionaryGetValue( value, CFSTR(kIOHIDElementIsRelativeKey) ); - if ( val ) - { - isRelative = (CFBooleanGetValue(val) ? JNI_TRUE : JNI_FALSE); - } - - - jboolean isWrapping = JNI_FALSE; - val = CFDictionaryGetValue( value, CFSTR(kIOHIDElementIsWrappingKey) ); - if ( val ) - { - isWrapping = (CFBooleanGetValue(val) ? JNI_TRUE : JNI_FALSE); - } - - - jboolean isNonLinear = JNI_FALSE; - val = CFDictionaryGetValue( value, CFSTR(kIOHIDElementIsNonLinearKey) ); - if ( val ) - { - isNonLinear = (CFBooleanGetValue(val) ? JNI_TRUE : JNI_FALSE); - } - - - jboolean hasPreferredState = JNI_FALSE; -#ifdef kIOHIDElementHasPreferredStateKey - val = CFDictionaryGetValue( value, CFSTR(kIOHIDElementHasPreferredStateKey) ); - if ( val ) - { - hasPreferredState = (CFBooleanGetValue(val) ? JNI_TRUE : JNI_FALSE); - } -#else - val = CFDictionaryGetValue( value, CFSTR(kIOHIDElementHasPreferedStateKey) ); - if ( val ) - { - hasPreferredState = (CFBooleanGetValue(val) ? JNI_TRUE : JNI_FALSE); - } -#endif - - jboolean hasNullState = JNI_FALSE; - val = CFDictionaryGetValue( value, CFSTR(kIOHIDElementHasNullStateKey) ); - if ( val ) - { - hasNullState = (CFBooleanGetValue(val) ? JNI_TRUE : JNI_FALSE); - } - - (*lpEnv)->CallVoidMethod(lpEnv, lpObj, MID_AddControllerElement, - (jlong)(long)lpDevice, - (jlong)(long)elementCookie, - (jint)(long)elementType, - (jint)(long)usage, - (jint)(long)usagePage, - (jint)(long)min, - (jint)(long)max, - (jint)(long)scaledMin, - (jint)(long)scaledMax, - (jint)(long)size, - (jboolean)isRelative, - (jboolean)isWrapping, - (jboolean)isNonLinear, - (jboolean)hasPreferredState, - (jboolean)hasNullState); - -// printf("End of element definition \n"); - - - - CFTypeRef object = CFDictionaryGetValue (value, CFSTR(kIOHIDElementKey)); - if (object) - { - CFObjectSend( object ); - } - - printf("\n\n\n"); - } -} - -void addControllerElements( CFMutableDictionaryRef dictionary, CFStringRef key ) -{ - printf("Adding controller elements\n"); - - CFTypeRef value = CFDictionaryGetValue (dictionary, key); - if (value) - { - CFRange range = {0, CFArrayGetCount (value)}; - CFArrayApplyFunction (value, range, sendCFArray, 0); - } -} - -/* - * Class: net_java_games_input_OSXEnvironmentPlugin - * Method: hidCreate - * Signature: ()V - */ -JNIEXPORT void JNICALL Java_net_java_games_input_OSXEnvironmentPlugin_hidCreate - (JNIEnv * env, jobject obj) -{ - if ( init( env ) ) - { - createMasterPort(); - } -} -/* - * Class: net_java_games_input_OSXEnvironmentPlugin - * Method: hidDispose - * Signature: ()V - */ -JNIEXPORT void JNICALL Java_net_java_games_input_OSXEnvironmentPlugin_hidDispose - (JNIEnv * env, jobject obj) -{ - disposeMasterPort(); -} - - -/* - * Class: net_java_games_input_OSXEnvironmentPlugin - * Method: enumDevices - * Signature: ()V - */ -JNIEXPORT void JNICALL Java_net_java_games_input_OSXEnvironmentPlugin_enumDevices - (JNIEnv * env, jobject obj) -{ - - lpEnv = env; - lpObj = obj; - - CFMutableDictionaryRef hidMatchDictionary = NULL; - IOReturn ioReturnValue = kIOReturnSuccess; - Boolean noMatchingDevices = false; - - // Set up a matching dictionary to search the I/O Registry by class - // name for all HID class devices - // - hidMatchDictionary = IOServiceMatching(kIOHIDDeviceKey); - - // Now search I/O Registry for matching devices. - // - ioReturnValue = IOServiceGetMatchingServices(masterPort, hidMatchDictionary, &hidObjectIterator); - - noMatchingDevices = ((ioReturnValue != kIOReturnSuccess) | (hidObjectIterator == NULL)); - - // If search is unsuccessful, print message . - // - if (noMatchingDevices) - { - printf("No matching HID class devices found."); - return; - } - - // IOServiceGetMatchingServices consumes a reference to the - // dictionary, so we don't need to release the dictionary ref. - // - hidMatchDictionary = NULL; - - io_object_t hidDevice = NULL; - IOHIDDeviceInterface **hidDeviceInterface = NULL; - CFMutableDictionaryRef properties = 0; - char path[512]; - kern_return_t result; - - - while ((hidDevice = IOIteratorNext(hidObjectIterator))) - { - result = IORegistryEntryGetPath(hidDevice, kIOServicePlane, path); - - if ( result == KERN_SUCCESS ) - { - result = IORegistryEntryCreateCFProperties(hidDevice, - &properties, - kCFAllocatorDefault, - kNilOptions); - } - - if ((result == KERN_SUCCESS) && properties) - { - //showDictionaryElement(properties, CFSTR(kIOHIDTransportKey)); - //showDictionaryElement(properties, CFSTR(kIOHIDVendorKey)); - //printf("ProductID: "); showDictionaryElement(properties, CFSTR(kIOHIDProductIDKey)); - //printf("VersionNumber: "); showDictionaryElement(properties, CFSTR(kIOHIDVersionNumberKey)); - //printf("Manufacturer: "); showDictionaryElement(properties, CFSTR(kIOHIDManufacturerKey)); - //printf("ProductKey: "); showDictionaryElement(properties, CFSTR(kIOHIDProductKey)); - //printf("SerialNumber: "); showDictionaryElement(properties, CFSTR(kIOHIDSerialNumberKey)); - //showDictionaryElement(properties, CFSTR(kIOHIDLocationIDKey)); - //printf("PrimaryUsage: "); showDictionaryElement(properties, CFSTR(kIOHIDPrimaryUsageKey)); - //showDictionaryElement(properties, CFSTR(kIOHIDPrimaryUsagePageKey)); - //showDictionaryElement(properties, CFSTR(kIOHIDElementKey)); - - - - // get the product name - // - CFTypeRef productName = CFDictionaryGetValue (properties, CFSTR(kIOHIDProductKey)); - - // get the usage for this product - // - long usage; - CFNumberGetValue ( CFDictionaryGetValue( properties, CFSTR(kIOHIDPrimaryUsageKey) ), kCFNumberLongType, &usage); - - - createHIDDevice( hidDevice, &hidDeviceInterface ); - - IOObjectRelease( hidDevice ); - - if ( hidDeviceInterface != NULL ) - { - (*env)->CallVoidMethod(env, obj, MID_AddController, - (jlong)(long)hidDeviceInterface, - (*env)->NewStringUTF( env, CFStringGetCStringPtr( productName, CFStringGetSystemEncoding()) ), - (jint)usage ); - lpEnv = env; - lpDevice = (jlong)(long)hidDeviceInterface; - - addControllerElements( properties, CFSTR(kIOHIDElementKey) ); - - - } - - //Release the properties dictionary - CFRelease(properties); - } - - } - - IOObjectRelease(hidObjectIterator); -} - -/* - * Class: net_java_games_input_OSXEnvironmentPlugin - * Method: openDevice - * Signature: (JI)J - */ -JNIEXPORT jlong JNICALL Java_net_java_games_input_OSXEnvironmentPlugin_openDevice - (JNIEnv * env, jobject obj, jlong lpDevice, jint queueDepth) -{ - IOHIDDeviceInterface **hidDeviceInterface = NULL; - hidDeviceInterface = (IOHIDDeviceInterface **) (long)lpDevice; - openDevice( &hidDeviceInterface ); - - - IOHIDQueueInterface **queue = NULL; - queue = (*hidDeviceInterface)->allocQueue(hidDeviceInterface); - - if (queue) - { - // create a queue and specify how deep they want the input queue to be - // - (*queue)->create( queue, 0, (int)queueDepth ); - printf("InputQueue created %lx with depth %d \n", (long) queue, (int)queueDepth ); - - // start the input queue - // - (*queue)->start( queue ); - } - else - { - printf("Unable to create queue for device! \n"); - } - - return (jlong)(long)queue; - -} - -/* - * Class: net_java_games_input_OSXEnvironmentPlugin - * Method: closeDevice - * Signature: (JJ)V - */ -JNIEXPORT void JNICALL Java_net_java_games_input_OSXEnvironmentPlugin_closeDevice - (JNIEnv * env, jobject obj, jlong lpDevice, jlong lpQueue) -{ - IOHIDDeviceInterface **hidDeviceInterface = NULL; - hidDeviceInterface = (IOHIDDeviceInterface **) (long)lpDevice; - - IOHIDQueueInterface **queue = NULL; - queue = (IOHIDQueueInterface **)(long)lpQueue; - - // stop the queue - // - (*queue)->stop(queue); - - // dispose of the queue - // - (*queue)->dispose(queue); - - // release the queue - // - (*queue)->Release(queue); - - // close the input device - // - closeDevice( &hidDeviceInterface ); -} - -/* - * Class: net_java_games_input_OSXEnvironmentPlugin - * Method: pollDevice - * Signature: (J)I - */ -JNIEXPORT jint JNICALL Java_net_java_games_input_OSXEnvironmentPlugin_pollDevice - (JNIEnv * env, jobject obj, jlong lpQueue) -{ - IOHIDEventStruct event; - - IOHIDQueueInterface **queue = NULL; - queue = (IOHIDQueueInterface **)(long)lpQueue; - - AbsoluteTime zeroTime = {0,0}; - IOReturn ioReturnValue = kIOReturnSuccess; - - ioReturnValue = (*queue)->getNextEvent(queue, &event, zeroTime, 0); - if ( ioReturnValue == kIOReturnSuccess ) - { - printf("Queue getNextEvent return value: %ld\n", (long)ioReturnValue ); - } - else - { - printf("Queue event[%lx] %ld\n", (unsigned long) event.elementCookie, event.value ); - } - - return (jint) event.value; -} - -/* - * Class: net_java_games_input_OSXEnvironmentPlugin - * Method: pollDevice - * Signature: (JJ)I - */ -JNIEXPORT jint JNICALL Java_net_java_games_input_OSXEnvironmentPlugin_pollElement - (JNIEnv * env, jobject obj, jlong lpDevice, jlong hidCookie) -{ - IOHIDDeviceInterface **hidDeviceInterface = NULL; - hidDeviceInterface = (IOHIDDeviceInterface **) (long)lpDevice; - - IOHIDElementCookie cookie = (IOHIDElementCookie)(long)hidCookie; - - IOHIDEventStruct event; - - IOReturn ioReturnValue = kIOReturnSuccess; - - ioReturnValue = (*hidDeviceInterface)->getElementValue(hidDeviceInterface, cookie, &event); - if ( ioReturnValue == kIOReturnSuccess ) - { - printf("Queue getNextEvent return value: %ld\n", (long)ioReturnValue ); - } - else - { - printf("Queue event[%lx] %ld\n", (unsigned long) event.elementCookie, event.value ); - } - - return (jint) event.value; -} - - -/* - * Class: net_java_games_input_OSXEnvironmentPlugin - * Method: registerDeviceElement - * Signature: (JJ)V - */ -JNIEXPORT void JNICALL Java_net_java_games_input_OSXEnvironmentPlugin_registerDeviceElement - (JNIEnv * env, jobject obj, jlong lpQueue, jlong hidCookie) -{ - IOHIDQueueInterface **queue = NULL; - queue = (IOHIDQueueInterface **)(long)lpQueue; - - IOHIDElementCookie cookie = (IOHIDElementCookie)(long)hidCookie; - IOReturn ioReturnValue = kIOReturnSuccess; - - ioReturnValue = (*queue)->addElement(queue, cookie, 0); - if ( ioReturnValue == kIOReturnSuccess ) - { - printf("Registered pollElement: %ld\n", (long)cookie ); - } - else - { - printf("Failed to add poll element: %ld\n", (long)cookie ); - } -} - -/* - * Class: net_java_games_input_OSXEnvironmentPlugin - * Method: deregisterDeviceElement - * Signature: (JJ)V - */ -JNIEXPORT void JNICALL Java_net_java_games_input_OSXEnvironmentPlugin_deregisterDeviceElement - (JNIEnv * env, jobject obj, jlong lpQueue, jlong hidCookie) -{ - IOHIDQueueInterface **queue = NULL; - queue = (IOHIDQueueInterface **)(long)lpQueue; - - IOHIDElementCookie cookie = (IOHIDElementCookie)(long)hidCookie; - - IOReturn ioReturnValue = kIOReturnSuccess; - - ioReturnValue = (*queue)->removeElement(queue, cookie ); - if ( ioReturnValue == kIOReturnSuccess ) - { - printf("Removed pollElement: %ld\n", (long)cookie ); - } - else - { - printf("Failed to remove poll element: %ld\n", (long)cookie ); - } -} - - - |