mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-01 14:58:14 +00:00
Add additional autoconf layout for xbox pads on Android. Revert the normal pad layout.
This commit is contained in:
1 parent
8cab56c948
commit
b6228a1036
8 files changed
+87
-39
No files matched your search
@@ -17,10 +17,10 @@ const char *GetDeviceName(int deviceId) {
|
||||
case DEVICE_ID_PAD_7: return "pad8";
|
||||
case DEVICE_ID_PAD_8: return "pad9";
|
||||
case DEVICE_ID_PAD_9: return "pad10";
|
||||
case DEVICE_ID_X360_0: return "x360";
|
||||
case DEVICE_ID_X360_1: return "x360_2";
|
||||
case DEVICE_ID_X360_2: return "x360_3";
|
||||
case DEVICE_ID_X360_3: return "x360_4";
|
||||
case DEVICE_ID_XINPUT_0: return "x360"; // keeping these strings for backward compat
|
||||
case DEVICE_ID_XINPUT_1: return "x360_2";
|
||||
case DEVICE_ID_XINPUT_2: return "x360_3";
|
||||
case DEVICE_ID_XINPUT_3: return "x360_4";
|
||||
case DEVICE_ID_ACCELEROMETER: return "accelerometer";
|
||||
case DEVICE_ID_MOUSE: return "mouse";
|
||||
default:
|
||||
|
||||
@@ -28,10 +28,10 @@ enum {
|
||||
DEVICE_ID_PAD_7 = 17,
|
||||
DEVICE_ID_PAD_8 = 18,
|
||||
DEVICE_ID_PAD_9 = 19,
|
||||
DEVICE_ID_X360_0 = 20, // XInput joypads
|
||||
DEVICE_ID_X360_1 = 21,
|
||||
DEVICE_ID_X360_2 = 22,
|
||||
DEVICE_ID_X360_3 = 23,
|
||||
DEVICE_ID_XINPUT_0 = 20, // XInput joypads
|
||||
DEVICE_ID_XINPUT_1 = 21,
|
||||
DEVICE_ID_XINPUT_2 = 22,
|
||||
DEVICE_ID_XINPUT_3 = 23,
|
||||
DEVICE_ID_ACCELEROMETER = 30,
|
||||
};
|
||||
|
||||
|
||||
+4
-4
@@ -341,10 +341,10 @@ bool AxisEvent(const AxisInput &axis, ViewGroup *root) {
|
||||
case DEVICE_ID_PAD_1:
|
||||
case DEVICE_ID_PAD_2:
|
||||
case DEVICE_ID_PAD_3:
|
||||
case DEVICE_ID_X360_0:
|
||||
case DEVICE_ID_X360_1:
|
||||
case DEVICE_ID_X360_2:
|
||||
case DEVICE_ID_X360_3:
|
||||
case DEVICE_ID_XINPUT_0:
|
||||
case DEVICE_ID_XINPUT_1:
|
||||
case DEVICE_ID_XINPUT_2:
|
||||
case DEVICE_ID_XINPUT_3:
|
||||
{
|
||||
PrevState &old = state[stateKey];
|
||||
DirState dir = DirState::NONE;
|
||||
|
||||
+15
-8
@@ -43,7 +43,7 @@ namespace KeyMap {
|
||||
KeyDef AxisDef(int deviceId, int axisId, int direction);
|
||||
|
||||
KeyMapping g_controllerMap;
|
||||
int g_controllerMapGeneration = 0;
|
||||
int g_controllerMapGeneration = 0; // Just used to check if we need to update the Windows menu or not.
|
||||
std::set<std::string> g_seenPads;
|
||||
std::set<int> g_seenDeviceIds;
|
||||
|
||||
@@ -620,12 +620,11 @@ void SetAxisMapping(int btn, int deviceId, int axisId, int direction, bool repla
|
||||
SetKeyMapping(btn, KeyDef(deviceId, key), replace);
|
||||
}
|
||||
|
||||
// Note that it's easy to add other defaults if desired.
|
||||
void RestoreDefault() {
|
||||
g_controllerMap.clear();
|
||||
#if PPSSPP_PLATFORM(WINDOWS)
|
||||
SetDefaultKeyMap(DEFAULT_MAPPING_KEYBOARD, true);
|
||||
SetDefaultKeyMap(DEFAULT_MAPPING_X360, false);
|
||||
SetDefaultKeyMap(DEFAULT_MAPPING_XINPUT, false);
|
||||
SetDefaultKeyMap(DEFAULT_MAPPING_PAD, false);
|
||||
#elif PPSSPP_PLATFORM(ANDROID)
|
||||
// Autodetect a few common (and less common) devices
|
||||
@@ -641,7 +640,7 @@ void RestoreDefault() {
|
||||
SetDefaultKeyMap(DEFAULT_MAPPING_MOQI_I7S, false);
|
||||
} else {
|
||||
INFO_LOG(SYSTEM, "Default pad map");
|
||||
SetDefaultKeyMap(DEFAULT_MAPPING_PAD, false);
|
||||
SetDefaultKeyMap(DEFAULT_MAPPING_ANDROID_PAD, false);
|
||||
}
|
||||
#else
|
||||
SetDefaultKeyMap(DEFAULT_MAPPING_KEYBOARD, true);
|
||||
@@ -735,18 +734,26 @@ void AutoConfForPad(const std::string &name) {
|
||||
g_controllerMap.clear();
|
||||
|
||||
INFO_LOG(SYSTEM, "Autoconfiguring pad for '%s'", name.c_str());
|
||||
if (name == "Xbox 360 Pad") {
|
||||
SetDefaultKeyMap(DEFAULT_MAPPING_X360, false);
|
||||
|
||||
#if PPSSPP_PLATFORM(ANDROID)
|
||||
if (name.find("Xbox") != std::string::npos) {
|
||||
SetDefaultKeyMap(DEFAULT_MAPPING_ANDROID_XBOX, false);
|
||||
} else {
|
||||
SetDefaultKeyMap(DEFAULT_MAPPING_ANDROID_PAD, false);
|
||||
}
|
||||
#else
|
||||
// TODO: Should actually check for XInput?
|
||||
if (name.find("Xbox") != std::string::npos) {
|
||||
SetDefaultKeyMap(DEFAULT_MAPPING_XINPUT, false);
|
||||
} else {
|
||||
SetDefaultKeyMap(DEFAULT_MAPPING_PAD, false);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef MOBILE_DEVICE
|
||||
// Add a couple of convenient keyboard mappings by default, too.
|
||||
g_controllerMap[VIRTKEY_PAUSE].push_back(KeyDef(DEVICE_ID_KEYBOARD, NKCODE_ESCAPE));
|
||||
g_controllerMap[VIRTKEY_FASTFORWARD].push_back(KeyDef(DEVICE_ID_KEYBOARD, NKCODE_TAB));
|
||||
g_controllerMapGeneration++;
|
||||
#endif
|
||||
}
|
||||
|
||||
const std::set<std::string> &GetSeenPads() {
|
||||
|
||||
+3
-1
@@ -21,9 +21,11 @@
|
||||
#include <map>
|
||||
#include <vector>
|
||||
#include <set>
|
||||
|
||||
#include "Common/Input/InputState.h" // KeyDef
|
||||
#include "Common/Input/KeyCodes.h" // keyboard keys
|
||||
#include "../Core/HLE/sceCtrl.h" // psp keys
|
||||
#include "Core/HLE/sceCtrl.h" // psp keys
|
||||
#include "Core/KeyMapDefaults.h"
|
||||
|
||||
#define KEYMAP_ERROR_KEY_ALREADY_USED -1
|
||||
#define KEYMAP_ERROR_UNKNOWN_KEY 0
|
||||
|
||||
+47
-14
@@ -22,7 +22,7 @@ struct DefMappingStruct {
|
||||
int direction;
|
||||
};
|
||||
|
||||
const DefMappingStruct defaultQwertyKeyboardKeyMap[] = {
|
||||
static const DefMappingStruct defaultQwertyKeyboardKeyMap[] = {
|
||||
{CTRL_SQUARE, NKCODE_A},
|
||||
{CTRL_TRIANGLE, NKCODE_S},
|
||||
{CTRL_CIRCLE, NKCODE_X},
|
||||
@@ -52,7 +52,7 @@ const DefMappingStruct defaultQwertyKeyboardKeyMap[] = {
|
||||
{VIRTKEY_ANALOG_LIGHTLY, NKCODE_SHIFT_RIGHT},
|
||||
};
|
||||
|
||||
const DefMappingStruct defaultAzertyKeyboardKeyMap[] = {
|
||||
static const DefMappingStruct defaultAzertyKeyboardKeyMap[] = {
|
||||
{CTRL_SQUARE, NKCODE_Q},
|
||||
{CTRL_TRIANGLE, NKCODE_S},
|
||||
{CTRL_CIRCLE, NKCODE_X},
|
||||
@@ -82,7 +82,7 @@ const DefMappingStruct defaultAzertyKeyboardKeyMap[] = {
|
||||
{VIRTKEY_ANALOG_LIGHTLY, NKCODE_SHIFT_RIGHT},
|
||||
};
|
||||
|
||||
const DefMappingStruct defaultQwertzKeyboardKeyMap[] = {
|
||||
static const DefMappingStruct defaultQwertzKeyboardKeyMap[] = {
|
||||
{CTRL_SQUARE, NKCODE_A},
|
||||
{CTRL_TRIANGLE, NKCODE_S},
|
||||
{CTRL_CIRCLE, NKCODE_X},
|
||||
@@ -112,7 +112,7 @@ const DefMappingStruct defaultQwertzKeyboardKeyMap[] = {
|
||||
{VIRTKEY_ANALOG_LIGHTLY, NKCODE_SHIFT_RIGHT},
|
||||
};
|
||||
|
||||
const DefMappingStruct default360KeyMap[] = {
|
||||
static const DefMappingStruct defaultXInputKeyMap[] = {
|
||||
{VIRTKEY_AXIS_X_MIN, JOYSTICK_AXIS_X, -1},
|
||||
{VIRTKEY_AXIS_X_MAX, JOYSTICK_AXIS_X, +1},
|
||||
{VIRTKEY_AXIS_Y_MIN, JOYSTICK_AXIS_Y, -1},
|
||||
@@ -135,7 +135,7 @@ const DefMappingStruct default360KeyMap[] = {
|
||||
{VIRTKEY_PAUSE, NKCODE_HOME},
|
||||
};
|
||||
|
||||
const DefMappingStruct defaultShieldKeyMap[] = {
|
||||
static const DefMappingStruct defaultShieldKeyMap[] = {
|
||||
{CTRL_CROSS, NKCODE_BUTTON_A},
|
||||
{CTRL_CIRCLE ,NKCODE_BUTTON_B},
|
||||
{CTRL_SQUARE ,NKCODE_BUTTON_X},
|
||||
@@ -157,7 +157,7 @@ const DefMappingStruct defaultShieldKeyMap[] = {
|
||||
{VIRTKEY_PAUSE, NKCODE_BACK },
|
||||
};
|
||||
|
||||
const DefMappingStruct defaultMOQI7SKeyMap[] = {
|
||||
static const DefMappingStruct defaultMOQI7SKeyMap[] = {
|
||||
{CTRL_CROSS, NKCODE_BUTTON_A},
|
||||
{CTRL_CIRCLE, NKCODE_BUTTON_B},
|
||||
{CTRL_SQUARE, NKCODE_BUTTON_X},
|
||||
@@ -178,8 +178,7 @@ const DefMappingStruct defaultMOQI7SKeyMap[] = {
|
||||
{VIRTKEY_PAUSE, NKCODE_BACK },
|
||||
};
|
||||
|
||||
const DefMappingStruct defaultPadMap[] = {
|
||||
#if PPSSPP_PLATFORM(ANDROID)
|
||||
static const DefMappingStruct defaultAndroidXboxControllerMap[] = {
|
||||
{CTRL_CROSS , NKCODE_BUTTON_A},
|
||||
{CTRL_CIRCLE , NKCODE_BUTTON_B},
|
||||
{CTRL_SQUARE , NKCODE_BUTTON_X},
|
||||
@@ -204,7 +203,36 @@ const DefMappingStruct defaultPadMap[] = {
|
||||
{VIRTKEY_AXIS_X_MAX, JOYSTICK_AXIS_X, +1},
|
||||
{VIRTKEY_AXIS_Y_MIN, JOYSTICK_AXIS_Y, +1},
|
||||
{VIRTKEY_AXIS_Y_MAX, JOYSTICK_AXIS_Y, -1},
|
||||
#else
|
||||
};
|
||||
|
||||
static const DefMappingStruct defaultPadMapAndroid[] = {
|
||||
{CTRL_CROSS , NKCODE_BUTTON_A},
|
||||
{CTRL_CIRCLE , NKCODE_BUTTON_B},
|
||||
{CTRL_SQUARE , NKCODE_BUTTON_X},
|
||||
{CTRL_TRIANGLE , NKCODE_BUTTON_Y},
|
||||
// The hat for DPAD is standard for bluetooth pads, which is the most likely pads on Android I think.
|
||||
{CTRL_LEFT , JOYSTICK_AXIS_HAT_X, -1},
|
||||
{CTRL_LEFT , NKCODE_DPAD_LEFT},
|
||||
{CTRL_RIGHT , JOYSTICK_AXIS_HAT_X, +1},
|
||||
{CTRL_RIGHT , NKCODE_DPAD_RIGHT},
|
||||
{CTRL_UP , JOYSTICK_AXIS_HAT_Y, -1},
|
||||
{CTRL_UP , NKCODE_DPAD_UP},
|
||||
{CTRL_DOWN , JOYSTICK_AXIS_HAT_Y, +1},
|
||||
{CTRL_DOWN , NKCODE_DPAD_DOWN},
|
||||
{CTRL_START , NKCODE_BUTTON_START},
|
||||
{CTRL_SELECT , NKCODE_BUTTON_SELECT},
|
||||
{CTRL_LTRIGGER , NKCODE_BUTTON_L1},
|
||||
{CTRL_RTRIGGER , NKCODE_BUTTON_R1},
|
||||
{VIRTKEY_FASTFORWARD , NKCODE_BUTTON_R2},
|
||||
{VIRTKEY_PAUSE , JOYSTICK_AXIS_LTRIGGER, +1},
|
||||
{VIRTKEY_SPEED_TOGGLE, NKCODE_BUTTON_L2},
|
||||
{VIRTKEY_AXIS_X_MIN, JOYSTICK_AXIS_X, -1},
|
||||
{VIRTKEY_AXIS_X_MAX, JOYSTICK_AXIS_X, +1},
|
||||
{VIRTKEY_AXIS_Y_MIN, JOYSTICK_AXIS_Y, +1},
|
||||
{VIRTKEY_AXIS_Y_MAX, JOYSTICK_AXIS_Y, -1},
|
||||
};
|
||||
|
||||
static const DefMappingStruct defaultPadMap[] = {
|
||||
{CTRL_CROSS , NKCODE_BUTTON_2},
|
||||
{CTRL_CIRCLE , NKCODE_BUTTON_3},
|
||||
{CTRL_SQUARE , NKCODE_BUTTON_4},
|
||||
@@ -222,10 +250,9 @@ const DefMappingStruct defaultPadMap[] = {
|
||||
{VIRTKEY_AXIS_Y_MIN, JOYSTICK_AXIS_Y, +1},
|
||||
{VIRTKEY_AXIS_Y_MAX, JOYSTICK_AXIS_Y, -1},
|
||||
{VIRTKEY_PAUSE , JOYSTICK_AXIS_LTRIGGER, +1},
|
||||
#endif
|
||||
};
|
||||
|
||||
const DefMappingStruct defaultOuyaMap[] = {
|
||||
static const DefMappingStruct defaultOuyaMap[] = {
|
||||
{CTRL_CROSS , NKCODE_BUTTON_A},
|
||||
{CTRL_CIRCLE , NKCODE_BUTTON_B},
|
||||
{CTRL_SQUARE , NKCODE_BUTTON_X},
|
||||
@@ -246,7 +273,7 @@ const DefMappingStruct defaultOuyaMap[] = {
|
||||
{VIRTKEY_AXIS_Y_MAX, JOYSTICK_AXIS_Y, -1},
|
||||
};
|
||||
|
||||
const DefMappingStruct defaultXperiaPlay[] = {
|
||||
static const DefMappingStruct defaultXperiaPlay[] = {
|
||||
{CTRL_CROSS , NKCODE_BUTTON_CROSS},
|
||||
{CTRL_CIRCLE , NKCODE_BUTTON_CIRCLE},
|
||||
{CTRL_SQUARE , NKCODE_BUTTON_X},
|
||||
@@ -315,8 +342,8 @@ void SetDefaultKeyMap(DefaultMaps dmap, bool replace) {
|
||||
}
|
||||
}
|
||||
break;
|
||||
case DEFAULT_MAPPING_X360:
|
||||
SetDefaultKeyMap(DEVICE_ID_X360_0, default360KeyMap, ARRAY_SIZE(default360KeyMap), replace);
|
||||
case DEFAULT_MAPPING_XINPUT:
|
||||
SetDefaultKeyMap(DEVICE_ID_XINPUT_0, defaultXInputKeyMap, ARRAY_SIZE(defaultXInputKeyMap), replace);
|
||||
break;
|
||||
case DEFAULT_MAPPING_SHIELD:
|
||||
SetDefaultKeyMap(DEVICE_ID_PAD_0, defaultShieldKeyMap, ARRAY_SIZE(defaultShieldKeyMap), replace);
|
||||
@@ -327,12 +354,18 @@ void SetDefaultKeyMap(DefaultMaps dmap, bool replace) {
|
||||
case DEFAULT_MAPPING_PAD:
|
||||
SetDefaultKeyMap(DEVICE_ID_PAD_0, defaultPadMap, ARRAY_SIZE(defaultPadMap), replace);
|
||||
break;
|
||||
case DEFAULT_MAPPING_ANDROID_PAD:
|
||||
SetDefaultKeyMap(DEVICE_ID_PAD_0, defaultPadMapAndroid, ARRAY_SIZE(defaultPadMapAndroid), replace);
|
||||
break;
|
||||
case DEFAULT_MAPPING_OUYA:
|
||||
SetDefaultKeyMap(DEVICE_ID_PAD_0, defaultOuyaMap, ARRAY_SIZE(defaultOuyaMap), replace);
|
||||
break;
|
||||
case DEFAULT_MAPPING_XPERIA_PLAY:
|
||||
SetDefaultKeyMap(DEVICE_ID_DEFAULT, defaultXperiaPlay, ARRAY_SIZE(defaultXperiaPlay), replace);
|
||||
break;
|
||||
case DEFAULT_MAPPING_ANDROID_XBOX:
|
||||
SetDefaultKeyMap(DEVICE_ID_PAD_0, defaultAndroidXboxControllerMap, ARRAY_SIZE(defaultAndroidXboxControllerMap), replace);
|
||||
break;
|
||||
}
|
||||
|
||||
UpdateNativeMenuKeys();
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
#pragma once
|
||||
|
||||
namespace KeyMap {
|
||||
|
||||
enum DefaultMaps {
|
||||
DEFAULT_MAPPING_KEYBOARD,
|
||||
DEFAULT_MAPPING_PAD,
|
||||
DEFAULT_MAPPING_X360,
|
||||
DEFAULT_MAPPING_ANDROID_PAD,
|
||||
DEFAULT_MAPPING_XINPUT,
|
||||
DEFAULT_MAPPING_ANDROID_XBOX, // XBox controller or similar on Android
|
||||
DEFAULT_MAPPING_SHIELD,
|
||||
DEFAULT_MAPPING_OUYA,
|
||||
DEFAULT_MAPPING_XPERIA_PLAY,
|
||||
@@ -11,3 +15,5 @@ enum DefaultMaps {
|
||||
};
|
||||
|
||||
void SetDefaultKeyMap(DefaultMaps dmap, bool replace);
|
||||
|
||||
}
|
||||
@@ -196,7 +196,7 @@ void XinputDevice::UpdatePad(int pad, const XINPUT_STATE &state, XINPUT_VIBRATIO
|
||||
ApplyVibration(pad, vibration);
|
||||
|
||||
AxisInput axis;
|
||||
axis.deviceId = DEVICE_ID_X360_0 + pad;
|
||||
axis.deviceId = DEVICE_ID_XINPUT_0 + pad;
|
||||
auto sendAxis = [&](AndroidJoystickAxis axisId, float value) {
|
||||
axis.axisId = axisId;
|
||||
axis.value = value;
|
||||
@@ -230,14 +230,14 @@ void XinputDevice::ApplyButtons(int pad, const XINPUT_STATE &state) {
|
||||
for (int i = 0; i < xinput_ctrl_map_size; i++) {
|
||||
if (downMask & xinput_ctrl_map[i].from) {
|
||||
KeyInput key;
|
||||
key.deviceId = DEVICE_ID_X360_0 + pad;
|
||||
key.deviceId = DEVICE_ID_XINPUT_0 + pad;
|
||||
key.flags = KEY_DOWN;
|
||||
key.keyCode = xinput_ctrl_map[i].to;
|
||||
NativeKey(key);
|
||||
}
|
||||
if (upMask & xinput_ctrl_map[i].from) {
|
||||
KeyInput key;
|
||||
key.deviceId = DEVICE_ID_X360_0 + pad;
|
||||
key.deviceId = DEVICE_ID_XINPUT_0 + pad;
|
||||
key.flags = KEY_UP;
|
||||
key.keyCode = xinput_ctrl_map[i].to;
|
||||
NativeKey(key);
|
||||
|
||||
Reference in new issue
Block a user