diff options
Diffstat (limited to 'plugins/OSX')
-rw-r--r-- | plugins/OSX/src/java/net/java/games/input/OSXKeyboard.java | 217 |
1 files changed, 166 insertions, 51 deletions
diff --git a/plugins/OSX/src/java/net/java/games/input/OSXKeyboard.java b/plugins/OSX/src/java/net/java/games/input/OSXKeyboard.java index 4319827..0fdcef3 100644 --- a/plugins/OSX/src/java/net/java/games/input/OSXKeyboard.java +++ b/plugins/OSX/src/java/net/java/games/input/OSXKeyboard.java @@ -1,5 +1,7 @@ package net.java.games.input; +import java.util.HashMap; + /** * Created by IntelliJ IDEA. * User: gpierce @@ -11,23 +13,138 @@ public class OSXKeyboard extends StandardKeyboard implements InputController { private final static int[] CROSSTABLE = { - 0x00, 0x29, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, // _9 - 0x27, 0x2D, 0x2E, 0x2A, 0x2B, 0x14, 0x1A, 0x08, 0x15, 0x17, 0x1C, // Y - 0x18, 0x0C, 0x12, 0x13, 0x2F, 0x30, 0x28, 0xE0, 0x04, 0x16, 0x07, // D - 0x09, 0x0A, 0x0B, 0x0D, 0x0E, 0x0F, 0x33, 0x34, 0x35, 0xE1, 0x31, // BACKSLASH - 0x1D, 0x1B, 0x06, 0x19, 0x05, 0x11, 0x10, 0x36, 0x37, 0x38, 0xE5, // RSHIFT - 0x55, 0xE2, 0x2C, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, // F7 - 0x41, 0x42, 0x43, 0x53, 0x47, 0x5F, 0x60, 0x61, 0x56, 0x5C, 0x5D, // NUMPAD5 - 0x5E, 0x57, 0x59, 0x5A, 0x5B, 0x62, 0x63, 0x44, 0x45, 0x68, 0x69, // F14 - 0x6A, 0x87, 0x88, 0x89, 0x8A, 0x67, 0x8B, 0x8C, 0x8D, 0x9F, 0x8E, // KANJI - 0x78, 0x8F, 0x90, 0x58, 0xE4, 0x85, 0x54, 0x9A, 0xE6, 0x48, 0x4A, // HOME - 0x52, 0x9D, 0x50, 0x4F, 0x4D, 0x51, 0xA2, 0x49, 0x4C, 0xE3, 0xE7, // RWIN - 0x65, 0x66, 0x66 // SLEEP + 0x00, // VOID + 0x29, // ESCAPE + 0x1E, // _1 + 0x1F, // _2 + 0x20, // _3 + 0x21, // _4 + 0x22, // _5 + 0x23, // _6 + 0x24, // _7 + 0x25, // _8 + 0x26, // _9 + 0x27, // _0 + 0x2D, // MINUS + 0x2E, // EQUALS + 0x2A, // BACK + 0x2B, // TAB + 0x14, // Q + 0x1A, // W + 0x08, // E + 0x15, // R + 0x17, // T + 0x1C, // Y + 0x18, // U + 0x0C, // I + 0x12, // O + 0x13, // P + 0x2F, // [ + 0x30, // ] + 0x28, // RETURN + 0xE0, // LEFT CONTROL + 0x04, // A + 0x16, // S + 0x07, // D + 0x09, // F + 0x0A, // G + 0x0B, // H + 0x0D, // J + 0x0E, // K + 0x0F, // L + 0x33, // ; + 0x34, // ' + 0x35, // ~ + 0xE1, // / + 0x31, // BACKSLASH (\) + 0x1D, // Z + 0x1B, // X + 0x06, // C + 0x19, // V + 0x05, // B + 0x11, // N + 0x10, // M + 0x36, // , + 0x37, // . + 0x38, // SLASH (/) + 0xE5, // RSHIFT + 0x55, // MULT (*) + 0xE2, // LEFT ALT + 0x2C, // SPACE + 0x39, // CAPSLOCK + 0x3A, // F1 + 0x3B, // F2 + 0x3C, // F3 + 0x3D, // F4 + 0x3E, // F5 + 0x3F, // F6 + 0x40, // F7 + 0x41, // F8 + 0x42, // F9 + 0x43, // F10 + 0x53, // NUMLOCK + 0x47, // SCROLLLOCK + 0x5F, // NUMPAD7 + 0x60, // NUMPAD8 + 0x61, // NUMPAD9 + 0x56, // SUBTRACT (KEYPAD -) + 0x5C, // NUMPAD4 + 0x5D, // NUMPAD5 + 0x5E, // NUMPAD6 + 0x57, // ADD (KEYPAD +) + 0x59, // NUMPAD1 + 0x5A, // NUMPAD2 + 0x5B, // NUMPAD3 + 0x62, // NUMPAD0 + 0x63, // DECIMAL (KEYPAD .) + 0x44, // F11 + 0x45, // F12 + 0x68, // F13 + 0x69, // F14 + 0x6A, // F15 + 0x87, // KANA + 0x88, // CONVERT + 0x89, // NONCONVERT + 0x8A, // YEN + 0x67, // NUMPAD= + 0x8B, // CIRCUMFLEX + 0x8C, // AT + 0x8D, // COLON + 0x9F, // UNDERLINE + 0x8E, // KANJI + 0x78, // STOP + 0x8F, // AX + 0x90, // UNLABELED + 0x58, // NUMPAD ENTER + 0xE4, // RIGHT CONTROL + 0x85, // NUMPAD COMMA + 0x54, // DIVIDE ( NUMPAD /) + 0x9A, // SYSREQ + 0xE6, // RIGHT ALT + 0x48, // PAUSE + 0x4A, // HOME + 0x52, // UP + 0x9D, // PRIOR + 0x50, // LEFT + 0x4F, // RIGHT + 0x4D, // END + 0x51, // DOWN + 0xA2, // NEXT + 0x49, // INSERT + 0x4C, // DELETE + 0xE3, // LEFT WIN + 0xE7, // RIGHT WIN + 0x65, // APPS + 0x66, // POWER + 0x66 // SLEEP }; private OSXEnvironmentPlugin plugin; private long lpDevice; private long lpQueue; + private HashMap keys = new HashMap(); + + private static int[] COOKIETABLE = new int[CROSSTABLE.length ]; public OSXKeyboard( OSXEnvironmentPlugin plugin, long lpDevice, String productName ) { @@ -41,7 +158,7 @@ public class OSXKeyboard extends StandardKeyboard implements InputController public void openDevice() { - this.lpQueue = plugin.openDevice( this.lpDevice, 32 ); + this.lpQueue = plugin.openDevice( this.lpDevice, 256 ); } public void closeDevice() @@ -49,58 +166,33 @@ public class OSXKeyboard extends StandardKeyboard implements InputController plugin.closeDevice( this.lpDevice, this.lpQueue ); } - public void pollDevice() - { - plugin.pollDevice( this.lpQueue ); - } - public void addControllerElement(InputControllerElement element) { + //System.out.println("Adding keyboard elements usage page[" + element.getUsagePage() + "] usage [" + element.getUsage() + "] type [" + element.getElementType() + "]" ); switch( element.getUsagePage() ) { case OSXEnvironmentPlugin.HID_USAGEPAGE_KEYBOARD: - System.out.println("Adding key [" + element.getUsage() + "]"); - break; - } -/* - 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; + //System.out.println("Found keyboard element"); - case OSXEnvironmentPlugin.HID_ELEMENTTYPE_FEATURE: + if ( element.getElementType() == OSXEnvironmentPlugin.HID_ELEMENTTYPE_INPUT_BUTTON ) + { + System.out.println("Adding key [" + element.getUsage() + "]"); - System.out.println("*Adding feature"); - break; + // register this key with the queue system as all buttons are retrieved from the + // input controllers queue + // + plugin.registerDeviceElement( lpQueue, element.getHidCookie() ); - case OSXEnvironmentPlugin.HID_ELEMENTTYPE_COLLECTION: - System.out.println("*Adding collection"); + //TODO: Optimize this - put the usages in another array the same size as the crosstable so the hidCookies + // can be retrieved directly without the Long creation + keys.put( new Long( element.getUsage()), element ); + } break; default: - break; } - - System.out.println("Cookie [" + element.getHidCookie() + "]"); -*/ } public boolean poll() @@ -122,6 +214,29 @@ public class OSXKeyboard extends StandardKeyboard implements InputController KeyID id = (KeyID)key.getIdentifier(); int keyIndex = id.getKeyIndex(); + // get that key code out of the crosstable and find the proper InputControllerElement/button for that key + // + //TODO: Optimize this - put the usages in another array the same size as the crosstable so the hidCookies + // can be retrieved directly without the Long creation + int usage = CROSSTABLE[keyIndex]; + InputControllerElement element = (InputControllerElement) keys.get( new Long(usage) ); + + + if ( element != null ) + { + int value = plugin.pollElement( lpDevice, element.getHidCookie() ); + + System.out.println("Key Poll result [" + value + "]"); + if ( value == 1 ) + { + return true; + } + else + { + return false; + } + } + return false; } } |