From ea8235cd2305101d078265f7b4585fd250bd44fe Mon Sep 17 00:00:00 2001 From: endolf Date: Wed, 7 Jul 2004 23:16:03 +0000 Subject: Updates so that for now keyboards are just created as normal devices, this means the Axis.Identifiers are not the standard ones, but the correct things are now show and no excpetions are seen on the Logitech Elite keyboard (or any that has axis as well) git-svn-id: file:///home/sven/projects/JOGL/git-svn/svn-server-sync/jinput/trunk@83 e343933a-64c8-49c5-92b1-88f2ce3e89e8 --- .../java/games/input/LinuxEnvironmentPlugin.java | 2 +- .../java/net/java/games/input/LinuxKeyboard.java | 144 ++++++++++++++++++--- 2 files changed, 130 insertions(+), 16 deletions(-) diff --git a/plugins/linux/src/java/net/java/games/input/LinuxEnvironmentPlugin.java b/plugins/linux/src/java/net/java/games/input/LinuxEnvironmentPlugin.java index 88ea81c..da60789 100644 --- a/plugins/linux/src/java/net/java/games/input/LinuxEnvironmentPlugin.java +++ b/plugins/linux/src/java/net/java/games/input/LinuxEnvironmentPlugin.java @@ -113,7 +113,7 @@ public class LinuxEnvironmentPlugin extends ControllerEnvironment implements Plu if((mouseCharacteristic > keyboardCharacteristic) && (mouseCharacteristic > joystickCharacteristic)) { device = new LinuxMouse(new LinuxDevice(deviceNumber, name, numButtons, numRelAxes, numAbsAxes)); } else if((keyboardCharacteristic > mouseCharacteristic) && (keyboardCharacteristic > joystickCharacteristic)) { - device = new LinuxKeyboard(new LinuxDevice(deviceNumber, name, numButtons, numRelAxes, numAbsAxes)); + device = new LinuxDevice(deviceNumber, name, numButtons, numRelAxes, numAbsAxes, Controller.Type.KEYBOARD); } else if((joystickCharacteristic > keyboardCharacteristic) && (joystickCharacteristic > mouseCharacteristic)) { device = new LinuxDevice(deviceNumber, name, numButtons, numRelAxes, numAbsAxes); } else { diff --git a/plugins/linux/src/java/net/java/games/input/LinuxKeyboard.java b/plugins/linux/src/java/net/java/games/input/LinuxKeyboard.java index cddb5c8..9fbb2d6 100644 --- a/plugins/linux/src/java/net/java/games/input/LinuxKeyboard.java +++ b/plugins/linux/src/java/net/java/games/input/LinuxKeyboard.java @@ -25,15 +25,35 @@ */ package net.java.games.input; -import java.util.HashMap; - /** Class that represents a keyboard under linux * @author Jeremy Booth (jeremy@newdawnsoftware.com) */ public class LinuxKeyboard extends StandardKeyboard { - private HashMap keyMap = new HashMap(); - private LinuxDevice realController; + /** Values for the keys + */ + private int keyData[]; + /** Needed for the polling methods + */ + private int dummyRelAxesData[]; + /** Needed for the polling methods + */ + private int dummyAbsAxesData[]; + /** Map of native key numbers from jinput key id key indexes. + */ + private int keyMap[]; + /** List of keys this keyboard supports + */ + private int supportedKeys[]; + /** Number of keys this keyboard has + */ + private int numKeys; + /** Port type that this keyboard is connected to. + */ + private PortType portType; + /** The native device id + */ + private int nativeID; /** Creates a new instance of LinuxKeyboard * @param nativeID Native device id @@ -42,11 +62,31 @@ public class LinuxKeyboard extends StandardKeyboard { * @param numRelAxes Number of relative axes (you never know) * @param numAbsAxes Number of absolute axes (you never know) */ - public LinuxKeyboard(LinuxDevice realController) { - super(realController.getName()); - this.realController = realController; + public LinuxKeyboard(int nativeID, String name, int numButtons, int numRelAxes, int numAbsAxes) { + super(name); + + throw new RuntimeException("Error, should not get here"); + + /*children = NO_CONTROLLERS; + rumblers = NO_RUMBLERS; + + this.nativeID = nativeID; + + portType = LinuxNativeTypesMap.getPortType(getNativePortType(nativeID)); + + dummyRelAxesData = new int[numRelAxes]; + dummyAbsAxesData = new int[numAbsAxes]; + + this.numKeys = numButtons; + keyData = new int[numButtons+1]; + supportedKeys = new int[numButtons+1]; + keyMap = new int[KeyID.LAST.getKeyIndex()]; + + getSupportedButtons(supportedKeys); + supportedKeys[numKeys] = NativeDefinitions.KEY_UNKNOWN; setupKeyMap(); + renameKeys();*/ } /** Returns whether or not the given key has been pressed since the last @@ -55,8 +95,19 @@ public class LinuxKeyboard extends StandardKeyboard { * @return the value fo the key */ protected boolean isKeyPressed(Key key) { - Axis button = (Axis)keyMap.get(key.getIdentifier()); - if(button.getPollData()!=0) return true; else return false; + /*if(((Keyboard.KeyID) key.getIdentifier()).getKeyIndex() == StandardKeyboard.KeyID.ESCAPE.getKeyIndex()) { + System.out.println("Asked if key " + key + " was pressed"); + System.out.println("key id " + key.getIdentifier()); + System.out.println("keyIndex " + ((Keyboard.KeyID) key.getIdentifier()).getKeyIndex()); + System.out.println("keyMap for index is " + keyMap[((Keyboard.KeyID) key.getIdentifier()).getKeyIndex()]); + System.out.println("name for supportedKeys index is " + LinuxNativeTypesMap.getButtonName(supportedKeys[keyMap[((Keyboard.KeyID) key.getIdentifier()).getKeyIndex()]])); + System.out.println("id for supportedKeys index is " + LinuxNativeTypesMap.getButtonID(supportedKeys[keyMap[((Keyboard.KeyID) key.getIdentifier()).getKeyIndex()]])); + System.out.flush(); + }*/ + if(keyData[keyMap[((Keyboard.KeyID) key.getIdentifier()).getKeyIndex()]] > 0) { + return true; + } + return false; } /** Polls axes for data. Returns false if the controller is no longer valid. @@ -64,19 +115,82 @@ public class LinuxKeyboard extends StandardKeyboard { * @return False if this device is invalid. */ public boolean poll() { - return realController.poll(); + int retval = nativePoll(nativeID, keyData, dummyRelAxesData, dummyAbsAxesData); + if(retval>=0) return true; + return false; } /** Goes through every key to initialise the key map */ private void setupKeyMap() { - Axis[] allButtons = realController.getButtons(); - for(int i=0;i