Initial update - partial merge with JInput

This commit is contained in:
gregorypierce 2003-08-05 18:31:29 +00:00
parent 6f376aacfe
commit 6e8132cedf
7 changed files with 699 additions and 0 deletions

View file

@ -0,0 +1,220 @@
package net.java.games.input;
import java.util.HashMap;
/**
* Created by IntelliJ IDEA.
* User: gpierce
* Date: Aug 2, 2003
* Time: 2:57:15 PM
* To change this template use Options | File Templates.
*/
public class InputController
{
private OSXEnvironmentPlugin plugin;
private long lpDevice;
private long lpQueue;
private int queueDepth;
private String transportKey;
private int vendorID;
private int productID;
private int version;
private String manufacturer;
private String productName;
private String serialNumber;
private int usbLocationID;
private int usagePage;
private int usage;
private HashMap controllerElements = new HashMap();
public InputController( OSXEnvironmentPlugin plugin )
{
this.plugin = plugin;
}
public InputController(OSXEnvironmentPlugin plugin, long lpDevice, String productName, int usage)
{
this.plugin = plugin;
this.lpDevice = lpDevice;
this.productName = productName;
this.usage = usage;
}
public InputController( OSXEnvironmentPlugin plugin, long lpDevice, String transportKey, int vendorID, int productID, int version, String manufacturer, String productName, String serialNumber, int usbLocationID, int usagePage, int usage)
{
this.plugin = plugin;
this.lpDevice = lpDevice;
this.transportKey = transportKey;
this.vendorID = vendorID;
this.productID = productID;
this.version = version;
this.manufacturer = manufacturer;
this.productName = productName;
this.serialNumber = serialNumber;
this.usbLocationID = usbLocationID;
this.usagePage = usagePage;
this.usage = usage;
}
public long getLpQueue()
{
return lpQueue;
}
public void setLpQueue(long lpQueue)
{
this.lpQueue = lpQueue;
}
public int getQueueDepth()
{
return queueDepth;
}
public void setQueueDepth(int queueDepth)
{
this.queueDepth = queueDepth;
}
public long getLpDevice()
{
return lpDevice;
}
public void setLpDevice(long lpDevice)
{
this.lpDevice = lpDevice;
}
public String getTransportKey()
{
return transportKey;
}
public void setTransportKey(String transportKey)
{
this.transportKey = transportKey;
}
public int getVendorID()
{
return vendorID;
}
public void setVendorID(int vendorID)
{
this.vendorID = vendorID;
}
public int getProductID()
{
return productID;
}
public void setProductID(int productID)
{
this.productID = productID;
}
public int getVersion()
{
return version;
}
public void setVersion(int version)
{
this.version = version;
}
public String getManufacturer()
{
return manufacturer;
}
public void setManufacturer(String manufacturer)
{
this.manufacturer = manufacturer;
}
public String getProductName()
{
return productName;
}
public void setProductName(String productName)
{
this.productName = productName;
}
public String getSerialNumber()
{
return serialNumber;
}
public void setSerialNumber(String serialNumber)
{
this.serialNumber = serialNumber;
}
public int getUsbLocationID()
{
return usbLocationID;
}
public void setUsbLocationID(int usbLocationID)
{
this.usbLocationID = usbLocationID;
}
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 HashMap getControllerElements()
{
return controllerElements;
}
public void addControllerElement( InputControllerElement controllerElement )
{
controllerElements.put( new Long(controllerElement.getHidCookie()), controllerElement );
}
public InputControllerElement getControllerElement( long hidCookie )
{
return (InputControllerElement) controllerElements.get( new Long( hidCookie ) );
}
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 );
}
}

View file

@ -0,0 +1,183 @@
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 String elementName;
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, String elementName,
int rawMin, int rawMax, int scaledMin, int scaledMax,
int dataBitSize, boolean relative, boolean wrapping,
boolean nonLinear, boolean hasPreferredState, boolean hasNullState )
{
this.hidCookie = hidCookie;
this.elementType = elementType;
this.elementName = elementName;
this.rawMin = rawMin;
this.rawMax = rawMax;
this.scaledMin = scaledMin;
this.scaledMax = scaledMax;
this.dataBitSize = dataBitSize;
isRelative = relative;
isWrapping = wrapping;
isNonLinear = nonLinear;
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 String getElementName()
{
return elementName;
}
public void setElementName(String elementName)
{
this.elementName = elementName;
}
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;
}
}

View file

@ -0,0 +1,192 @@
/*
* %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
{
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 lpInputQueue );
public native void pollDevice( long lpInputQueue );
private static final int HID_DEVICE_MOUSE = 0x02;
private static final int HID_DEVICE_JOYSTICK = 0x04;
private static final int HID_DEVICE_GAMEPAD = 0x05;
private static final int HID_DEVICE_KEYBOARD = 0x06;
private HashMap devices = new HashMap();
public OSXEnvironmentPlugin()
{
System.out.println("net.java.games.input.OSXEnvironmentPlugin instance created");
}
public Controller[] getControllers()
{
return (Controller[])devices.values().toArray();
}
public InputController createController( long lpDevice,
String productName,
int usage )
{
switch (usage)
{
case (HID_DEVICE_MOUSE):
System.out.println("Found mouse [" + productName + "]");
return new OSXMouse( this, lpDevice, productName, usage );
case (HID_DEVICE_JOYSTICK):
System.out.println("Found joystick [" + productName + "]");
return new OSXJoystick( this, lpDevice, productName, usage );
case (HID_DEVICE_GAMEPAD):
System.out.println("Found gamepad [" + productName + "]");
return new OSXGamepad( this, lpDevice, productName, usage );
case (HID_DEVICE_KEYBOARD):
System.out.println("Found keyboard [" + productName + "]");
return new OSXKeyboard( this, lpDevice, productName, usage );
default:
System.out.println("Found device of unknown type [" + usage + "],[" + productName + "] - ignoring");
return null;
}
}
private void addController( long lpDevice,
String productName,
int usage )
{
InputController controller = null;
controller = createController( lpDevice, productName, usage );
if ( controller != null )
{
devices.put( productName, controller );
}
}
private void addControllerElement( long lpDevice,
long hidCookie,
int elementType,
String elementName,
int rawMin,
int rawMax,
int scaledMin,
int scaledMax,
int dataBitSize,
boolean relative,
boolean wrapping,
boolean nonLinear,
boolean hasPreferredState,
boolean hasNullState)
{
InputControllerElement element = new InputControllerElement( hidCookie, elementType, elementName,
rawMin, rawMax, scaledMin, scaledMax,
dataBitSize, relative, wrapping, nonLinear,
hasPreferredState, hasNullState );
}
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();
System.out.println("Creating HID engine");
newjni.hidCreate();
System.out.println("Enumerating devices");
newjni.enumDevices();
System.out.println("Disposing HID engine");
newjni.hidDispose();
System.out.println("Done");
}
}

View file

@ -0,0 +1,26 @@
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 InputController
{
public OSXGamepad( OSXEnvironmentPlugin plugin )
{
super( plugin );
}
public OSXGamepad( OSXEnvironmentPlugin plugin, long lpDevice, String productName, int usage )
{
super( plugin, lpDevice, productName, usage );
}
public OSXGamepad( OSXEnvironmentPlugin plugin, long lpDevice, String transportKey, int vendorID, int productID, int version, String manufacturer, String productName, String serialNumber, int usbLocationID, int usagePage, int usage)
{
super( plugin, lpDevice, transportKey, vendorID, productID, version, manufacturer, productName, serialNumber, usbLocationID, usagePage, usage );
}
}

View file

@ -0,0 +1,26 @@
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 InputController
{
public OSXJoystick( OSXEnvironmentPlugin plugin )
{
super( plugin );
}
public OSXJoystick( OSXEnvironmentPlugin plugin, long lpDevice, String productName, int usage )
{
super( plugin, lpDevice, productName, usage );
}
public OSXJoystick( OSXEnvironmentPlugin plugin, long lpDevice, String transportKey, int vendorID, int productID, int version, String manufacturer, String productName, String serialNumber, int usbLocationID, int usagePage, int usage)
{
super( plugin, lpDevice, transportKey, vendorID, productID, version, manufacturer, productName, serialNumber, usbLocationID, usagePage, usage );
}
}

View file

@ -0,0 +1,26 @@
package net.java.games.input;
/**
* 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 InputController
{
public OSXKeyboard( OSXEnvironmentPlugin plugin )
{
super( plugin );
}
public OSXKeyboard( OSXEnvironmentPlugin plugin, long lpDevice, String productName, int usage )
{
super( plugin, lpDevice, productName, usage );
}
public OSXKeyboard( OSXEnvironmentPlugin plugin, long lpDevice, String transportKey, int vendorID, int productID, int version, String manufacturer, String productName, String serialNumber, int usbLocationID, int usagePage, int usage)
{
super( plugin, lpDevice, transportKey, vendorID, productID, version, manufacturer, productName, serialNumber, usbLocationID, usagePage, usage );
}
}

View file

@ -0,0 +1,26 @@
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 InputController
{
public OSXMouse( OSXEnvironmentPlugin plugin )
{
super( plugin );
}
public OSXMouse( OSXEnvironmentPlugin plugin, long lpDevice, String productName, int usage )
{
super( plugin, lpDevice, productName, usage );
}
public OSXMouse( OSXEnvironmentPlugin plugin, long lpDevice, String transportKey, int vendorID, int productID, int version, String manufacturer, String productName, String serialNumber, int usbLocationID, int usagePage, int usage)
{
super( plugin, lpDevice, transportKey, vendorID, productID, version, manufacturer, productName, serialNumber, usbLocationID, usagePage, usage );
}
}