mirror of
https://github.com/libretro/RetroArch
synced 2025-04-17 11:43:00 +00:00
(Xbox 1) (Broken) controls
This commit is contained in:
parent
d9ff2d7c8f
commit
6b04a46c59
@ -297,7 +297,7 @@ static const struct platform_bind platform_keys[] = {
|
||||
{ CTRL_UP_MASK | CTRL_RSTICK_UP_MASK, "RStick D-Pad Up" },
|
||||
{ CTRL_DOWN_MASK | CTRL_RSTICK_DOWN_MASK, "RStick D-Pad Down" },
|
||||
};
|
||||
#elif defined(_XBOX)
|
||||
#elif defined(_XBOX360)
|
||||
static const struct platform_bind platform_keys[] = {
|
||||
{ XINPUT_GAMEPAD_B, "B button" },
|
||||
{ XINPUT_GAMEPAD_A, "A button" },
|
||||
@ -309,18 +309,10 @@ static const struct platform_bind platform_keys[] = {
|
||||
{ XINPUT_GAMEPAD_DPAD_RIGHT, "D-Pad Right" },
|
||||
{ XINPUT_GAMEPAD_BACK, "Back button" },
|
||||
{ XINPUT_GAMEPAD_START, "Start button" },
|
||||
#ifdef _XBOX1
|
||||
{ XINPUT_GAMEPAD_WHITE, "White button" },
|
||||
#else
|
||||
{ XINPUT_GAMEPAD_LEFT_SHOULDER, "Left Shoulder" },
|
||||
#endif
|
||||
{ XINPUT_GAMEPAD_LEFT_TRIGGER, "Left Trigger" },
|
||||
{ XINPUT_GAMEPAD_LEFT_THUMB, "Left Thumb" },
|
||||
#ifdef _XBOX1
|
||||
{ XINPUT_GAMEPAD_BLACK, "Black button" },
|
||||
#else
|
||||
{ XINPUT_GAMEPAD_RIGHT_SHOULDER, "Right Shoulder" },
|
||||
#endif
|
||||
{ XINPUT_GAMEPAD_RIGHT_TRIGGER, "Right Trigger" },
|
||||
{ XINPUT_GAMEPAD_RIGHT_THUMB, "Right Thumb" },
|
||||
{ XINPUT_GAMEPAD_LSTICK_LEFT_MASK, "LStick Left" },
|
||||
@ -340,6 +332,41 @@ static const struct platform_bind platform_keys[] = {
|
||||
{ XINPUT_GAMEPAD_DPAD_UP | XINPUT_GAMEPAD_RSTICK_UP_MASK, "RStick D-Pad Up" },
|
||||
{ XINPUT_GAMEPAD_DPAD_DOWN | XINPUT_GAMEPAD_RSTICK_DOWN_MASK, "RStick D-Pad Down" },
|
||||
};
|
||||
#elif defined(_XBOX1)
|
||||
static const struct platform_bind platform_keys[] = {
|
||||
{ XINPUT1_GAMEPAD_B, "B button" },
|
||||
{ XINPUT1_GAMEPAD_A, "A button" },
|
||||
{ XINPUT1_GAMEPAD_Y, "Y button" },
|
||||
{ XINPUT1_GAMEPAD_X, "X button" },
|
||||
{ XINPUT1_GAMEPAD_DPAD_UP, "D-Pad Up" },
|
||||
{ XINPUT1_GAMEPAD_DPAD_DOWN, "D-Pad Down" },
|
||||
{ XINPUT1_GAMEPAD_DPAD_LEFT, "D-Pad Left" },
|
||||
{ XINPUT1_GAMEPAD_DPAD_RIGHT, "D-Pad Right" },
|
||||
{ XINPUT1_GAMEPAD_BACK, "Back button" },
|
||||
{ XINPUT1_GAMEPAD_START, "Start button" },
|
||||
{ XINPUT1_GAMEPAD_WHITE, "White button" },
|
||||
{ XINPUT1_GAMEPAD_LEFT_TRIGGER, "Left Trigger" },
|
||||
{ XINPUT1_GAMEPAD_LEFT_THUMB, "Left Thumb" },
|
||||
{ XINPUT1_GAMEPAD_BLACK, "Black button" },
|
||||
{ XINPUT1_GAMEPAD_RIGHT_TRIGGER, "Right Trigger" },
|
||||
{ XINPUT1_GAMEPAD_RIGHT_THUMB, "Right Thumb" },
|
||||
{ XINPUT1_GAMEPAD_LSTICK_LEFT_MASK, "LStick Left" },
|
||||
{ XINPUT1_GAMEPAD_LSTICK_RIGHT_MASK, "LStick Right" },
|
||||
{ XINPUT1_GAMEPAD_LSTICK_UP_MASK, "LStick Up" },
|
||||
{ XINPUT1_GAMEPAD_LSTICK_DOWN_MASK, "LStick Down" },
|
||||
{ XINPUT1_GAMEPAD_DPAD_LEFT | XINPUT1_GAMEPAD_LSTICK_LEFT_MASK, "LStick D-Pad Left" },
|
||||
{ XINPUT1_GAMEPAD_DPAD_RIGHT | XINPUT1_GAMEPAD_LSTICK_RIGHT_MASK, "LStick D-Pad Right" },
|
||||
{ XINPUT1_GAMEPAD_DPAD_UP | XINPUT1_GAMEPAD_LSTICK_UP_MASK, "LStick D-Pad Up" },
|
||||
{ XINPUT1_GAMEPAD_DPAD_DOWN | XINPUT1_GAMEPAD_LSTICK_DOWN_MASK, "LStick D-Pad Down" },
|
||||
{ XINPUT1_GAMEPAD_RSTICK_LEFT_MASK, "RStick Left" },
|
||||
{ XINPUT1_GAMEPAD_RSTICK_RIGHT_MASK, "RStick Right" },
|
||||
{ XINPUT1_GAMEPAD_RSTICK_UP_MASK, "RStick Up" },
|
||||
{ XINPUT1_GAMEPAD_RSTICK_DOWN_MASK, "RStick Down" },
|
||||
{ XINPUT1_GAMEPAD_DPAD_LEFT | XINPUT1_GAMEPAD_RSTICK_LEFT_MASK, "RStick D-Pad Left" },
|
||||
{ XINPUT1_GAMEPAD_DPAD_RIGHT | XINPUT1_GAMEPAD_RSTICK_RIGHT_MASK, "RStick D-Pad Right" },
|
||||
{ XINPUT1_GAMEPAD_DPAD_UP | XINPUT1_GAMEPAD_RSTICK_UP_MASK, "RStick D-Pad Up" },
|
||||
{ XINPUT1_GAMEPAD_DPAD_DOWN | XINPUT1_GAMEPAD_RSTICK_DOWN_MASK, "RStick D-Pad Down" },
|
||||
};
|
||||
#elif defined(GEKKO)
|
||||
static const struct platform_bind platform_keys[] = {
|
||||
{ PAD_BUTTON_B, "(NGC) B button" },
|
||||
|
@ -124,6 +124,10 @@ enum xdk_device_id
|
||||
|
||||
RARCH_LAST_PLATFORM_KEY
|
||||
};
|
||||
|
||||
#ifdef _XBOX1
|
||||
#include "../xbox1/xinput_xbox_input.h"
|
||||
#endif
|
||||
#elif defined(GEKKO)
|
||||
#include <ogc/pad.h>
|
||||
#ifdef HW_RVL
|
||||
|
@ -17,6 +17,7 @@
|
||||
#ifndef __RARCH_XINPUT2_H
|
||||
#define __RARCH_XINPUT2_H
|
||||
|
||||
#ifndef _XBOX1
|
||||
#define XINPUT_GAMEPAD_LSTICK_LEFT_MASK (65536)
|
||||
#define XINPUT_GAMEPAD_LSTICK_RIGHT_MASK (131072)
|
||||
#define XINPUT_GAMEPAD_LSTICK_UP_MASK (262144)
|
||||
@ -25,8 +26,6 @@
|
||||
#define XINPUT_GAMEPAD_RSTICK_RIGHT_MASK (2097152)
|
||||
#define XINPUT_GAMEPAD_RSTICK_UP_MASK (4194304)
|
||||
#define XINPUT_GAMEPAD_RSTICK_DOWN_MASK (8388608)
|
||||
|
||||
#ifndef HAVE_XINPUT_XBOX1
|
||||
#define XINPUT_GAMEPAD_LEFT_TRIGGER (16777216)
|
||||
#define XINPUT_GAMEPAD_RIGHT_TRIGGER (33554432)
|
||||
#endif
|
||||
|
@ -25,6 +25,7 @@
|
||||
#include "../general.h"
|
||||
#include "../libretro.h"
|
||||
#include "../input/rarch_xinput2.h"
|
||||
#include "xinput_xbox_input.h"
|
||||
|
||||
static uint64_t state[4];
|
||||
HANDLE gamepads[4];
|
||||
@ -61,35 +62,91 @@ static void xinput_input_poll(void *data)
|
||||
|
||||
// handle inserted devices
|
||||
bInserted[i] = (dwInsertions & (1<<i)) ? true : false;
|
||||
|
||||
if(bInserted[i])
|
||||
{
|
||||
XINPUT_POLLING_PARAMETERS m_pollingParameters;
|
||||
m_pollingParameters.fAutoPoll = TRUE;
|
||||
m_pollingParameters.fInterruptOut = TRUE;
|
||||
m_pollingParameters.bInputInterval = 8;
|
||||
m_pollingParameters.bOutputInterval = 8;
|
||||
gamepads[i] = XInputOpen(XDEVICE_TYPE_GAMEPAD, i, XDEVICE_NO_SLOT, NULL);
|
||||
}
|
||||
|
||||
if (gamepads[i])
|
||||
{
|
||||
XINPUT_STATE state_tmp;
|
||||
unsigned long retval;
|
||||
XINPUT_POLLING_PARAMETERS m_pollingParameters;
|
||||
|
||||
// if the controller is removed after XGetDeviceChanges but before
|
||||
// XInputOpen, the device handle will be NULL
|
||||
m_pollingParameters.fAutoPoll = TRUE;
|
||||
m_pollingParameters.fInterruptOut = TRUE;
|
||||
m_pollingParameters.bInputInterval = 8;
|
||||
m_pollingParameters.bOutputInterval = 8;
|
||||
gamepads[i] = XInputOpen(XDEVICE_TYPE_GAMEPAD, i, XDEVICE_NO_SLOT, NULL);
|
||||
|
||||
if(gamepads[i])
|
||||
{
|
||||
retval = XInputGetState(gamepads[i], &state_tmp);
|
||||
pads_connected += (retval != ERROR_SUCCESS) ? 0 : 1;
|
||||
state[i] = state_tmp.Gamepad.wButtons;
|
||||
state[i] |= ((state_tmp.Gamepad.sThumbLX < -DEADZONE)) << 16;
|
||||
state[i] |= ((state_tmp.Gamepad.sThumbLX > DEADZONE)) << 17;
|
||||
state[i] |= ((state_tmp.Gamepad.sThumbLY > DEADZONE)) << 18;
|
||||
state[i] |= ((state_tmp.Gamepad.sThumbLY < -DEADZONE)) << 19;
|
||||
state[i] |= ((state_tmp.Gamepad.sThumbRX < -DEADZONE)) << 20;
|
||||
state[i] |= ((state_tmp.Gamepad.sThumbRX > DEADZONE)) << 21;
|
||||
state[i] |= ((state_tmp.Gamepad.sThumbRY > DEADZONE)) << 22;
|
||||
state[i] |= ((state_tmp.Gamepad.sThumbRY < -DEADZONE)) << 23;
|
||||
state[i] |= ((state_tmp.Gamepad.bAnalogButtons[XINPUT_GAMEPAD_LEFT_TRIGGER] > 128 ? 1 : 0)) << 24;
|
||||
state[i] |= ((state_tmp.Gamepad.bAnalogButtons[XINPUT_GAMEPAD_RIGHT_TRIGGER] > 128 ? 1 : 0)) << 25;
|
||||
}
|
||||
retval = XInputGetState(gamepads[i], &state_tmp);
|
||||
pads_connected += (retval != ERROR_SUCCESS) ? 0 : 1;
|
||||
state[i] = 0;
|
||||
|
||||
//GBA Button B
|
||||
state[i] |= (state_tmp.Gamepad.bAnalogButtons[XINPUT_GAMEPAD_B] ? 1 : 0) << XINPUT1_GAMEPAD_B;
|
||||
|
||||
// Unknown button (probably not mapped in VBA)
|
||||
state[i] |= (state_tmp.Gamepad.bAnalogButtons[XINPUT_GAMEPAD_A] ? 1 : 0) << XINPUT1_GAMEPAD_A;
|
||||
|
||||
// Up (D-Pad)
|
||||
state[i] |= (state_tmp.Gamepad.bAnalogButtons[XINPUT_GAMEPAD_Y] ? 1 : 0) << XINPUT1_GAMEPAD_Y;
|
||||
|
||||
// Unknown button (probably not mapped in VBA)
|
||||
state[i] |= (state_tmp.Gamepad.bAnalogButtons[XINPUT_GAMEPAD_X] ? 1 : 0) << XINPUT1_GAMEPAD_X;
|
||||
|
||||
// Unknown button (probably not mapped in VBA)
|
||||
state[i] |= (state_tmp.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_UP) << XINPUT1_GAMEPAD_DPAD_UP;
|
||||
|
||||
// Unknown button (probably not mapped in VBA)
|
||||
state[i] |= (state_tmp.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_DOWN) << XINPUT1_GAMEPAD_DPAD_DOWN;
|
||||
|
||||
// Unknown button (probably not mapped in VBA)
|
||||
state[i] |= (state_tmp.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_LEFT) << XINPUT1_GAMEPAD_DPAD_LEFT;
|
||||
|
||||
// Unknown button (probably not mapped in VBA)
|
||||
state[i] |= (state_tmp.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_RIGHT) << XINPUT1_GAMEPAD_DPAD_RIGHT;
|
||||
|
||||
// Down
|
||||
state[i] |= (state_tmp.Gamepad.wButtons & XINPUT_GAMEPAD_BACK) << XINPUT1_GAMEPAD_BACK;
|
||||
|
||||
// Up (D-Pad)
|
||||
state[i] |= (state_tmp.Gamepad.wButtons & XINPUT_GAMEPAD_START) << XINPUT1_GAMEPAD_START;
|
||||
|
||||
// Analog buttons seem to all report the same thing - GBA Button A
|
||||
|
||||
// GBA Button A
|
||||
state[i] |= (state_tmp.Gamepad.bAnalogButtons[XINPUT_GAMEPAD_WHITE] ? 1 : 0) << XINPUT1_GAMEPAD_WHITE;
|
||||
|
||||
// GBA Button A
|
||||
state[i] |= (state_tmp.Gamepad.bAnalogButtons[XINPUT_GAMEPAD_LEFT_TRIGGER] ? 1 : 0) << XINPUT1_GAMEPAD_LEFT_TRIGGER;
|
||||
|
||||
// Left
|
||||
state[i] |= (state_tmp.Gamepad.wButtons & XINPUT_GAMEPAD_LEFT_THUMB) << XINPUT1_GAMEPAD_LEFT_THUMB;
|
||||
|
||||
// GBA Button A
|
||||
state[i] |= (state_tmp.Gamepad.bAnalogButtons[XINPUT_GAMEPAD_BLACK] ? 1 : 0) << XINPUT1_GAMEPAD_BLACK;
|
||||
|
||||
// Right
|
||||
state[i] |= (state_tmp.Gamepad.wButtons & XINPUT_GAMEPAD_RIGHT_THUMB) << XINPUT1_GAMEPAD_RIGHT_THUMB;
|
||||
|
||||
//state[i] |= ((state_tmp.Gamepad.sThumbLX < -DEADZONE)) << 16;
|
||||
//state[i] |= ((state_tmp.Gamepad.sThumbLX > DEADZONE)) << 17;
|
||||
//state[i] |= ((state_tmp.Gamepad.sThumbLY > DEADZONE)) << 18;
|
||||
//state[i] |= ((state_tmp.Gamepad.sThumbLY < -DEADZONE)) << 19;
|
||||
//state[i] |= ((state_tmp.Gamepad.sThumbRX < -DEADZONE)) << 20;
|
||||
//state[i] |= ((state_tmp.Gamepad.sThumbRX > DEADZONE)) << 21;
|
||||
//state[i] |= ((state_tmp.Gamepad.sThumbRY > DEADZONE)) << 22;
|
||||
//state[i] |= ((state_tmp.Gamepad.sThumbRY < -DEADZONE)) << 23;
|
||||
|
||||
// GBA Button A
|
||||
state[i] |= ((state_tmp.Gamepad.bAnalogButtons[XINPUT_GAMEPAD_LEFT_TRIGGER] ? 1 : 0)) << XINPUT1_GAMEPAD_LEFT_TRIGGER;
|
||||
|
||||
// GBA Button A
|
||||
state[i] |= ((state_tmp.Gamepad.bAnalogButtons[XINPUT_GAMEPAD_RIGHT_TRIGGER] ? 1 : 0)) << XINPUT1_GAMEPAD_RIGHT_TRIGGER;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
47
xbox1/xinput_xbox_input.h
Normal file
47
xbox1/xinput_xbox_input.h
Normal file
@ -0,0 +1,47 @@
|
||||
/* RetroArch - A frontend for libretro.
|
||||
* Copyright (C) 2010-2012 - Hans-Kristian Arntzen
|
||||
* Copyright (C) 2011-2012 - Daniel De Matteis
|
||||
*
|
||||
* RetroArch is free software: you can redistribute it and/or modify it under the terms
|
||||
* of the GNU General Public License as published by the Free Software Found-
|
||||
* ation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||
* PURPOSE. See the GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with RetroArch.
|
||||
* If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef _XDK_XINPUT1_H
|
||||
#define _XDK_XINPUT1_H
|
||||
|
||||
enum {
|
||||
XINPUT1_GAMEPAD_B = 1 << 0,
|
||||
XINPUT1_GAMEPAD_A = 1 << 1,
|
||||
XINPUT1_GAMEPAD_Y = 1 << 2,
|
||||
XINPUT1_GAMEPAD_X = 1 << 3,
|
||||
XINPUT1_GAMEPAD_DPAD_UP = 1 << 4,
|
||||
XINPUT1_GAMEPAD_DPAD_DOWN = 1 << 5,
|
||||
XINPUT1_GAMEPAD_DPAD_LEFT = 1 << 6,
|
||||
XINPUT1_GAMEPAD_DPAD_RIGHT = 1 << 7,
|
||||
XINPUT1_GAMEPAD_BACK = 1 << 8,
|
||||
XINPUT1_GAMEPAD_START = 1 << 9,
|
||||
XINPUT1_GAMEPAD_WHITE = 1 << 10,
|
||||
XINPUT1_GAMEPAD_LEFT_TRIGGER = 1 << 11,
|
||||
XINPUT1_GAMEPAD_LEFT_THUMB = 1 << 12,
|
||||
XINPUT1_GAMEPAD_BLACK = 1 << 13,
|
||||
XINPUT1_GAMEPAD_RIGHT_TRIGGER = 1 << 14,
|
||||
XINPUT1_GAMEPAD_RIGHT_THUMB = 1 << 15,
|
||||
XINPUT1_GAMEPAD_LSTICK_LEFT_MASK = 1 << 16,
|
||||
XINPUT1_GAMEPAD_LSTICK_RIGHT_MASK = 1 << 17,
|
||||
XINPUT1_GAMEPAD_LSTICK_UP_MASK = 1 << 18,
|
||||
XINPUT1_GAMEPAD_LSTICK_DOWN_MASK = 1 << 19,
|
||||
XINPUT1_GAMEPAD_RSTICK_LEFT_MASK = 1 << 20,
|
||||
XINPUT1_GAMEPAD_RSTICK_RIGHT_MASK = 1 << 21,
|
||||
XINPUT1_GAMEPAD_RSTICK_UP_MASK = 1 << 22,
|
||||
XINPUT1_GAMEPAD_RSTICK_DOWN_MASK = 1 << 23,
|
||||
};
|
||||
|
||||
#endif
|
Loading…
x
Reference in New Issue
Block a user