diff --git a/console/retroarch_console.c b/console/retroarch_console.c index 6733c67b03..8bcd6b610e 100644 --- a/console/retroarch_console.c +++ b/console/retroarch_console.c @@ -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" }, diff --git a/console/retroarch_console_input.h b/console/retroarch_console_input.h index fd32e36479..2269cc8da5 100644 --- a/console/retroarch_console_input.h +++ b/console/retroarch_console_input.h @@ -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 #ifdef HW_RVL diff --git a/input/rarch_xinput2.h b/input/rarch_xinput2.h index c3856a4b81..11f3021c69 100644 --- a/input/rarch_xinput2.h +++ b/input/rarch_xinput2.h @@ -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 diff --git a/xbox1/xinput_xbox_input.c b/xbox1/xinput_xbox_input.c index e2fd737026..1e5280468a 100644 --- a/xbox1/xinput_xbox_input.c +++ b/xbox1/xinput_xbox_input.c @@ -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< 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; + } } } diff --git a/xbox1/xinput_xbox_input.h b/xbox1/xinput_xbox_input.h new file mode 100644 index 0000000000..34bf1a8719 --- /dev/null +++ b/xbox1/xinput_xbox_input.h @@ -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 . + */ + +#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