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;
    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;                setupKeyMap();        renameKeys();    }