mirror of
https://github.com/shadowfacts/jinput-arm64.git
synced 2025-12-06 08:01:59 +01:00
Add HID properties and CROSSTABLE entries to move from JInput keys to HID cookies and poll keyboard keys
This commit is contained in:
parent
09ae0599ef
commit
144c3501e5
|
|
@ -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;
|
||||
//System.out.println("Found keyboard element");
|
||||
|
||||
case OSXEnvironmentPlugin.HID_ELEMENTTYPE_INPUT_AXIS:
|
||||
System.out.println("*Adding axis");
|
||||
break;
|
||||
if ( element.getElementType() == OSXEnvironmentPlugin.HID_ELEMENTTYPE_INPUT_BUTTON )
|
||||
{
|
||||
System.out.println("Adding key [" + element.getUsage() + "]");
|
||||
|
||||
case OSXEnvironmentPlugin.HID_ELEMENTTYPE_INPUT_SCANCODES:
|
||||
System.out.println("*Adding scancode");
|
||||
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_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");
|
||||
//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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue