Recognize 3D joysticks. (DO NOT MERGE)
Change-Id: Idf7799ea90fa07677850d40ee1aec39220ded372
This commit is contained in:
@@ -261,6 +261,23 @@ key 233 HEADSETHOOK
|
||||
# key 239 "KEY_KBDILLUMUP"
|
||||
# key 240 "KEY_UNKNOWN"
|
||||
|
||||
key 256 BUTTON_1
|
||||
key 257 BUTTON_2
|
||||
key 258 BUTTON_3
|
||||
key 259 BUTTON_4
|
||||
key 260 BUTTON_5
|
||||
key 261 BUTTON_6
|
||||
key 262 BUTTON_7
|
||||
key 263 BUTTON_8
|
||||
key 264 BUTTON_9
|
||||
key 265 BUTTON_10
|
||||
key 266 BUTTON_11
|
||||
key 267 BUTTON_12
|
||||
key 268 BUTTON_13
|
||||
key 269 BUTTON_14
|
||||
key 270 BUTTON_15
|
||||
key 271 BUTTON_16
|
||||
|
||||
key 288 BUTTON_1
|
||||
key 289 BUTTON_2
|
||||
key 290 BUTTON_3
|
||||
|
||||
@@ -820,8 +820,10 @@ int EventHub::openDevice(const char *devicePath) {
|
||||
bool haveKeyboardKeys = containsNonZeroByte(key_bitmask, 0, sizeof_bit_array(BTN_MISC))
|
||||
|| containsNonZeroByte(key_bitmask, sizeof_bit_array(KEY_OK),
|
||||
sizeof_bit_array(KEY_MAX + 1));
|
||||
bool haveGamepadButtons =containsNonZeroByte(key_bitmask, sizeof_bit_array(BTN_JOYSTICK),
|
||||
sizeof_bit_array(BTN_DIGI));
|
||||
bool haveGamepadButtons = containsNonZeroByte(key_bitmask, sizeof_bit_array(BTN_MISC),
|
||||
sizeof_bit_array(BTN_MOUSE))
|
||||
|| containsNonZeroByte(key_bitmask, sizeof_bit_array(BTN_JOYSTICK),
|
||||
sizeof_bit_array(BTN_DIGI));
|
||||
if (haveKeyboardKeys || haveGamepadButtons) {
|
||||
device->classes |= INPUT_DEVICE_CLASS_KEYBOARD;
|
||||
}
|
||||
@@ -850,6 +852,16 @@ int EventHub::openDevice(const char *devicePath) {
|
||||
device->classes |= INPUT_DEVICE_CLASS_TOUCH;
|
||||
}
|
||||
|
||||
// See if this device is a joystick.
|
||||
// Ignore touchscreens because they use the same absolute axes for other purposes.
|
||||
// Assumes that joysticks always have gamepad buttons in order to distinguish them
|
||||
// from other devices such as accelerometers that also have absolute axes.
|
||||
if (haveGamepadButtons
|
||||
&& !(device->classes & INPUT_DEVICE_CLASS_TOUCH)
|
||||
&& containsNonZeroByte(abs_bitmask, 0, sizeof_bit_array(ABS_MAX + 1))) {
|
||||
device->classes |= INPUT_DEVICE_CLASS_JOYSTICK;
|
||||
}
|
||||
|
||||
// figure out the switches this device reports
|
||||
bool haveSwitches = false;
|
||||
for (int i=0; i<EV_SW; i++) {
|
||||
@@ -874,15 +886,21 @@ int EventHub::openDevice(const char *devicePath) {
|
||||
}
|
||||
}
|
||||
|
||||
if ((device->classes & INPUT_DEVICE_CLASS_KEYBOARD) != 0) {
|
||||
// Load the key map.
|
||||
// We need to do this for joysticks too because the key layout may specify axes.
|
||||
status_t keyMapStatus = NAME_NOT_FOUND;
|
||||
if (device->classes & (INPUT_DEVICE_CLASS_KEYBOARD | INPUT_DEVICE_CLASS_JOYSTICK)) {
|
||||
// Load the keymap for the device.
|
||||
status_t status = loadKeyMap(device);
|
||||
keyMapStatus = loadKeyMap(device);
|
||||
}
|
||||
|
||||
// Configure the keyboard, gamepad or virtual keyboard.
|
||||
if (device->classes & INPUT_DEVICE_CLASS_KEYBOARD) {
|
||||
// Set system properties for the keyboard.
|
||||
setKeyboardProperties(device, false);
|
||||
|
||||
// Register the keyboard as a built-in keyboard if it is eligible.
|
||||
if (!status
|
||||
if (!keyMapStatus
|
||||
&& mBuiltInKeyboardId == -1
|
||||
&& isEligibleBuiltInKeyboard(device->identifier,
|
||||
device->configuration, &device->keyMap)) {
|
||||
@@ -913,16 +931,6 @@ int EventHub::openDevice(const char *devicePath) {
|
||||
}
|
||||
}
|
||||
|
||||
// See if this device is a joystick.
|
||||
// Ignore touchscreens because they use the same absolute axes for other purposes.
|
||||
// Assumes that joysticks always have buttons and the keymap has been loaded.
|
||||
if (device->classes & INPUT_DEVICE_CLASS_GAMEPAD
|
||||
&& !(device->classes & INPUT_DEVICE_CLASS_TOUCH)) {
|
||||
if (containsNonZeroByte(abs_bitmask, 0, sizeof_bit_array(ABS_MAX + 1))) {
|
||||
device->classes |= INPUT_DEVICE_CLASS_JOYSTICK;
|
||||
}
|
||||
}
|
||||
|
||||
// If the device isn't recognized as something we handle, don't monitor it.
|
||||
if (device->classes == 0) {
|
||||
LOGV("Dropping device: id=%d, path='%s', name='%s'",
|
||||
|
||||
@@ -945,6 +945,7 @@ void KeyboardInputMapper::process(const RawEvent* rawEvent) {
|
||||
bool KeyboardInputMapper::isKeyboardOrGamepadKey(int32_t scanCode) {
|
||||
return scanCode < BTN_MOUSE
|
||||
|| scanCode >= KEY_OK
|
||||
|| (scanCode >= BTN_MISC && scanCode < BTN_MOUSE)
|
||||
|| (scanCode >= BTN_JOYSTICK && scanCode < BTN_DIGI);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user