mirror of
https://github.com/shadowfacts/jinput-arm64.git
synced 2025-12-06 08:01:59 +01:00
no message
This commit is contained in:
parent
61f8b10374
commit
c88f6ab0c6
|
|
@ -1,7 +1,5 @@
|
|||
package net.java.games.input;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
* Created by IntelliJ IDEA.
|
||||
* User: gpierce
|
||||
|
|
@ -9,212 +7,7 @@ import java.util.HashMap;
|
|||
* Time: 2:57:15 PM
|
||||
* To change this template use Options | File Templates.
|
||||
*/
|
||||
public class InputController
|
||||
public interface 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 );
|
||||
}
|
||||
public void addControllerElement( InputControllerElement element );
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,7 +11,8 @@ public class InputControllerElement
|
|||
{
|
||||
private long hidCookie;
|
||||
private int elementType;
|
||||
private String elementName;
|
||||
private int usagePage;
|
||||
private int usage;
|
||||
|
||||
private int rawMin;
|
||||
private int rawMax;
|
||||
|
|
@ -30,22 +31,23 @@ public class InputControllerElement
|
|||
{
|
||||
}
|
||||
|
||||
public InputControllerElement(long hidCookie, int elementType, String elementName,
|
||||
public InputControllerElement(long hidCookie, int elementType, int usage, int usagePage,
|
||||
int rawMin, int rawMax, int scaledMin, int scaledMax,
|
||||
int dataBitSize, boolean relative, boolean wrapping,
|
||||
boolean nonLinear, boolean hasPreferredState, boolean hasNullState )
|
||||
int dataBitSize, boolean isRelative, boolean isWrapping,
|
||||
boolean isNonLinear, boolean hasPreferredState, boolean hasNullState )
|
||||
{
|
||||
this.hidCookie = hidCookie;
|
||||
this.elementType = elementType;
|
||||
this.elementName = elementName;
|
||||
this.usage = usage;
|
||||
this.usagePage = usagePage;
|
||||
this.rawMin = rawMin;
|
||||
this.rawMax = rawMax;
|
||||
this.scaledMin = scaledMin;
|
||||
this.scaledMax = scaledMax;
|
||||
this.dataBitSize = dataBitSize;
|
||||
isRelative = relative;
|
||||
isWrapping = wrapping;
|
||||
isNonLinear = nonLinear;
|
||||
this.isRelative = isRelative;
|
||||
this.isWrapping = isWrapping;
|
||||
this.isNonLinear = isNonLinear;
|
||||
this.hasPreferredState = hasPreferredState;
|
||||
this.hasNullState = hasNullState;
|
||||
}
|
||||
|
|
@ -70,14 +72,24 @@ public class InputControllerElement
|
|||
this.elementType = elementType;
|
||||
}
|
||||
|
||||
public String getElementName()
|
||||
public int getUsagePage()
|
||||
{
|
||||
return elementName;
|
||||
return usagePage;
|
||||
}
|
||||
|
||||
public void setElementName(String elementName)
|
||||
public void setUsagePage(int usagePage)
|
||||
{
|
||||
this.elementName = elementName;
|
||||
this.usagePage = usagePage;
|
||||
}
|
||||
|
||||
public int getUsage()
|
||||
{
|
||||
return usage;
|
||||
}
|
||||
|
||||
public void setUsage(int usage)
|
||||
{
|
||||
this.usage = usage;
|
||||
}
|
||||
|
||||
public int getRawMin()
|
||||
|
|
|
|||
|
|
@ -69,10 +69,60 @@ public class OSXEnvironmentPlugin extends ControllerEnvironment implements Plugi
|
|||
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;
|
||||
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_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;
|
||||
|
||||
|
||||
private HashMap devices = new HashMap();
|
||||
|
|
@ -88,66 +138,90 @@ public class OSXEnvironmentPlugin extends ControllerEnvironment implements Plugi
|
|||
return (Controller[])devices.values().toArray();
|
||||
}
|
||||
|
||||
public InputController createController( long lpDevice,
|
||||
String productName,
|
||||
int usage )
|
||||
public Controller 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 );
|
||||
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 + "]");
|
||||
return new OSXJoystick( this, lpDevice, productName, usage );
|
||||
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 + "]");
|
||||
return new OSXGamepad( this, lpDevice, productName, usage );
|
||||
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 + "]");
|
||||
return new OSXKeyboard( this, lpDevice, productName, usage );
|
||||
System.out.println("Found keyboard [" + productName + "] device address [" + lpDevice + "]");
|
||||
return new OSXKeyboard( this, lpDevice, productName );
|
||||
|
||||
default:
|
||||
System.out.println("Found device of unknown type [" + usage + "],[" + productName + "] - ignoring");
|
||||
System.out.println("Found device of unknown or unsupported type. Usage[" + usage + "], ProductName[" + productName + "] - ignoring");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private void addController( long lpDevice,
|
||||
String productName,
|
||||
int usage )
|
||||
/**
|
||||
* Add a controller to the device list
|
||||
* @param lpDevice
|
||||
* @param productName
|
||||
* @param usage
|
||||
*/
|
||||
private void addController( long lpDevice, String productName, int usage )
|
||||
{
|
||||
InputController controller = null;
|
||||
Controller controller = null;
|
||||
|
||||
controller = createController( lpDevice, productName, usage );
|
||||
|
||||
if ( controller != null )
|
||||
{
|
||||
devices.put( productName, controller );
|
||||
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 hidCookie,
|
||||
long elementCookie,
|
||||
int elementType,
|
||||
String elementName,
|
||||
int usage,
|
||||
int usagePage,
|
||||
int rawMin,
|
||||
int rawMax,
|
||||
int scaledMin,
|
||||
int scaledMax,
|
||||
int dataBitSize,
|
||||
boolean relative,
|
||||
boolean wrapping,
|
||||
boolean nonLinear,
|
||||
boolean hasPreferredState,
|
||||
boolean hasNullState)
|
||||
int scaledMin,
|
||||
int scaledMax,
|
||||
int dataBitSize,
|
||||
boolean isRelative,
|
||||
boolean isWrapping,
|
||||
boolean isNonLinear,
|
||||
boolean hasPreferredState,
|
||||
boolean hasNullState)
|
||||
{
|
||||
|
||||
System.out.println("Added new element [" + hidCookie + "] to controller [" + lpDevice + "]");
|
||||
InputControllerElement element = new InputControllerElement( hidCookie, elementType, elementName,
|
||||
InputControllerElement element = new InputControllerElement( elementCookie, usagePage, usage, usagePage,
|
||||
rawMin, rawMax, scaledMin, scaledMax,
|
||||
dataBitSize, relative, wrapping, nonLinear,
|
||||
dataBitSize, isRelative, isWrapping, isNonLinear,
|
||||
hasPreferredState, hasNullState );
|
||||
|
||||
|
||||
InputController inputController = (InputController)devices.get( new Long( lpDevice) );
|
||||
inputController.addControllerElement( element );
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -7,20 +7,76 @@ package net.java.games.input;
|
|||
* Time: 3:59:09 PM
|
||||
* To change this template use Options | File Templates.
|
||||
*/
|
||||
public class OSXGamepad extends InputController
|
||||
public class OSXGamepad extends AbstractController implements InputController
|
||||
{
|
||||
public OSXGamepad( OSXEnvironmentPlugin plugin )
|
||||
private OSXEnvironmentPlugin plugin;
|
||||
private long lpDevice;
|
||||
private long lpQueue;
|
||||
|
||||
public OSXGamepad( OSXEnvironmentPlugin plugin, long lpDevice, String productName )
|
||||
{
|
||||
super( plugin );
|
||||
super( productName );
|
||||
|
||||
this.plugin = plugin;
|
||||
this.lpDevice = lpDevice;
|
||||
|
||||
openDevice();
|
||||
}
|
||||
public boolean poll()
|
||||
{
|
||||
plugin.pollDevice( lpQueue );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public OSXGamepad( OSXEnvironmentPlugin plugin, long lpDevice, String productName, int usage )
|
||||
public void openDevice()
|
||||
{
|
||||
super( plugin, lpDevice, productName, usage );
|
||||
this.lpQueue = plugin.openDevice( this.lpDevice, 32 );
|
||||
}
|
||||
|
||||
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)
|
||||
public void closeDevice()
|
||||
{
|
||||
super( plugin, lpDevice, transportKey, vendorID, productID, version, manufacturer, productName, serialNumber, usbLocationID, usagePage, usage );
|
||||
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;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,20 +7,77 @@ package net.java.games.input;
|
|||
* Time: 3:58:45 PM
|
||||
* To change this template use Options | File Templates.
|
||||
*/
|
||||
public class OSXJoystick extends InputController
|
||||
public class OSXJoystick extends AbstractController implements InputController
|
||||
{
|
||||
public OSXJoystick( OSXEnvironmentPlugin plugin )
|
||||
private OSXEnvironmentPlugin plugin;
|
||||
private long lpDevice;
|
||||
private long lpQueue;
|
||||
|
||||
public OSXJoystick( OSXEnvironmentPlugin plugin, long lpDevice, String productName )
|
||||
{
|
||||
super( plugin );
|
||||
super( productName );
|
||||
|
||||
this.plugin = plugin;
|
||||
this.lpDevice = lpDevice;
|
||||
|
||||
openDevice();
|
||||
}
|
||||
|
||||
public OSXJoystick( OSXEnvironmentPlugin plugin, long lpDevice, String productName, int usage )
|
||||
public boolean poll()
|
||||
{
|
||||
super( plugin, lpDevice, productName, usage );
|
||||
plugin.pollDevice( lpQueue );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
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)
|
||||
public void openDevice()
|
||||
{
|
||||
super( plugin, lpDevice, transportKey, vendorID, productID, version, manufacturer, productName, serialNumber, usbLocationID, usagePage, usage );
|
||||
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;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,20 +7,89 @@ package net.java.games.input;
|
|||
* Time: 3:57:58 PM
|
||||
* To change this template use Options | File Templates.
|
||||
*/
|
||||
public class OSXKeyboard extends InputController
|
||||
public class OSXKeyboard extends StandardKeyboard implements InputController
|
||||
{
|
||||
public OSXKeyboard( OSXEnvironmentPlugin plugin )
|
||||
private OSXEnvironmentPlugin plugin;
|
||||
private long lpDevice;
|
||||
private long lpQueue;
|
||||
|
||||
public OSXKeyboard( OSXEnvironmentPlugin plugin, long lpDevice, String productName )
|
||||
{
|
||||
super( plugin );
|
||||
super( productName );
|
||||
|
||||
this.plugin = plugin;
|
||||
this.lpDevice = lpDevice;
|
||||
|
||||
openDevice();
|
||||
}
|
||||
|
||||
public OSXKeyboard( OSXEnvironmentPlugin plugin, long lpDevice, String productName, int usage )
|
||||
public void openDevice()
|
||||
{
|
||||
super( plugin, lpDevice, productName, usage );
|
||||
this.lpQueue = plugin.openDevice( this.lpDevice, 32 );
|
||||
}
|
||||
|
||||
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)
|
||||
public void closeDevice()
|
||||
{
|
||||
super( plugin, lpDevice, transportKey, vendorID, productID, version, manufacturer, productName, serialNumber, usbLocationID, usagePage, usage );
|
||||
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;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
System.out.println("Cookie [" + element.getHidCookie() + "]");
|
||||
*/
|
||||
}
|
||||
|
||||
public boolean poll()
|
||||
{
|
||||
plugin.pollDevice( lpQueue );
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
protected boolean isKeyPressed(Keyboard.Key key)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,20 +7,273 @@ package net.java.games.input;
|
|||
* Time: 3:57:00 PM
|
||||
* To change this template use Options | File Templates.
|
||||
*/
|
||||
public class OSXMouse extends InputController
|
||||
public class OSXMouse extends Mouse implements InputController
|
||||
{
|
||||
public OSXMouse( OSXEnvironmentPlugin plugin )
|
||||
private OSXEnvironmentPlugin plugin;
|
||||
private long lpDevice;
|
||||
private long lpQueue;
|
||||
private int buttonCount = 0;
|
||||
|
||||
|
||||
public OSXMouse( OSXEnvironmentPlugin plugin, long lpDevice, String productName )
|
||||
{
|
||||
super( plugin );
|
||||
super( productName );
|
||||
|
||||
this.plugin = plugin;
|
||||
this.lpDevice = lpDevice;
|
||||
|
||||
openDevice();
|
||||
|
||||
buttons = new ButtonsImpl();
|
||||
ball = new BallImpl();
|
||||
}
|
||||
|
||||
public OSXMouse( OSXEnvironmentPlugin plugin, long lpDevice, String productName, int usage )
|
||||
public void openDevice()
|
||||
{
|
||||
super( plugin, lpDevice, productName, usage );
|
||||
this.lpQueue = plugin.openDevice( this.lpDevice, 32 );
|
||||
}
|
||||
|
||||
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)
|
||||
public void closeDevice()
|
||||
{
|
||||
super( plugin, lpDevice, transportKey, vendorID, productID, version, manufacturer, productName, serialNumber, usbLocationID, usagePage, usage );
|
||||
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()
|
||||
{
|
||||
/* // Mouse button
|
||||
byte data = mouseData[index];
|
||||
if ((data & 0x80) != 0)
|
||||
{
|
||||
return 1.0f;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0.0f;
|
||||
}*/
|
||||
|
||||
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 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()
|
||||
{
|
||||
/* int data = ((int) mouseData[index] << 12) |
|
||||
((int) mouseData[index + 1] << 8) |
|
||||
((int) mouseData[index + 2] << 4) |
|
||||
((int) mouseData[index + 3]);
|
||||
if (data == -1)
|
||||
{
|
||||
return -1.0f;
|
||||
}
|
||||
else if (data >= 1)
|
||||
{
|
||||
return 1.0f;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0.0f;
|
||||
}*/
|
||||
|
||||
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 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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -74,10 +74,11 @@ jmethodID MID_AddController = NULL;
|
|||
jmethodID MID_AddControllerElement = NULL;
|
||||
mach_port_t masterPort = NULL;
|
||||
io_iterator_t hidObjectIterator;
|
||||
int gElementIndex;
|
||||
|
||||
long elementCookie;
|
||||
long collectionType;
|
||||
long elementType;
|
||||
long usage;
|
||||
long usagePage;
|
||||
long min;
|
||||
long max;
|
||||
long scaledMin;
|
||||
|
|
@ -91,6 +92,7 @@ jboolean isNonLinear;
|
|||
JNIEnv * lpEnv;
|
||||
jlong lpDevice;
|
||||
jobject lpObj;
|
||||
jboolean completeElement = JNI_FALSE;
|
||||
|
||||
|
||||
|
||||
|
|
@ -141,16 +143,10 @@ void CFObjectShow( CFTypeRef value )
|
|||
CFTypeID type = CFGetTypeID(value);
|
||||
if (type == CFArrayGetTypeID())
|
||||
{
|
||||
|
||||
printf("Array Type\n");
|
||||
CFRange range = {0, CFArrayGetCount (value)};
|
||||
CFIndex savedIndex = gElementIndex;
|
||||
|
||||
//Show an element array containing one or more element dictionaries
|
||||
gElementIndex = 0; //Reset index to zero
|
||||
CFArrayApplyFunction (value, range, showCFArray, 0);
|
||||
|
||||
gElementIndex = savedIndex;
|
||||
}
|
||||
else if (type == CFBooleanGetTypeID())
|
||||
{
|
||||
|
|
@ -239,7 +235,7 @@ Boolean init(JNIEnv* env)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
MID_AddControllerElement = (*env)->GetMethodID(env, CLASS_JNIWrapper, "addControllerElement", "(JJILjava/lang/String;IIIIIZZZZZ)V");
|
||||
MID_AddControllerElement = (*env)->GetMethodID(env, CLASS_JNIWrapper, "addControllerElement", "(JJIIIIIIIIZZZZZ)V");
|
||||
if (MID_AddControllerElement == NULL)
|
||||
{
|
||||
printf("Method addControllerElement not found... \n");
|
||||
|
|
@ -362,19 +358,14 @@ void CFObjectSend( CFTypeRef value )
|
|||
CFTypeID type = CFGetTypeID(value);
|
||||
if (type == CFArrayGetTypeID())
|
||||
{
|
||||
printf("Array Type\n");
|
||||
CFRange range = {0, CFArrayGetCount (value)};
|
||||
CFIndex savedIndex = gElementIndex;
|
||||
|
||||
//Show an element array containing one or more element dictionaries
|
||||
gElementIndex = 0; //Reset index to zero
|
||||
CFArrayApplyFunction (value, range, sendCFArray, 0);
|
||||
|
||||
gElementIndex = savedIndex;
|
||||
}
|
||||
else if (type == CFDictionaryGetTypeID())
|
||||
{
|
||||
printf("Sending Map\n");
|
||||
// printf("Sending Map\n");
|
||||
|
||||
|
||||
CFTypeRef val = CFDictionaryGetValue( value, CFSTR(kIOHIDElementCookieKey) );
|
||||
|
|
@ -384,91 +375,128 @@ void CFObjectSend( CFTypeRef value )
|
|||
printf("ElementCookie - 0x%lx (%ld) \n", elementCookie, elementCookie);
|
||||
}
|
||||
|
||||
val = CFDictionaryGetValue( value, CFSTR(kIOHIDElementCollectionTypeKey) );
|
||||
val = CFDictionaryGetValue( value, CFSTR(kIOHIDElementTypeKey) );
|
||||
if ( val )
|
||||
{
|
||||
CFNumberGetValue ( val, kCFNumberLongType, &collectionType);
|
||||
printf("collection Type - 0x%lx (%ld) \n", collectionType, collectionType);
|
||||
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);
|
||||
//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);
|
||||
//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);
|
||||
//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);
|
||||
//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);
|
||||
//printf("Size - 0x%lx (%ld) \n", size, size);
|
||||
}
|
||||
|
||||
isRelative = JNI_FALSE;
|
||||
isWrapping = JNI_FALSE;
|
||||
isNonLinear = JNI_FALSE;
|
||||
jboolean hasPreferredState = JNI_FALSE;
|
||||
jboolean hasNullState = JNI_FALSE;
|
||||
jboolean isRelative = JNI_FALSE;
|
||||
val = CFDictionaryGetValue( value, CFSTR(kIOHIDElementIsRelativeKey) );
|
||||
if ( val )
|
||||
{
|
||||
isRelative = (CFBooleanGetValue(val) ? JNI_TRUE : JNI_FALSE);
|
||||
}
|
||||
|
||||
(*lpEnv)->CallVoidMethod(lpEnv, lpObj, MID_AddControllerElement,
|
||||
lpDevice,
|
||||
|
||||
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,
|
||||
(jlong)(long)collectionType,
|
||||
(jlong)(long)min,
|
||||
(jlong)(long)max,
|
||||
(jlong)(long)scaledMin,
|
||||
(jlong)(long)scaledMax,
|
||||
(jlong)(long)size,
|
||||
(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");
|
||||
|
||||
/*
|
||||
|
||||
jboolean isRelative;
|
||||
isRelative = (CFBooleanGetValue(value) ? JNI_TRUE : JNI_FALSE);
|
||||
// printf("End of element definition \n");
|
||||
|
||||
|
||||
jboolean isWrapping;
|
||||
isWrapping = (CFBooleanGetValue(value) ? JNI_TRUE : JNI_FALSE);
|
||||
|
||||
jboolean isNonLinear;
|
||||
isNonLinear = (CFBooleanGetValue(value) ? JNI_TRUE : JNI_FALSE);
|
||||
*/
|
||||
#ifdef kIOHIDElementHasPreferredStateKey
|
||||
//showDictionaryElement (value, CFSTR(kIOHIDElementHasPreferredStateKey));
|
||||
#else
|
||||
//showDictionaryElement (value, CFSTR(kIOHIDElementHasPreferedStateKey));
|
||||
#endif
|
||||
//showDictionaryElement (value, CFSTR(kIOHIDElementHasNullStateKey));
|
||||
showDictionaryElement (value, CFSTR(kIOHIDElementVendorSpecificKey));
|
||||
|
||||
//showDictionaryElement (value, CFSTR(kIOHIDElementKey));
|
||||
|
||||
CFTypeRef object = CFDictionaryGetValue (value, CFSTR(kIOHIDElementKey));
|
||||
if (object)
|
||||
|
|
@ -487,16 +515,8 @@ void addControllerElements( CFMutableDictionaryRef dictionary, CFStringRef key )
|
|||
CFTypeRef value = CFDictionaryGetValue (dictionary, key);
|
||||
if (value)
|
||||
{
|
||||
CFTypeID type = CFGetTypeID(value);
|
||||
|
||||
CFRange range = {0, CFArrayGetCount (value)};
|
||||
CFIndex savedIndex = gElementIndex;
|
||||
|
||||
//Show an element array containing one or more element dictionaries
|
||||
gElementIndex = 0; //Reset index to zero
|
||||
CFArrayApplyFunction (value, range, sendCFArray, 0);
|
||||
|
||||
gElementIndex = savedIndex;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue