mirror of
https://github.com/libretro/RetroArch
synced 2025-02-03 17:54:04 +00:00
(WiiU) add support for bluetooth controllers (Wiimote, nunchuk, classic
controller, wiiu pro controller).
This commit is contained in:
parent
77cf4f4e06
commit
8cb692622a
@ -49,6 +49,7 @@
|
|||||||
#include <proc_ui/procui.h>
|
#include <proc_ui/procui.h>
|
||||||
#include <vpad/input.h>
|
#include <vpad/input.h>
|
||||||
#include <sysapp/launch.h>
|
#include <sysapp/launch.h>
|
||||||
|
#include <padscore.h>
|
||||||
|
|
||||||
#include <fat.h>
|
#include <fat.h>
|
||||||
#include <iosuhax.h>
|
#include <iosuhax.h>
|
||||||
@ -279,6 +280,9 @@ int main(int argc, char **argv)
|
|||||||
devoptab_list[STD_ERR] = &dotab_stdout;
|
devoptab_list[STD_ERR] = &dotab_stdout;
|
||||||
#endif
|
#endif
|
||||||
VPADInit();
|
VPADInit();
|
||||||
|
WPADEnableURCC(true);
|
||||||
|
WPADEnableWiiRemote(true);
|
||||||
|
KPADInit();
|
||||||
|
|
||||||
verbosity_enable();
|
verbosity_enable();
|
||||||
DEBUG_VAR(argc);
|
DEBUG_VAR(argc);
|
||||||
|
@ -30,7 +30,7 @@
|
|||||||
|
|
||||||
#include "wiiu_dbg.h"
|
#include "wiiu_dbg.h"
|
||||||
|
|
||||||
#define MAX_PADS 1
|
#define MAX_PADS 5
|
||||||
|
|
||||||
typedef struct wiiu_input
|
typedef struct wiiu_input
|
||||||
{
|
{
|
||||||
@ -56,7 +56,7 @@ static int16_t wiiu_input_state(void *data,
|
|||||||
{
|
{
|
||||||
wiiu_input_t *wiiu = (wiiu_input_t*)data;
|
wiiu_input_t *wiiu = (wiiu_input_t*)data;
|
||||||
|
|
||||||
if(!wiiu || (port > 0) || !binds || !binds[port])
|
if(!wiiu || !(port < MAX_PADS) || !binds || !binds[port])
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
switch (device)
|
switch (device)
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <vpad/input.h>
|
#include <vpad/input.h>
|
||||||
|
#include <padscore.h>
|
||||||
|
|
||||||
#include "../input_config.h"
|
#include "../input_config.h"
|
||||||
#include "../input_driver.h"
|
#include "../input_driver.h"
|
||||||
@ -32,17 +33,50 @@
|
|||||||
#include "wiiu_dbg.h"
|
#include "wiiu_dbg.h"
|
||||||
|
|
||||||
#ifndef MAX_PADS
|
#ifndef MAX_PADS
|
||||||
#define MAX_PADS 1
|
#define MAX_PADS 5
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static uint64_t pad_state;
|
#define WIIUINPUT_TYPE_WIIMOTE 0x00
|
||||||
static int16_t analog_state[1][2][2];
|
#define WIIUINPUT_TYPE_NUNCHUK 0x01
|
||||||
|
#define WIIUINPUT_TYPE_CLASSIC_CONTROLLER 0x02
|
||||||
|
#define WIIUINPUT_TYPE_PRO_CONTROLLER 0x1F
|
||||||
|
#define WIIUINPUT_TYPE_NONE 0xFD
|
||||||
|
|
||||||
|
static uint64_t pad_state[MAX_PADS];
|
||||||
|
static u8 pad_type[MAX_PADS - 1] = {WIIUINPUT_TYPE_NONE, WIIUINPUT_TYPE_NONE, WIIUINPUT_TYPE_NONE, WIIUINPUT_TYPE_NONE};
|
||||||
|
static int16_t analog_state[MAX_PADS][2][2];
|
||||||
extern uint64_t lifecycle_state;
|
extern uint64_t lifecycle_state;
|
||||||
static bool wiiu_pad_inited = false;
|
static bool wiiu_pad_inited = false;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static const char* wiiu_joypad_name(unsigned pad)
|
static const char* wiiu_joypad_name(unsigned pad)
|
||||||
{
|
{
|
||||||
return "WIIU Controller";
|
if (pad == 0)
|
||||||
|
return "WIIU Gamepad";
|
||||||
|
|
||||||
|
if (pad < MAX_PADS)
|
||||||
|
{
|
||||||
|
switch (pad_type[pad - 1])
|
||||||
|
{
|
||||||
|
case WIIUINPUT_TYPE_NONE:
|
||||||
|
return "N/A";
|
||||||
|
|
||||||
|
case WIIUINPUT_TYPE_PRO_CONTROLLER:
|
||||||
|
return "WIIU Pro Controller";
|
||||||
|
|
||||||
|
case WIIUINPUT_TYPE_WIIMOTE:
|
||||||
|
return "Wiimote Controller";
|
||||||
|
|
||||||
|
case WIIUINPUT_TYPE_NUNCHUK:
|
||||||
|
return "Nunchuk Controller";
|
||||||
|
|
||||||
|
case WIIUINPUT_TYPE_CLASSIC_CONTROLLER:
|
||||||
|
return "Classic Controller";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return "unknown";
|
||||||
}
|
}
|
||||||
|
|
||||||
static void wiiu_joypad_autodetect_add(unsigned autoconf_pad)
|
static void wiiu_joypad_autodetect_add(unsigned autoconf_pad)
|
||||||
@ -63,12 +97,12 @@ static bool wiiu_joypad_button(unsigned port_num, uint16_t key)
|
|||||||
if (port_num >= MAX_PADS)
|
if (port_num >= MAX_PADS)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return (pad_state & (UINT64_C(1) << key));
|
return (pad_state[port_num] & (UINT64_C(1) << key));
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint64_t wiiu_joypad_get_buttons(unsigned port_num)
|
static uint64_t wiiu_joypad_get_buttons(unsigned port_num)
|
||||||
{
|
{
|
||||||
return pad_state;
|
return pad_state[port_num];
|
||||||
}
|
}
|
||||||
|
|
||||||
static int16_t wiiu_joypad_axis(unsigned port_num, uint32_t joyaxis)
|
static int16_t wiiu_joypad_axis(unsigned port_num, uint32_t joyaxis)
|
||||||
@ -97,12 +131,15 @@ static int16_t wiiu_joypad_axis(unsigned port_num, uint32_t joyaxis)
|
|||||||
case 0:
|
case 0:
|
||||||
val = analog_state[port_num][0][0];
|
val = analog_state[port_num][0][0];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
val = analog_state[port_num][0][1];
|
val = analog_state[port_num][0][1];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
val = analog_state[port_num][1][0];
|
val = analog_state[port_num][1][0];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
val = analog_state[port_num][1][1];
|
val = analog_state[port_num][1][1];
|
||||||
break;
|
break;
|
||||||
@ -118,30 +155,31 @@ static int16_t wiiu_joypad_axis(unsigned port_num, uint32_t joyaxis)
|
|||||||
|
|
||||||
static void wiiu_joypad_poll(void)
|
static void wiiu_joypad_poll(void)
|
||||||
{
|
{
|
||||||
|
int c;
|
||||||
VPADStatus vpad;
|
VPADStatus vpad;
|
||||||
VPADReadError vpadError;
|
VPADReadError vpadError;
|
||||||
|
|
||||||
VPADRead(0, &vpad, 1, &vpadError);
|
VPADRead(0, &vpad, 1, &vpadError);
|
||||||
|
|
||||||
if(vpadError)
|
if (!vpadError)
|
||||||
return;
|
{
|
||||||
|
pad_state[0] = 0;
|
||||||
pad_state = 0;
|
pad_state[0] |= (vpad.hold & VPAD_BUTTON_LEFT) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_LEFT) : 0;
|
||||||
pad_state |= (vpad.hold & VPAD_BUTTON_LEFT) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_LEFT) : 0;
|
pad_state[0] |= (vpad.hold & VPAD_BUTTON_DOWN) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_DOWN) : 0;
|
||||||
pad_state |= (vpad.hold & VPAD_BUTTON_DOWN) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_DOWN) : 0;
|
pad_state[0] |= (vpad.hold & VPAD_BUTTON_RIGHT) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_RIGHT) : 0;
|
||||||
pad_state |= (vpad.hold & VPAD_BUTTON_RIGHT) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_RIGHT) : 0;
|
pad_state[0] |= (vpad.hold & VPAD_BUTTON_UP) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_UP) : 0;
|
||||||
pad_state |= (vpad.hold & VPAD_BUTTON_UP) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_UP) : 0;
|
pad_state[0] |= (vpad.hold & VPAD_BUTTON_PLUS) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_START) : 0;
|
||||||
pad_state |= (vpad.hold & VPAD_BUTTON_PLUS) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_START) : 0;
|
pad_state[0] |= (vpad.hold & VPAD_BUTTON_MINUS) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_SELECT) : 0;
|
||||||
pad_state |= (vpad.hold & VPAD_BUTTON_MINUS) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_SELECT) : 0;
|
pad_state[0] |= (vpad.hold & VPAD_BUTTON_X) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_X) : 0;
|
||||||
pad_state |= (vpad.hold & VPAD_BUTTON_X) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_X) : 0;
|
pad_state[0] |= (vpad.hold & VPAD_BUTTON_Y) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_Y) : 0;
|
||||||
pad_state |= (vpad.hold & VPAD_BUTTON_Y) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_Y) : 0;
|
pad_state[0] |= (vpad.hold & VPAD_BUTTON_B) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_B) : 0;
|
||||||
pad_state |= (vpad.hold & VPAD_BUTTON_B) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_B) : 0;
|
pad_state[0] |= (vpad.hold & VPAD_BUTTON_A) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_A) : 0;
|
||||||
pad_state |= (vpad.hold & VPAD_BUTTON_A) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_A) : 0;
|
pad_state[0] |= (vpad.hold & VPAD_BUTTON_R) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_R) : 0;
|
||||||
pad_state |= (vpad.hold & VPAD_BUTTON_R) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_R) : 0;
|
pad_state[0] |= (vpad.hold & VPAD_BUTTON_L) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_L) : 0;
|
||||||
pad_state |= (vpad.hold & VPAD_BUTTON_L) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_L) : 0;
|
pad_state[0] |= (vpad.hold & VPAD_BUTTON_ZR) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_R2) : 0;
|
||||||
pad_state |= (vpad.hold & VPAD_BUTTON_ZR) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_R2) : 0;
|
pad_state[0] |= (vpad.hold & VPAD_BUTTON_ZL) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_L2) : 0;
|
||||||
pad_state |= (vpad.hold & VPAD_BUTTON_ZL) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_L2) : 0;
|
pad_state[0] |= (vpad.hold & VPAD_BUTTON_STICK_R) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_R3) : 0;
|
||||||
pad_state |= (vpad.hold & VPAD_BUTTON_STICK_R) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_R3) : 0;
|
pad_state[0] |= (vpad.hold & VPAD_BUTTON_STICK_L) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_L3) : 0;
|
||||||
pad_state |= (vpad.hold & VPAD_BUTTON_STICK_L) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_L3) : 0;
|
|
||||||
|
|
||||||
analog_state[0][RETRO_DEVICE_INDEX_ANALOG_LEFT] [RETRO_DEVICE_ID_ANALOG_X] = vpad.leftStick.x * 0x7FF0;
|
analog_state[0][RETRO_DEVICE_INDEX_ANALOG_LEFT] [RETRO_DEVICE_ID_ANALOG_X] = vpad.leftStick.x * 0x7FF0;
|
||||||
analog_state[0][RETRO_DEVICE_INDEX_ANALOG_LEFT] [RETRO_DEVICE_ID_ANALOG_Y] = -vpad.leftStick.y * 0x7FF0;
|
analog_state[0][RETRO_DEVICE_INDEX_ANALOG_LEFT] [RETRO_DEVICE_ID_ANALOG_Y] = -vpad.leftStick.y * 0x7FF0;
|
||||||
@ -162,6 +200,98 @@ static void wiiu_joypad_poll(void)
|
|||||||
command_event(CMD_EVENT_QUIT, NULL);
|
command_event(CMD_EVENT_QUIT, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (c = 0; c < 4; c++)
|
||||||
|
{
|
||||||
|
KPADData kpad;
|
||||||
|
u32 result;
|
||||||
|
|
||||||
|
result = KPADRead(c, &kpad, 1);
|
||||||
|
|
||||||
|
if (!result)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (pad_type[c] != kpad.device_type)
|
||||||
|
{
|
||||||
|
pad_type[c] = kpad.device_type;
|
||||||
|
wiiu_joypad_autodetect_add(c + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
pad_state[c + 1] = 0;
|
||||||
|
|
||||||
|
switch (kpad.device_type)
|
||||||
|
{
|
||||||
|
case WIIUINPUT_TYPE_WIIMOTE:
|
||||||
|
pad_state[c + 1] |= (kpad.btns_h & WPAD_BUTTON_LEFT) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_LEFT) : 0;
|
||||||
|
pad_state[c + 1] |= (kpad.btns_h & WPAD_BUTTON_DOWN) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_DOWN) : 0;
|
||||||
|
pad_state[c + 1] |= (kpad.btns_h & WPAD_BUTTON_RIGHT) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_RIGHT) : 0;
|
||||||
|
pad_state[c + 1] |= (kpad.btns_h & WPAD_BUTTON_UP) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_UP) : 0;
|
||||||
|
pad_state[c + 1] |= (kpad.btns_h & WPAD_BUTTON_PLUS) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_START) : 0;
|
||||||
|
pad_state[c + 1] |= (kpad.btns_h & WPAD_BUTTON_MINUS) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_SELECT) : 0;
|
||||||
|
pad_state[c + 1] |= (kpad.btns_h & WPAD_BUTTON_1) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_X) : 0;
|
||||||
|
pad_state[c + 1] |= (kpad.btns_h & WPAD_BUTTON_2) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_Y) : 0;
|
||||||
|
pad_state[c + 1] |= (kpad.btns_h & WPAD_BUTTON_B) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_B) : 0;
|
||||||
|
pad_state[c + 1] |= (kpad.btns_h & WPAD_BUTTON_A) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_A) : 0;
|
||||||
|
|
||||||
|
analog_state[c + 1][RETRO_DEVICE_INDEX_ANALOG_LEFT] [RETRO_DEVICE_ID_ANALOG_X] = 0;
|
||||||
|
analog_state[c + 1][RETRO_DEVICE_INDEX_ANALOG_LEFT] [RETRO_DEVICE_ID_ANALOG_Y] = 0;
|
||||||
|
analog_state[c + 1][RETRO_DEVICE_INDEX_ANALOG_RIGHT] [RETRO_DEVICE_ID_ANALOG_X] = 0;
|
||||||
|
analog_state[c + 1][RETRO_DEVICE_INDEX_ANALOG_RIGHT] [RETRO_DEVICE_ID_ANALOG_Y] = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WIIUINPUT_TYPE_NUNCHUK:
|
||||||
|
pad_state[c + 1] |= (kpad.btns_h & WPAD_BUTTON_LEFT) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_LEFT) : 0;
|
||||||
|
pad_state[c + 1] |= (kpad.btns_h & WPAD_BUTTON_DOWN) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_DOWN) : 0;
|
||||||
|
pad_state[c + 1] |= (kpad.btns_h & WPAD_BUTTON_RIGHT) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_RIGHT) : 0;
|
||||||
|
pad_state[c + 1] |= (kpad.btns_h & WPAD_BUTTON_UP) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_UP) : 0;
|
||||||
|
pad_state[c + 1] |= (kpad.btns_h & WPAD_BUTTON_PLUS) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_START) : 0;
|
||||||
|
pad_state[c + 1] |= (kpad.btns_h & WPAD_BUTTON_MINUS) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_SELECT) : 0;
|
||||||
|
pad_state[c + 1] |= (kpad.btns_h & WPAD_BUTTON_1) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_X) : 0;
|
||||||
|
pad_state[c + 1] |= (kpad.btns_h & WPAD_BUTTON_2) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_Y) : 0;
|
||||||
|
pad_state[c + 1] |= (kpad.btns_h & WPAD_BUTTON_B) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_B) : 0;
|
||||||
|
pad_state[c + 1] |= (kpad.btns_h & WPAD_BUTTON_A) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_A) : 0;
|
||||||
|
pad_state[c + 1] |= (kpad.btns_h & WPAD_BUTTON_Z) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_R) : 0;
|
||||||
|
pad_state[c + 1] |= (kpad.btns_h & WPAD_BUTTON_C) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_L) : 0;
|
||||||
|
|
||||||
|
analog_state[c + 1][RETRO_DEVICE_INDEX_ANALOG_LEFT] [RETRO_DEVICE_ID_ANALOG_X] = kpad.nunchuck.stick_x * 0x7FF0;
|
||||||
|
analog_state[c + 1][RETRO_DEVICE_INDEX_ANALOG_LEFT] [RETRO_DEVICE_ID_ANALOG_Y] = -kpad.nunchuck.stick_y * 0x7FF0;
|
||||||
|
analog_state[c + 1][RETRO_DEVICE_INDEX_ANALOG_RIGHT] [RETRO_DEVICE_ID_ANALOG_X] = 0;
|
||||||
|
analog_state[c + 1][RETRO_DEVICE_INDEX_ANALOG_RIGHT] [RETRO_DEVICE_ID_ANALOG_Y] = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WIIUINPUT_TYPE_PRO_CONTROLLER:
|
||||||
|
|
||||||
|
pad_state[c + 1] |= (kpad.classic.btns_h & WPAD_PRO_BUTTON_STICK_R) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_R3) : 0;
|
||||||
|
pad_state[c + 1] |= (kpad.classic.btns_h & WPAD_PRO_BUTTON_STICK_L) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_L3) : 0;
|
||||||
|
|
||||||
|
/* fallthrough */
|
||||||
|
case WIIUINPUT_TYPE_CLASSIC_CONTROLLER:
|
||||||
|
pad_state[c + 1] |= (kpad.classic.btns_h & WPAD_CLASSIC_BUTTON_LEFT) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_LEFT) : 0;
|
||||||
|
pad_state[c + 1] |= (kpad.classic.btns_h & WPAD_CLASSIC_BUTTON_DOWN) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_DOWN) : 0;
|
||||||
|
pad_state[c + 1] |= (kpad.classic.btns_h & WPAD_CLASSIC_BUTTON_RIGHT) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_RIGHT) :
|
||||||
|
0;
|
||||||
|
pad_state[c + 1] |= (kpad.classic.btns_h & WPAD_CLASSIC_BUTTON_UP) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_UP) : 0;
|
||||||
|
pad_state[c + 1] |= (kpad.classic.btns_h & WPAD_CLASSIC_BUTTON_PLUS) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_START) :
|
||||||
|
0;
|
||||||
|
pad_state[c + 1] |= (kpad.classic.btns_h & WPAD_CLASSIC_BUTTON_MINUS) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_SELECT) :
|
||||||
|
0;
|
||||||
|
pad_state[c + 1] |= (kpad.classic.btns_h & WPAD_CLASSIC_BUTTON_X) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_X) : 0;
|
||||||
|
pad_state[c + 1] |= (kpad.classic.btns_h & WPAD_CLASSIC_BUTTON_Y) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_Y) : 0;
|
||||||
|
pad_state[c + 1] |= (kpad.classic.btns_h & WPAD_CLASSIC_BUTTON_B) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_B) : 0;
|
||||||
|
pad_state[c + 1] |= (kpad.classic.btns_h & WPAD_CLASSIC_BUTTON_A) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_A) : 0;
|
||||||
|
pad_state[c + 1] |= (kpad.classic.btns_h & WPAD_CLASSIC_BUTTON_R) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_R) : 0;
|
||||||
|
pad_state[c + 1] |= (kpad.classic.btns_h & WPAD_CLASSIC_BUTTON_L) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_L) : 0;
|
||||||
|
pad_state[c + 1] |= (kpad.classic.btns_h & WPAD_CLASSIC_BUTTON_ZR) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_R2) : 0;
|
||||||
|
pad_state[c + 1] |= (kpad.classic.btns_h & WPAD_CLASSIC_BUTTON_ZL) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_L2) : 0;
|
||||||
|
|
||||||
|
analog_state[c + 1][RETRO_DEVICE_INDEX_ANALOG_LEFT] [RETRO_DEVICE_ID_ANALOG_X] = kpad.classic.lstick_x * 0x7FF0;
|
||||||
|
analog_state[c + 1][RETRO_DEVICE_INDEX_ANALOG_LEFT] [RETRO_DEVICE_ID_ANALOG_Y] = -kpad.classic.lstick_y * 0x7FF0;
|
||||||
|
analog_state[c + 1][RETRO_DEVICE_INDEX_ANALOG_RIGHT] [RETRO_DEVICE_ID_ANALOG_X] = kpad.classic.rstick_x * 0x7FF0;
|
||||||
|
analog_state[c + 1][RETRO_DEVICE_INDEX_ANALOG_RIGHT] [RETRO_DEVICE_ID_ANALOG_Y] = -kpad.classic.rstick_y * 0x7FF0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static bool wiiu_joypad_init(void* data)
|
static bool wiiu_joypad_init(void* data)
|
||||||
{
|
{
|
||||||
wiiu_joypad_autodetect_add(0);
|
wiiu_joypad_autodetect_add(0);
|
||||||
@ -174,7 +304,7 @@ static bool wiiu_joypad_init(void *data)
|
|||||||
|
|
||||||
static bool wiiu_joypad_query_pad(unsigned pad)
|
static bool wiiu_joypad_query_pad(unsigned pad)
|
||||||
{
|
{
|
||||||
return pad < MAX_USERS && wiiu_pad_inited;
|
return pad < MAX_PADS && wiiu_pad_inited;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void wiiu_joypad_destroy(void)
|
static void wiiu_joypad_destroy(void)
|
||||||
@ -182,7 +312,8 @@ static void wiiu_joypad_destroy(void)
|
|||||||
wiiu_pad_inited = false;
|
wiiu_pad_inited = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
input_device_driver_t wiiu_joypad = {
|
input_device_driver_t wiiu_joypad =
|
||||||
|
{
|
||||||
wiiu_joypad_init,
|
wiiu_joypad_init,
|
||||||
wiiu_joypad_query_pad,
|
wiiu_joypad_query_pad,
|
||||||
wiiu_joypad_destroy,
|
wiiu_joypad_destroy,
|
||||||
|
@ -193,7 +193,9 @@ DECL_AXIS(r_x_minus, -2) \
|
|||||||
DECL_AXIS(r_y_plus, -3) \
|
DECL_AXIS(r_y_plus, -3) \
|
||||||
DECL_AXIS(r_y_minus, +3)
|
DECL_AXIS(r_y_minus, +3)
|
||||||
|
|
||||||
#define WIIUINPUT_DEFAULT_BINDS \
|
#ifdef WIIU
|
||||||
|
|
||||||
|
#define WIIUINPUT_GAMEPAD_DEFAULT_BINDS \
|
||||||
DECL_BTN(a, 8) \
|
DECL_BTN(a, 8) \
|
||||||
DECL_BTN(b, 0) \
|
DECL_BTN(b, 0) \
|
||||||
DECL_BTN(x, 9) \
|
DECL_BTN(x, 9) \
|
||||||
@ -217,6 +219,103 @@ DECL_AXIS(r_x_minus, -2) \
|
|||||||
DECL_AXIS(r_y_plus, -3) \
|
DECL_AXIS(r_y_plus, -3) \
|
||||||
DECL_AXIS(r_y_minus, +3)
|
DECL_AXIS(r_y_minus, +3)
|
||||||
|
|
||||||
|
#define WIIUINPUT_PRO_CONTROLLER_DEFAULT_BINDS \
|
||||||
|
DECL_BTN(a, 8) \
|
||||||
|
DECL_BTN(b, 0) \
|
||||||
|
DECL_BTN(x, 9) \
|
||||||
|
DECL_BTN(y, 1) \
|
||||||
|
DECL_BTN(start, 3) \
|
||||||
|
DECL_BTN(select, 2) \
|
||||||
|
DECL_BTN(up, 4) \
|
||||||
|
DECL_BTN(down, 5) \
|
||||||
|
DECL_BTN(left, 6) \
|
||||||
|
DECL_BTN(right, 7) \
|
||||||
|
DECL_BTN(l, 10) \
|
||||||
|
DECL_BTN(r, 11) \
|
||||||
|
DECL_BTN(l2, 12) \
|
||||||
|
DECL_BTN(r2, 13) \
|
||||||
|
DECL_AXIS(l_x_plus, +0) \
|
||||||
|
DECL_AXIS(l_x_minus, -0) \
|
||||||
|
DECL_AXIS(l_y_plus, +1) \
|
||||||
|
DECL_AXIS(l_y_minus, -1) \
|
||||||
|
DECL_AXIS(r_x_plus, +2) \
|
||||||
|
DECL_AXIS(r_x_minus, -2) \
|
||||||
|
DECL_AXIS(r_y_plus, -3) \
|
||||||
|
DECL_AXIS(r_y_minus, +3)
|
||||||
|
|
||||||
|
#define WIIUINPUT_CLASSIC_CONTROLLER_DEFAULT_BINDS \
|
||||||
|
DECL_BTN(a, 8) \
|
||||||
|
DECL_BTN(b, 0) \
|
||||||
|
DECL_BTN(x, 9) \
|
||||||
|
DECL_BTN(y, 1) \
|
||||||
|
DECL_BTN(start, 3) \
|
||||||
|
DECL_BTN(select, 2) \
|
||||||
|
DECL_BTN(up, 4) \
|
||||||
|
DECL_BTN(down, 5) \
|
||||||
|
DECL_BTN(left, 6) \
|
||||||
|
DECL_BTN(right, 7) \
|
||||||
|
DECL_BTN(l, 10) \
|
||||||
|
DECL_BTN(r, 11) \
|
||||||
|
DECL_BTN(l2, 12) \
|
||||||
|
DECL_BTN(r2, 13) \
|
||||||
|
DECL_AXIS(l_x_plus, +0) \
|
||||||
|
DECL_AXIS(l_x_minus, -0) \
|
||||||
|
DECL_AXIS(l_y_plus, +1) \
|
||||||
|
DECL_AXIS(l_y_minus, -1) \
|
||||||
|
DECL_AXIS(r_x_plus, +2) \
|
||||||
|
DECL_AXIS(r_x_minus, -2) \
|
||||||
|
DECL_AXIS(r_y_plus, -3) \
|
||||||
|
DECL_AXIS(r_y_minus, +3)
|
||||||
|
|
||||||
|
#define WIIUINPUT_WIIMOTE_DEFAULT_BINDS \
|
||||||
|
DECL_BTN(a, 8) \
|
||||||
|
DECL_BTN(b, 0) \
|
||||||
|
DECL_BTN(x, 9) \
|
||||||
|
DECL_BTN(y, 1) \
|
||||||
|
DECL_BTN(start, 3) \
|
||||||
|
DECL_BTN(select, 2) \
|
||||||
|
DECL_BTN(up, 4) \
|
||||||
|
DECL_BTN(down, 5) \
|
||||||
|
DECL_BTN(left, 6) \
|
||||||
|
DECL_BTN(right, 7) \
|
||||||
|
DECL_BTN(l, 10) \
|
||||||
|
DECL_BTN(r, 11) \
|
||||||
|
DECL_BTN(l2, 12) \
|
||||||
|
DECL_BTN(r2, 13) \
|
||||||
|
DECL_AXIS(l_x_plus, +0) \
|
||||||
|
DECL_AXIS(l_x_minus, -0) \
|
||||||
|
DECL_AXIS(l_y_plus, +1) \
|
||||||
|
DECL_AXIS(l_y_minus, -1) \
|
||||||
|
DECL_AXIS(r_x_plus, +2) \
|
||||||
|
DECL_AXIS(r_x_minus, -2) \
|
||||||
|
DECL_AXIS(r_y_plus, -3) \
|
||||||
|
DECL_AXIS(r_y_minus, +3)
|
||||||
|
|
||||||
|
#define WIIUINPUT_NUNCHUK_DEFAULT_BINDS \
|
||||||
|
DECL_BTN(a, 8) \
|
||||||
|
DECL_BTN(b, 0) \
|
||||||
|
DECL_BTN(x, 9) \
|
||||||
|
DECL_BTN(y, 1) \
|
||||||
|
DECL_BTN(start, 3) \
|
||||||
|
DECL_BTN(select, 2) \
|
||||||
|
DECL_BTN(up, 4) \
|
||||||
|
DECL_BTN(down, 5) \
|
||||||
|
DECL_BTN(left, 6) \
|
||||||
|
DECL_BTN(right, 7) \
|
||||||
|
DECL_BTN(l, 10) \
|
||||||
|
DECL_BTN(r, 11) \
|
||||||
|
DECL_BTN(l2, 12) \
|
||||||
|
DECL_BTN(r2, 13) \
|
||||||
|
DECL_AXIS(l_x_plus, +0) \
|
||||||
|
DECL_AXIS(l_x_minus, -0) \
|
||||||
|
DECL_AXIS(l_y_plus, +1) \
|
||||||
|
DECL_AXIS(l_y_minus, -1) \
|
||||||
|
DECL_AXIS(r_x_plus, +2) \
|
||||||
|
DECL_AXIS(r_x_minus, -2) \
|
||||||
|
DECL_AXIS(r_y_plus, -3) \
|
||||||
|
DECL_AXIS(r_y_minus, +3)
|
||||||
|
#endif
|
||||||
|
|
||||||
#define GXINPUT_GAMECUBE_DEFAULT_BINDS \
|
#define GXINPUT_GAMECUBE_DEFAULT_BINDS \
|
||||||
DECL_BTN(a, 0) \
|
DECL_BTN(a, 0) \
|
||||||
DECL_BTN(b, 1) \
|
DECL_BTN(b, 1) \
|
||||||
@ -417,7 +516,11 @@ const char* const input_builtin_autoconfs[] =
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#ifdef WIIU
|
#ifdef WIIU
|
||||||
DECL_AUTOCONF_DEVICE("WIIU Controller", "wiiu", WIIUINPUT_DEFAULT_BINDS),
|
DECL_AUTOCONF_DEVICE("WIIU Gamepad", "wiiu", WIIUINPUT_GAMEPAD_DEFAULT_BINDS),
|
||||||
|
DECL_AUTOCONF_DEVICE("WIIU Pro Controller", "wiiu", WIIUINPUT_PRO_CONTROLLER_DEFAULT_BINDS),
|
||||||
|
DECL_AUTOCONF_DEVICE("Wiimote Controller", "wiiu", WIIUINPUT_WIIMOTE_DEFAULT_BINDS),
|
||||||
|
DECL_AUTOCONF_DEVICE("Nunchuk Controller", "wiiu", WIIUINPUT_NUNCHUK_DEFAULT_BINDS),
|
||||||
|
DECL_AUTOCONF_DEVICE("Classic Controller", "wiiu", WIIUINPUT_CLASSIC_CONTROLLER_DEFAULT_BINDS),
|
||||||
#endif
|
#endif
|
||||||
#ifdef __CELLOS_LV2__
|
#ifdef __CELLOS_LV2__
|
||||||
DECL_AUTOCONF_DEVICE("SixAxis Controller", "ps3", PS3INPUT_DEFAULT_BINDS),
|
DECL_AUTOCONF_DEVICE("SixAxis Controller", "ps3", PS3INPUT_DEFAULT_BINDS),
|
||||||
|
126
wiiu/padscore.h
Normal file
126
wiiu/padscore.h
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
* Copyright (C) 2015
|
||||||
|
* by Dimok
|
||||||
|
*
|
||||||
|
* This software is provided 'as-is', without any express or implied
|
||||||
|
* warranty. In no event will the authors be held liable for any
|
||||||
|
* damages arising from the use of this software.
|
||||||
|
*
|
||||||
|
* Permission is granted to anyone to use this software for any
|
||||||
|
* purpose, including commercial applications, and to alter it and
|
||||||
|
* redistribute it freely, subject to the following restrictions:
|
||||||
|
*
|
||||||
|
* 1. The origin of this software must not be misrepresented; you
|
||||||
|
* must not claim that you wrote the original software. If you use
|
||||||
|
* this software in a product, an acknowledgment in the product
|
||||||
|
* documentation would be appreciated but is not required.
|
||||||
|
*
|
||||||
|
* 2. Altered source versions must be plainly marked as such, and
|
||||||
|
* must not be misrepresented as being the original software.
|
||||||
|
*
|
||||||
|
* 3. This notice may not be removed or altered from any source
|
||||||
|
* distribution.
|
||||||
|
***************************************************************************/
|
||||||
|
#ifndef __PAD_SCORE_FUNCTIONS_H_
|
||||||
|
#define __PAD_SCORE_FUNCTIONS_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <wut_types.h>
|
||||||
|
|
||||||
|
#define WPAD_BUTTON_LEFT 0x0001
|
||||||
|
#define WPAD_BUTTON_RIGHT 0x0002
|
||||||
|
#define WPAD_BUTTON_DOWN 0x0004
|
||||||
|
#define WPAD_BUTTON_UP 0x0008
|
||||||
|
#define WPAD_BUTTON_PLUS 0x0010
|
||||||
|
#define WPAD_BUTTON_2 0x0100
|
||||||
|
#define WPAD_BUTTON_1 0x0200
|
||||||
|
#define WPAD_BUTTON_B 0x0400
|
||||||
|
#define WPAD_BUTTON_A 0x0800
|
||||||
|
#define WPAD_BUTTON_MINUS 0x1000
|
||||||
|
#define WPAD_BUTTON_Z 0x2000
|
||||||
|
#define WPAD_BUTTON_C 0x4000
|
||||||
|
#define WPAD_BUTTON_HOME 0x8000
|
||||||
|
|
||||||
|
#define WPAD_CLASSIC_BUTTON_UP 0x0001
|
||||||
|
#define WPAD_CLASSIC_BUTTON_LEFT 0x0002
|
||||||
|
#define WPAD_CLASSIC_BUTTON_ZR 0x0004
|
||||||
|
#define WPAD_CLASSIC_BUTTON_X 0x0008
|
||||||
|
#define WPAD_CLASSIC_BUTTON_A 0x0010
|
||||||
|
#define WPAD_CLASSIC_BUTTON_Y 0x0020
|
||||||
|
#define WPAD_CLASSIC_BUTTON_B 0x0040
|
||||||
|
#define WPAD_CLASSIC_BUTTON_ZL 0x0080
|
||||||
|
#define WPAD_CLASSIC_BUTTON_R 0x0200
|
||||||
|
#define WPAD_CLASSIC_BUTTON_PLUS 0x0400
|
||||||
|
#define WPAD_CLASSIC_BUTTON_HOME 0x0800
|
||||||
|
#define WPAD_CLASSIC_BUTTON_MINUS 0x1000
|
||||||
|
#define WPAD_CLASSIC_BUTTON_L 0x2000
|
||||||
|
#define WPAD_CLASSIC_BUTTON_DOWN 0x4000
|
||||||
|
#define WPAD_CLASSIC_BUTTON_RIGHT 0x8000
|
||||||
|
|
||||||
|
#define WPAD_PRO_BUTTON_STICK_R 0x10000
|
||||||
|
#define WPAD_PRO_BUTTON_STICK_L 0x20000
|
||||||
|
|
||||||
|
void InitPadScoreFunctionPointers(void);
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct _KPADData
|
||||||
|
{
|
||||||
|
u32 btns_h;
|
||||||
|
u32 btns_d;
|
||||||
|
u32 btns_r;
|
||||||
|
u32 unused_1[5];
|
||||||
|
f32 pos_x;
|
||||||
|
f32 pos_y;
|
||||||
|
u32 unused_2[3];
|
||||||
|
f32 angle_x;
|
||||||
|
f32 angle_y;
|
||||||
|
u32 unused_3[8];
|
||||||
|
u8 device_type;
|
||||||
|
u8 wpad_error;
|
||||||
|
u8 pos_valid;
|
||||||
|
u8 unused_4[1];
|
||||||
|
|
||||||
|
union
|
||||||
|
{
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
f32 stick_x;
|
||||||
|
f32 stick_y;
|
||||||
|
} nunchuck;
|
||||||
|
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
u32 btns_h;
|
||||||
|
u32 btns_d;
|
||||||
|
u32 btns_r;
|
||||||
|
f32 lstick_x;
|
||||||
|
f32 lstick_y;
|
||||||
|
f32 rstick_x;
|
||||||
|
f32 rstick_y;
|
||||||
|
f32 ltrigger;
|
||||||
|
f32 rtrigger;
|
||||||
|
} classic;
|
||||||
|
|
||||||
|
u32 unused_6[20];
|
||||||
|
};
|
||||||
|
u32 unused_7[16];
|
||||||
|
} KPADData;
|
||||||
|
|
||||||
|
typedef void (* wpad_connect_callback_t)(s32 chan, s32 status);
|
||||||
|
|
||||||
|
void KPADInit (void);
|
||||||
|
s32 WPADProbe (s32 chan, u32 * pad_type);
|
||||||
|
s32 WPADSetDataFormat(s32 chan, s32 format);
|
||||||
|
void WPADEnableURCC(s32 enable);
|
||||||
|
void WPADEnableWiiRemote(s32 enable);
|
||||||
|
void WPADRead(s32 chan, void * data);
|
||||||
|
s32 KPADRead(s32 chan, void * data, u32 size);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // __PAD_SCORE_FUNCTIONS_H_
|
@ -178,3 +178,17 @@ IMPORT(VPADRead);
|
|||||||
IMPORT(VPADInit);
|
IMPORT(VPADInit);
|
||||||
|
|
||||||
IMPORT_END();
|
IMPORT_END();
|
||||||
|
|
||||||
|
/* padscore */
|
||||||
|
IMPORT_BEGIN(padscore);
|
||||||
|
|
||||||
|
IMPORT(KPADInit);
|
||||||
|
IMPORT(WPADProbe);
|
||||||
|
IMPORT(WPADSetDataFormat);
|
||||||
|
IMPORT(WPADEnableURCC);
|
||||||
|
IMPORT(WPADEnableWiiRemote);
|
||||||
|
IMPORT(WPADRead);
|
||||||
|
IMPORT(KPADRead);
|
||||||
|
|
||||||
|
IMPORT_END();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user