diff options
author | endolf <[email protected]> | 2004-06-21 21:44:16 +0000 |
---|---|---|
committer | endolf <[email protected]> | 2004-06-21 21:44:16 +0000 |
commit | 1186fb209c5c5caa458c9ec760ccb8af7ded2a88 (patch) | |
tree | edfa861876f7f229d5a344a876ad4bd3f9936164 | |
parent | 2b0bdf9979ac5dd092883685843000c9f0884f4a (diff) |
Possible fix for sigfault on linux, need to test more
git-svn-id: file:///home/sven/projects/JOGL/git-svn/svn-server-sync/jinput/trunk@80 e343933a-64c8-49c5-92b1-88f2ce3e89e8
4 files changed, 26 insertions, 134 deletions
diff --git a/plugins/linux/src/java/net/java/games/input/LinuxDevice.java b/plugins/linux/src/java/net/java/games/input/LinuxDevice.java index 0ed7c98..7233ce4 100644 --- a/plugins/linux/src/java/net/java/games/input/LinuxDevice.java +++ b/plugins/linux/src/java/net/java/games/input/LinuxDevice.java @@ -407,6 +407,10 @@ public class LinuxDevice extends AbstractController { private LinuxAxis createButton(int buttonNumber, int nativeButtonType) { Axis.Identifier id = LinuxNativeTypesMap.getButtonID(nativeButtonType); String name = LinuxNativeTypesMap.getButtonName(nativeButtonType); + System.out.println("native button type: " + nativeButtonType + " id: " + id + " name: " + name); + if(id!=null) { + System.out.println("id.name: " + id.getName()); + } if(name == null) { name = "Uknown button"; id = new ButtonID(name); @@ -463,6 +467,12 @@ public class LinuxDevice extends AbstractController { private LinuxHat createHat(String name, int xAxisID, int yAxisID) { return new LinuxHat(this, name, xAxisID, yAxisID); } + + public Axis[] getButtons() { + Axis[] buttonsCopy = new Axis[buttons.length]; + System.arraycopy(buttons, 0, buttonsCopy, 0, buttons.length); + return buttonsCopy; + } /** Polls axes for data. Returns false if the controller is no longer valid. * Polling reflects the current state of the device when polled. 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 09bbfec..88ea81c 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(deviceNumber, name, numButtons, numRelAxes, numAbsAxes); + device = new LinuxKeyboard(new LinuxDevice(deviceNumber, name, numButtons, numRelAxes, numAbsAxes)); } 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 f03d81d..cddb5c8 100644 --- a/plugins/linux/src/java/net/java/games/input/LinuxKeyboard.java +++ b/plugins/linux/src/java/net/java/games/input/LinuxKeyboard.java @@ -25,35 +25,15 @@ */ package net.java.games.input; +import java.util.HashMap; + /** Class that represents a keyboard under linux * @author Jeremy Booth ([email protected]) */ public class LinuxKeyboard extends StandardKeyboard { - /** 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; + private HashMap keyMap = new HashMap(); + private LinuxDevice realController; /** Creates a new instance of LinuxKeyboard * @param nativeID Native device id @@ -62,34 +42,11 @@ 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(int nativeID, String name, int numButtons, int numRelAxes, int numAbsAxes) { - super(name); - - children = NO_CONTROLLERS; - rumblers = NO_RUMBLERS; - - if((numRelAxes > 0) || (numAbsAxes > 0)) { - children = new Controller[1]; - children[0] = new LinuxDevice(nativeID, name + " axis", 0, numRelAxes, numAbsAxes); - } - - 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; + public LinuxKeyboard(LinuxDevice realController) { + super(realController.getName()); + this.realController = realController; setupKeyMap(); - renameKeys(); } /** Returns whether or not the given key has been pressed since the last @@ -98,19 +55,8 @@ public class LinuxKeyboard extends StandardKeyboard { * @return the value fo the key */ protected boolean isKeyPressed(Key key) { - /*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; + Axis button = (Axis)keyMap.get(key.getIdentifier()); + if(button.getPollData()!=0) return true; else return false; } /** Polls axes for data. Returns false if the controller is no longer valid. @@ -118,82 +64,19 @@ public class LinuxKeyboard extends StandardKeyboard { * @return False if this device is invalid. */ public boolean poll() { - int retval = nativePoll(nativeID, keyData, dummyRelAxesData, dummyAbsAxesData); - if(retval>=0) return true; - return false; + return realController.poll(); } /** Goes through every key to initialise the key map */ private void setupKeyMap() { - for(int i=0;i<KeyID.LAST.getKeyIndex();i++) { - keyMap[i] = numKeys; - } - for(int i=0;i<numKeys;i++) { - int tempNativeID = supportedKeys[i]; - Keyboard.KeyID tempKeyID = StandardKeyboard.KeyID.VOID; - try { - tempKeyID = (Keyboard.KeyID)LinuxNativeTypesMap.getButtonID(tempNativeID); - } catch (ClassCastException e) { - System.out.println("LinuxNativeTypesMap.getButtonID() returned " + LinuxNativeTypesMap.getButtonID(tempNativeID).getClass().toString()); - } - if(tempKeyID.getKeyIndex() < keyMap.length) { - keyMap[tempKeyID.getKeyIndex()] = i; - //System.out.println("keyMap[" + (tempKeyID.getKeyIndex()) + "] (" + tempKeyID + ") set to index " + i + " (" + LinuxNativeTypesMap.getButtonName(supportedKeys[i]) + ")"); - } else { - //System.out.println("Linux key " + LinuxNativeTypesMap.getButtonName(tempNativeID) + " isn't supported by jinput"); - } - } - } - - /** Renames all the keys based on what information we have about them (number/name) - */ - private void renameKeys() { - Axis tempAxes[] = getAxes(); - // Do this one by hand as it's a special case - //((AbstractAxis)tempAxes[0]).setName("Unknown"); - for(int i=0;i<tempAxes.length;i++) { - Axis tempAxis = tempAxes[i]; - int nativeKeyID = supportedKeys[keyMap[((Keyboard.KeyID) tempAxis.getIdentifier()).getKeyIndex()]]; - //System.out.println("key " + tempAxis + " map: " + nativeKeyID); - if(nativeKeyID != NativeDefinitions.KEY_UNKNOWN) { - String tempName = LinuxNativeTypesMap.getButtonName(nativeKeyID); - ((AbstractAxis)tempAxis).setName(tempName); - - /*System.out.println("axis id is " + (Keyboard.KeyID) tempAxis.getIdentifier()); - System.out.println("keyMap[id] is " + keyMap[((Keyboard.KeyID) tempAxis.getIdentifier()).getKeyIndex()]); - System.out.println("nativeKeyID is: " + nativeKeyID); - System.out.println("Set name of key " + ((Keyboard.KeyID) tempAxis.getIdentifier()).getKeyIndex() + " to " + tempName);*/ - } - } + Axis[] allButtons = realController.getButtons(); + for(int i=0;i<allButtons.length;i++) { + Axis tempButton = allButtons[i]; + keyMap.put(tempButton.getIdentifier(), tempButton); + } } - /** Gets all the supported keys for this device - * @param supportedButtons The array if key types to populate - */ - private void getSupportedButtons(int supportedButtons[]) { - getNativeSupportedButtons(nativeID, supportedButtons); - } - - /** Gets the supported key types for a particular native device - * @param deviceID The device ID - * @param supportedButtons The array to populate with teh supported key ids - */ - private native void getNativeSupportedButtons(int deviceID, int supportedButtons[]); - /** Calls the native library to poll the device - * @param deviceID The device ID - * @param buttonData Aray to populate with button values - * @param relAxesData Array to populate with relative axis values - * @param absAxesData Array to populate with absolute axes values - * @return <0 if soething went wrong - */ - private native int nativePoll(int deviceID, int buttonData[], int relAxesData[], int absAxesData[]); - /** Gets the port type from the native library for a particular keyboard - * @param deviceID The keybaord id - * @return native port ype - */ - private native int getNativePortType(int deviceID); - /** Linux specific key ID's * @author Jeremy Booth ([email protected]) */ diff --git a/plugins/linux/src/java/net/java/games/input/LinuxNativeTypesMap.java b/plugins/linux/src/java/net/java/games/input/LinuxNativeTypesMap.java index 698c18f..96a11e3 100644 --- a/plugins/linux/src/java/net/java/games/input/LinuxNativeTypesMap.java +++ b/plugins/linux/src/java/net/java/games/input/LinuxNativeTypesMap.java @@ -782,7 +782,6 @@ public class LinuxNativeTypesMap { public static Axis.Identifier getButtonID(int nativeID) { Axis.Identifier retval = INSTANCE.buttonIDs[nativeID]; if(retval == null) { - //System.out.println("Creating new KeyID for nativeID " + nativeID); retval = new LinuxKeyboard.KeyID(nativeID, getButtonName(nativeID)); INSTANCE.buttonIDs[nativeID] = retval; } |