mirror of
https://github.com/libretro/RetroArch
synced 2025-03-17 10:21:26 +00:00
start of porting wii input driver to better support RGUI. still has issues with axises
This commit is contained in:
parent
9a15b3e66e
commit
d7cacaa9ed
26
config.def.h
26
config.def.h
@ -689,18 +689,18 @@ static const struct retro_keybind retro_keybinds_1[] = {
|
||||
|
||||
#ifdef HW_RVL
|
||||
static const struct retro_keybind retro_keybinds_menu[] = {
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_B, NULL, 0, GX_GC_B | GX_CLASSIC_B | GX_WIIMOTE_B | GX_WIIMOTE_1, 0 },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_Y, NULL, 0, GX_GC_Y | GX_CLASSIC_Y, 0 },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_SELECT, NULL, 0, GX_GC_Z_TRIGGER | GX_CLASSIC_MINUS | GX_WIIMOTE_MINUS, 0 },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_START, NULL, 0, GX_GC_START | GX_CLASSIC_PLUS | GX_WIIMOTE_PLUS, 0 },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_UP, NULL, 0, GX_GC_UP | GX_CLASSIC_UP | GX_WIIMOTE_UP | GX_NUNCHUK_UP, 0 },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_DOWN, NULL, 0, GX_GC_DOWN | GX_CLASSIC_DOWN | GX_WIIMOTE_DOWN | GX_NUNCHUK_DOWN, 0 },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_LEFT, NULL, 0, GX_GC_LEFT | GX_CLASSIC_LEFT | GX_WIIMOTE_LEFT | GX_NUNCHUK_LEFT, 0 },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_RIGHT, NULL, 0, GX_GC_RIGHT | GX_CLASSIC_RIGHT | GX_WIIMOTE_RIGHT | GX_NUNCHUK_RIGHT, 0 },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_A, NULL, 0, GX_GC_A | GX_CLASSIC_A | GX_WIIMOTE_A | GX_WIIMOTE_2, 0 },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_X, NULL, 0, GX_GC_X | GX_CLASSIC_X, 0 },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_L, NULL, 0, GX_GC_L_TRIGGER | GX_CLASSIC_L_TRIGGER, 0 },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_R, NULL, 0, GX_GC_R_TRIGGER | GX_CLASSIC_R_TRIGGER, 0 },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_B, NULL, 0, GX_MENU_B, 0 },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_Y, NULL, 0, GX_MENU_Y, 0 },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_SELECT, NULL, 0, GX_MENU_SELECT, 0 },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_START, NULL, 0, GX_MENU_START, 0 },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_UP, NULL, 0, GX_MENU_UP, 0 },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_DOWN, NULL, 0, GX_MENU_DOWN, 0 },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_LEFT, NULL, 0, GX_MENU_LEFT, 0 },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_RIGHT, NULL, 0, GX_MENU_RIGHT, 0 },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_A, NULL, 0, GX_MENU_A, 0 },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_X, NULL, 0, GX_MENU_X, 0 },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_L, NULL, 0, GX_MENU_L, 0 },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_R, NULL, 0, GX_MENU_R, 0 },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_L2, NULL, 0, GX_CLASSIC_ZL_TRIGGER, 0 },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_R2, NULL, 0, GX_CLASSIC_ZR_TRIGGER, 0 },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_L3, RETRO_LBL_JOYPAD_L3, RETROK_UNKNOWN, RETRO_DEF_JOYPAD_L3, 0, AXIS_NONE },
|
||||
@ -745,7 +745,7 @@ static const struct retro_keybind retro_keybinds_menu[] = {
|
||||
{ true, RARCH_DISK_EJECT_TOGGLE, RETRO_LBL_DISK_EJECT_TOGGLE, RETROK_UNKNOWN, NO_BTN, 0, AXIS_NONE },
|
||||
{ true, RARCH_DISK_NEXT, RETRO_LBL_DISK_NEXT, RETROK_UNKNOWN, NO_BTN, 0, AXIS_NONE },
|
||||
{ true, RARCH_GRAB_MOUSE_TOGGLE, RETRO_LBL_GRAB_MOUSE_TOGGLE, RETROK_F11, NO_BTN, 0, AXIS_NONE },
|
||||
{ true, RARCH_MENU_TOGGLE, NULL, 0, GX_WIIMOTE_HOME | GX_CLASSIC_HOME, 0 },
|
||||
{ true, RARCH_MENU_TOGGLE, NULL, 0, GX_WIIMOTE_HOME, 0 },
|
||||
};
|
||||
#endif
|
||||
|
||||
|
@ -723,6 +723,9 @@ int menu_set_settings(void *data, unsigned setting, unsigned action)
|
||||
g_settings.input.device[port]++;
|
||||
|
||||
// DEVICE_LAST can be 0, avoid modulo.
|
||||
if (g_settings.input.device[port] >= DEVICE_LAST)
|
||||
g_settings.input.device[port] -= DEVICE_LAST;
|
||||
// needs to be checked twice, in case we go right past the end of the list
|
||||
if (g_settings.input.device[port] >= DEVICE_LAST)
|
||||
g_settings.input.device[port] -= DEVICE_LAST;
|
||||
|
||||
@ -856,7 +859,7 @@ int menu_set_settings(void *data, unsigned setting, unsigned action)
|
||||
case RGUI_SETTINGS_BIND_ANALOG_RIGHT_Y_PLUS:
|
||||
case RGUI_SETTINGS_BIND_ANALOG_RIGHT_Y_MINUS:
|
||||
case RGUI_SETTINGS_BIND_MENU_TOGGLE:
|
||||
if (driver.input->set_keybinds)
|
||||
if (driver.input->set_keybinds && !driver.input->get_joypad_driver)
|
||||
{
|
||||
unsigned keybind_action = KEYBINDS_ACTION_NONE;
|
||||
|
||||
@ -1871,24 +1874,8 @@ void menu_set_settings_label(char *type_str, size_t type_str_size, unsigned *w,
|
||||
case RGUI_SETTINGS_BIND_ANALOG_RIGHT_Y_PLUS:
|
||||
case RGUI_SETTINGS_BIND_ANALOG_RIGHT_Y_MINUS:
|
||||
case RGUI_SETTINGS_BIND_MENU_TOGGLE:
|
||||
{
|
||||
unsigned id = type - RGUI_SETTINGS_BIND_B;
|
||||
struct platform_bind key_label;
|
||||
strlcpy(key_label.desc, "Unknown", sizeof(key_label.desc));
|
||||
key_label.joykey = g_settings.input.binds[rgui->current_pad][id].joykey;
|
||||
|
||||
if (driver.input->set_keybinds)
|
||||
{
|
||||
driver.input->set_keybinds(&key_label, 0, 0, 0, (1ULL << KEYBINDS_ACTION_GET_BIND_LABEL));
|
||||
strlcpy(type_str, key_label.desc, type_str_size);
|
||||
}
|
||||
else
|
||||
{
|
||||
const struct retro_keybind *bind = &g_settings.input.binds[rgui->current_pad][type - RGUI_SETTINGS_BIND_BEGIN];
|
||||
input_get_bind_string(type_str, bind, type_str_size);
|
||||
}
|
||||
break;
|
||||
}
|
||||
input_get_bind_string(type_str, &g_settings.input.binds[rgui->current_pad][type - RGUI_SETTINGS_BIND_BEGIN], type_str_size);
|
||||
break;
|
||||
case RGUI_SETTINGS_AUDIO_VOLUME_LEVEL:
|
||||
#ifdef RARCH_CONSOLE
|
||||
strlcpy(type_str, (g_extern.console.sound.volume_level) ? "Loud" : "Normal", type_str_size);
|
||||
|
225
gx/gx_input.c
225
gx/gx_input.c
@ -103,6 +103,35 @@ static bool g_menu;
|
||||
static bool g_quit;
|
||||
#endif
|
||||
|
||||
static bool gx_menu_input_state(uint64_t joykey, uint64_t state)
|
||||
{
|
||||
switch (joykey)
|
||||
{
|
||||
case GX_MENU_A:
|
||||
return state & ((1ULL << GX_GC_A) | (1ULL << GX_WIIMOTE_A) | (1ULL << GX_CLASSIC_A) | (1ULL << GX_WIIMOTE_2));
|
||||
case GX_MENU_B:
|
||||
return state & ((1ULL << GX_GC_B) | (1ULL << GX_WIIMOTE_B) | (1ULL << GX_CLASSIC_B) | (1ULL << GX_WIIMOTE_1));
|
||||
case GX_MENU_X:
|
||||
return state & ((1ULL << GX_GC_X) | (1ULL << GX_CLASSIC_X));
|
||||
case GX_MENU_Y:
|
||||
return state & ((1ULL << GX_GC_Y) | (1ULL << GX_CLASSIC_Y));
|
||||
case GX_MENU_UP:
|
||||
return state & ((1ULL << GX_GC_UP) | (1ULL << GX_WIIMOTE_UP) | (1ULL << GX_CLASSIC_UP) | (1ULL << GX_NUNCHUK_UP));
|
||||
case GX_MENU_DOWN:
|
||||
return state & ((1ULL << GX_GC_DOWN) | (1ULL << GX_WIIMOTE_DOWN) | (1ULL << GX_CLASSIC_DOWN) | (1ULL << GX_NUNCHUK_DOWN));
|
||||
case GX_MENU_LEFT:
|
||||
return state & ((1ULL << GX_GC_LEFT) | (1ULL << GX_WIIMOTE_LEFT) | (1ULL << GX_CLASSIC_LEFT) | (1ULL << GX_NUNCHUK_LEFT));
|
||||
case GX_MENU_RIGHT:
|
||||
return state & ((1ULL << GX_GC_RIGHT) | (1ULL << GX_WIIMOTE_RIGHT) | (1ULL << GX_CLASSIC_RIGHT) | (1ULL << GX_NUNCHUK_RIGHT));
|
||||
case GX_MENU_L:
|
||||
return state & ((1ULL << GX_GC_L_TRIGGER) | (1ULL << GX_CLASSIC_L_TRIGGER));
|
||||
case GX_MENU_R:
|
||||
return state & ((1ULL << GX_GC_R_TRIGGER) | (1ULL << GX_CLASSIC_R_TRIGGER));
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
static int16_t gx_input_state(void *data, const struct retro_keybind **binds,
|
||||
unsigned port, unsigned device,
|
||||
unsigned index, unsigned id)
|
||||
@ -115,7 +144,10 @@ static int16_t gx_input_state(void *data, const struct retro_keybind **binds,
|
||||
switch (device)
|
||||
{
|
||||
case RETRO_DEVICE_JOYPAD:
|
||||
return (binds[port][id].joykey & gx->pad_state[port]) ? 1 : 0;
|
||||
if (binds[port][id].joykey >= GX_MENU_FIRST && binds[port][id].joykey <= GX_MENU_LAST)
|
||||
return gx_menu_input_state(binds[port][id].joykey, gx->pad_state[port]) ? 1 : 0;
|
||||
else
|
||||
return (1ULL << (binds[port][id].joykey) & gx->pad_state[port]) ? 1 : 0;
|
||||
case RETRO_DEVICE_ANALOG:
|
||||
return gx->analog_state[port][index][id];
|
||||
default:
|
||||
@ -315,18 +347,18 @@ static void gx_input_poll(void *data)
|
||||
{
|
||||
down = PAD_ButtonsHeld(port);
|
||||
|
||||
*state_cur |= (down & PAD_BUTTON_A) ? GX_GC_A : 0;
|
||||
*state_cur |= (down & PAD_BUTTON_B) ? GX_GC_B : 0;
|
||||
*state_cur |= (down & PAD_BUTTON_X) ? GX_GC_X : 0;
|
||||
*state_cur |= (down & PAD_BUTTON_Y) ? GX_GC_Y : 0;
|
||||
*state_cur |= (down & PAD_BUTTON_UP) ? GX_GC_UP : 0;
|
||||
*state_cur |= (down & PAD_BUTTON_DOWN) ? GX_GC_DOWN : 0;
|
||||
*state_cur |= (down & PAD_BUTTON_LEFT) ? GX_GC_LEFT : 0;
|
||||
*state_cur |= (down & PAD_BUTTON_RIGHT) ? GX_GC_RIGHT : 0;
|
||||
*state_cur |= (down & PAD_BUTTON_START) ? GX_GC_START : 0;
|
||||
*state_cur |= (down & PAD_TRIGGER_Z) ? GX_GC_Z_TRIGGER : 0;
|
||||
*state_cur |= ((down & PAD_TRIGGER_L) || PAD_TriggerL(port) > 127) ? GX_GC_L_TRIGGER : 0;
|
||||
*state_cur |= ((down & PAD_TRIGGER_R) || PAD_TriggerR(port) > 127) ? GX_GC_R_TRIGGER : 0;
|
||||
*state_cur |= (down & PAD_BUTTON_A) ? (1ULL << GX_GC_A) : 0;
|
||||
*state_cur |= (down & PAD_BUTTON_B) ? (1ULL << GX_GC_B) : 0;
|
||||
*state_cur |= (down & PAD_BUTTON_X) ? (1ULL << GX_GC_X) : 0;
|
||||
*state_cur |= (down & PAD_BUTTON_Y) ? (1ULL << GX_GC_Y) : 0;
|
||||
*state_cur |= (down & PAD_BUTTON_UP) ? (1ULL << GX_GC_UP) : 0;
|
||||
*state_cur |= (down & PAD_BUTTON_DOWN) ? (1ULL << GX_GC_DOWN) : 0;
|
||||
*state_cur |= (down & PAD_BUTTON_LEFT) ? (1ULL << GX_GC_LEFT) : 0;
|
||||
*state_cur |= (down & PAD_BUTTON_RIGHT) ? (1ULL << GX_GC_RIGHT) : 0;
|
||||
*state_cur |= (down & PAD_BUTTON_START) ? (1ULL << GX_GC_START) : 0;
|
||||
*state_cur |= (down & PAD_TRIGGER_Z) ? (1ULL << GX_GC_Z_TRIGGER) : 0;
|
||||
*state_cur |= ((down & PAD_TRIGGER_L) || PAD_TriggerL(port) > 127) ? (1ULL << GX_GC_L_TRIGGER) : 0;
|
||||
*state_cur |= ((down & PAD_TRIGGER_R) || PAD_TriggerR(port) > 127) ? (1ULL << GX_GC_R_TRIGGER) : 0;
|
||||
|
||||
int16_t ls_x = (int16_t)PAD_StickX(port) * 256;
|
||||
int16_t ls_y = (int16_t)PAD_StickY(port) * -256;
|
||||
@ -338,8 +370,9 @@ static void gx_input_poll(void *data)
|
||||
gx->analog_state[port][RETRO_DEVICE_INDEX_ANALOG_RIGHT][RETRO_DEVICE_ID_ANALOG_X] = rs_x;
|
||||
gx->analog_state[port][RETRO_DEVICE_INDEX_ANALOG_RIGHT][RETRO_DEVICE_ID_ANALOG_Y] = rs_y;
|
||||
|
||||
if ((*state_cur & (GX_GC_START | GX_GC_Z_TRIGGER | GX_GC_L_TRIGGER | GX_GC_R_TRIGGER)) == (GX_GC_START | GX_GC_Z_TRIGGER | GX_GC_L_TRIGGER | GX_GC_R_TRIGGER))
|
||||
*state_cur |= GX_WIIMOTE_HOME;
|
||||
const uint64_t menu_combo = (1ULL << GX_GC_START) | (1ULL << GX_GC_Z_TRIGGER) | (1ULL << GX_GC_L_TRIGGER) | (1ULL << GX_GC_R_TRIGGER);
|
||||
if ((*state_cur & menu_combo) == menu_combo)
|
||||
*state_cur |= (1ULL << GX_WIIMOTE_HOME);
|
||||
|
||||
if (g_settings.input.autodetect_enable)
|
||||
{
|
||||
@ -358,38 +391,38 @@ static void gx_input_poll(void *data)
|
||||
|
||||
down = wpaddata->btns_h;
|
||||
|
||||
*state_cur |= (down & WPAD_BUTTON_A) ? GX_WIIMOTE_A : 0;
|
||||
*state_cur |= (down & WPAD_BUTTON_B) ? GX_WIIMOTE_B : 0;
|
||||
*state_cur |= (down & WPAD_BUTTON_1) ? GX_WIIMOTE_1 : 0;
|
||||
*state_cur |= (down & WPAD_BUTTON_2) ? GX_WIIMOTE_2 : 0;
|
||||
*state_cur |= (down & WPAD_BUTTON_PLUS) ? GX_WIIMOTE_PLUS : 0;
|
||||
*state_cur |= (down & WPAD_BUTTON_MINUS) ? GX_WIIMOTE_MINUS : 0;
|
||||
*state_cur |= (down & WPAD_BUTTON_HOME) ? GX_WIIMOTE_HOME : 0;
|
||||
*state_cur |= (down & WPAD_BUTTON_A) ? (1ULL << GX_WIIMOTE_A) : 0;
|
||||
*state_cur |= (down & WPAD_BUTTON_B) ? (1ULL << GX_WIIMOTE_B) : 0;
|
||||
*state_cur |= (down & WPAD_BUTTON_1) ? (1ULL << GX_WIIMOTE_1) : 0;
|
||||
*state_cur |= (down & WPAD_BUTTON_2) ? (1ULL << GX_WIIMOTE_2) : 0;
|
||||
*state_cur |= (down & WPAD_BUTTON_PLUS) ? (1ULL << GX_WIIMOTE_PLUS) : 0;
|
||||
*state_cur |= (down & WPAD_BUTTON_MINUS) ? (1ULL << GX_WIIMOTE_MINUS) : 0;
|
||||
*state_cur |= (down & WPAD_BUTTON_HOME) ? (1ULL << GX_WIIMOTE_HOME) : 0;
|
||||
// rotated d-pad on Wiimote
|
||||
*state_cur |= (down & WPAD_BUTTON_UP) ? GX_WIIMOTE_LEFT : 0;
|
||||
*state_cur |= (down & WPAD_BUTTON_DOWN) ? GX_WIIMOTE_RIGHT : 0;
|
||||
*state_cur |= (down & WPAD_BUTTON_LEFT) ? GX_WIIMOTE_DOWN : 0;
|
||||
*state_cur |= (down & WPAD_BUTTON_RIGHT) ? GX_WIIMOTE_UP : 0;
|
||||
*state_cur |= (down & WPAD_BUTTON_UP) ? (1ULL << GX_WIIMOTE_LEFT) : 0;
|
||||
*state_cur |= (down & WPAD_BUTTON_DOWN) ? (1ULL << GX_WIIMOTE_RIGHT) : 0;
|
||||
*state_cur |= (down & WPAD_BUTTON_LEFT) ? (1ULL << GX_WIIMOTE_DOWN) : 0;
|
||||
*state_cur |= (down & WPAD_BUTTON_RIGHT) ? (1ULL << GX_WIIMOTE_UP) : 0;
|
||||
|
||||
expansion_t *exp = &wpaddata->exp;
|
||||
|
||||
if (ptype == WPAD_EXP_CLASSIC)
|
||||
{
|
||||
*state_cur |= (down & WPAD_CLASSIC_BUTTON_A) ? GX_CLASSIC_A : 0;
|
||||
*state_cur |= (down & WPAD_CLASSIC_BUTTON_B) ? GX_CLASSIC_B : 0;
|
||||
*state_cur |= (down & WPAD_CLASSIC_BUTTON_X) ? GX_CLASSIC_X : 0;
|
||||
*state_cur |= (down & WPAD_CLASSIC_BUTTON_Y) ? GX_CLASSIC_Y : 0;
|
||||
*state_cur |= (down & WPAD_CLASSIC_BUTTON_UP) ? GX_CLASSIC_UP : 0;
|
||||
*state_cur |= (down & WPAD_CLASSIC_BUTTON_DOWN) ? GX_CLASSIC_DOWN : 0;
|
||||
*state_cur |= (down & WPAD_CLASSIC_BUTTON_LEFT) ? GX_CLASSIC_LEFT : 0;
|
||||
*state_cur |= (down & WPAD_CLASSIC_BUTTON_RIGHT) ? GX_CLASSIC_RIGHT : 0;
|
||||
*state_cur |= (down & WPAD_CLASSIC_BUTTON_PLUS) ? GX_CLASSIC_PLUS : 0;
|
||||
*state_cur |= (down & WPAD_CLASSIC_BUTTON_MINUS) ? GX_CLASSIC_MINUS : 0;
|
||||
*state_cur |= (down & WPAD_CLASSIC_BUTTON_HOME) ? GX_CLASSIC_HOME : 0;
|
||||
*state_cur |= (down & WPAD_CLASSIC_BUTTON_FULL_L) ? GX_CLASSIC_L_TRIGGER : 0;
|
||||
*state_cur |= (down & WPAD_CLASSIC_BUTTON_FULL_R) ? GX_CLASSIC_R_TRIGGER : 0;
|
||||
*state_cur |= (down & WPAD_CLASSIC_BUTTON_ZL) ? GX_CLASSIC_ZL_TRIGGER : 0;
|
||||
*state_cur |= (down & WPAD_CLASSIC_BUTTON_ZR) ? GX_CLASSIC_ZR_TRIGGER : 0;
|
||||
*state_cur |= (down & WPAD_CLASSIC_BUTTON_A) ? (1ULL << GX_CLASSIC_A) : 0;
|
||||
*state_cur |= (down & WPAD_CLASSIC_BUTTON_B) ? (1ULL << GX_CLASSIC_B) : 0;
|
||||
*state_cur |= (down & WPAD_CLASSIC_BUTTON_X) ? (1ULL << GX_CLASSIC_X) : 0;
|
||||
*state_cur |= (down & WPAD_CLASSIC_BUTTON_Y) ? (1ULL << GX_CLASSIC_Y) : 0;
|
||||
*state_cur |= (down & WPAD_CLASSIC_BUTTON_UP) ? (1ULL << GX_CLASSIC_UP) : 0;
|
||||
*state_cur |= (down & WPAD_CLASSIC_BUTTON_DOWN) ? (1ULL << GX_CLASSIC_DOWN) : 0;
|
||||
*state_cur |= (down & WPAD_CLASSIC_BUTTON_LEFT) ? (1ULL << GX_CLASSIC_LEFT) : 0;
|
||||
*state_cur |= (down & WPAD_CLASSIC_BUTTON_RIGHT) ? (1ULL << GX_CLASSIC_RIGHT) : 0;
|
||||
*state_cur |= (down & WPAD_CLASSIC_BUTTON_PLUS) ? (1ULL << GX_CLASSIC_PLUS) : 0;
|
||||
*state_cur |= (down & WPAD_CLASSIC_BUTTON_MINUS) ? (1ULL << GX_CLASSIC_MINUS) : 0;
|
||||
*state_cur |= (down & WPAD_CLASSIC_BUTTON_HOME) ? (1ULL << GX_CLASSIC_HOME) : 0;
|
||||
*state_cur |= (down & WPAD_CLASSIC_BUTTON_FULL_L) ? (1ULL << GX_CLASSIC_L_TRIGGER) : 0;
|
||||
*state_cur |= (down & WPAD_CLASSIC_BUTTON_FULL_R) ? (1ULL << GX_CLASSIC_R_TRIGGER) : 0;
|
||||
*state_cur |= (down & WPAD_CLASSIC_BUTTON_ZL) ? (1ULL << GX_CLASSIC_ZL_TRIGGER) : 0;
|
||||
*state_cur |= (down & WPAD_CLASSIC_BUTTON_ZR) ? (1ULL << GX_CLASSIC_ZR_TRIGGER) : 0;
|
||||
|
||||
float ljs_mag = exp->classic.ljs.mag;
|
||||
float ljs_ang = exp->classic.ljs.ang;
|
||||
@ -433,13 +466,13 @@ static void gx_input_poll(void *data)
|
||||
else if (ptype == WPAD_EXP_NUNCHUK)
|
||||
{
|
||||
// wiimote is held upright with nunchuk, do not change d-pad orientation
|
||||
*state_cur |= (down & WPAD_BUTTON_UP) ? GX_WIIMOTE_UP : 0;
|
||||
*state_cur |= (down & WPAD_BUTTON_DOWN) ? GX_WIIMOTE_DOWN : 0;
|
||||
*state_cur |= (down & WPAD_BUTTON_LEFT) ? GX_WIIMOTE_LEFT : 0;
|
||||
*state_cur |= (down & WPAD_BUTTON_RIGHT) ? GX_WIIMOTE_RIGHT : 0;
|
||||
*state_cur |= (down & WPAD_BUTTON_UP) ? (1ULL << GX_WIIMOTE_UP) : 0;
|
||||
*state_cur |= (down & WPAD_BUTTON_DOWN) ? (1ULL << GX_WIIMOTE_DOWN) : 0;
|
||||
*state_cur |= (down & WPAD_BUTTON_LEFT) ? (1ULL << GX_WIIMOTE_LEFT) : 0;
|
||||
*state_cur |= (down & WPAD_BUTTON_RIGHT) ? (1ULL << GX_WIIMOTE_RIGHT) : 0;
|
||||
|
||||
*state_cur |= (down & WPAD_NUNCHUK_BUTTON_Z) ? GX_NUNCHUK_Z : 0;
|
||||
*state_cur |= (down & WPAD_NUNCHUK_BUTTON_C) ? GX_NUNCHUK_C : 0;
|
||||
*state_cur |= (down & WPAD_NUNCHUK_BUTTON_Z) ? (1ULL << GX_NUNCHUK_Z) : 0;
|
||||
*state_cur |= (down & WPAD_NUNCHUK_BUTTON_C) ? (1ULL << GX_NUNCHUK_C) : 0;
|
||||
|
||||
float js_mag = exp->nunchuk.js.mag;
|
||||
float js_ang = exp->nunchuk.js.ang;
|
||||
@ -484,13 +517,13 @@ static void gx_input_poll(void *data)
|
||||
|
||||
if (g_menu)
|
||||
{
|
||||
*state_p1 |= GX_WIIMOTE_HOME;
|
||||
*state_p1 |= (1ULL << GX_WIIMOTE_HOME);
|
||||
g_menu = false;
|
||||
}
|
||||
|
||||
if (*state_p1 & (GX_WIIMOTE_HOME
|
||||
if (*state_p1 & ((1ULL << GX_WIIMOTE_HOME)
|
||||
#ifdef HW_RVL
|
||||
| GX_CLASSIC_HOME
|
||||
| (1ULL << GX_CLASSIC_HOME)
|
||||
#endif
|
||||
))
|
||||
*lifecycle_state |= (1ULL << RARCH_MENU_TOGGLE);
|
||||
@ -511,6 +544,12 @@ static uint64_t gx_input_get_capabilities(void *data)
|
||||
return caps;
|
||||
}
|
||||
|
||||
extern const rarch_joypad_driver_t gx_joypad;
|
||||
|
||||
static const rarch_joypad_driver_t *gx_input_get_joypad_driver(void *data)
|
||||
{
|
||||
return &gx_joypad;
|
||||
}
|
||||
|
||||
const input_driver_t input_gx = {
|
||||
gx_input_init,
|
||||
@ -522,4 +561,90 @@ const input_driver_t input_gx = {
|
||||
NULL,
|
||||
gx_input_get_capabilities,
|
||||
"gx",
|
||||
|
||||
NULL,
|
||||
NULL,
|
||||
gx_input_get_joypad_driver,
|
||||
};
|
||||
|
||||
|
||||
static bool gx_joypad_init(void)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool gx_joypad_button(unsigned port_num, uint16_t joykey)
|
||||
{
|
||||
gx_input_t *gx = (gx_input_t*)driver.input_data;
|
||||
return gx->pad_state[port_num] & (1ULL << joykey);
|
||||
}
|
||||
|
||||
static int16_t gx_joypad_axis(unsigned port_num, uint32_t joyaxis)
|
||||
{
|
||||
gx_input_t *gx = (gx_input_t*)driver.input_data;
|
||||
if (joyaxis == AXIS_NONE)
|
||||
return 0;
|
||||
|
||||
int val = 0;
|
||||
|
||||
int axis = -1;
|
||||
bool is_neg = false;
|
||||
bool is_pos = false;
|
||||
|
||||
if (AXIS_NEG_GET(joyaxis) <= 5)
|
||||
{
|
||||
axis = AXIS_NEG_GET(joyaxis);
|
||||
is_neg = true;
|
||||
}
|
||||
else if (AXIS_POS_GET(joyaxis) <= 5)
|
||||
{
|
||||
axis = AXIS_POS_GET(joyaxis);
|
||||
is_pos = true;
|
||||
}
|
||||
|
||||
switch (axis)
|
||||
{
|
||||
case 0: val = gx->analog_state[port_num][0][0]; break;
|
||||
case 1: val = gx->analog_state[port_num][0][1]; break;
|
||||
case 2: val = gx->analog_state[port_num][1][0]; break;
|
||||
case 3: val = gx->analog_state[port_num][1][1]; break;
|
||||
}
|
||||
|
||||
if (is_neg && val > 0)
|
||||
val = 0;
|
||||
else if (is_pos && val < 0)
|
||||
val = 0;
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
static void gx_joypad_poll(void)
|
||||
{
|
||||
}
|
||||
|
||||
static bool gx_joypad_query_pad(unsigned pad)
|
||||
{
|
||||
gx_input_t *gx = (gx_input_t*)driver.input_data;
|
||||
return pad < MAX_PLAYERS && gx->pad_state[pad];
|
||||
}
|
||||
|
||||
static const char *gx_joypad_name(unsigned pad)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void gx_joypad_destroy(void)
|
||||
{
|
||||
}
|
||||
|
||||
const rarch_joypad_driver_t gx_joypad = {
|
||||
gx_joypad_init,
|
||||
gx_joypad_query_pad,
|
||||
gx_joypad_destroy,
|
||||
gx_joypad_button,
|
||||
gx_joypad_axis,
|
||||
gx_joypad_poll,
|
||||
NULL,
|
||||
gx_joypad_name,
|
||||
"gx",
|
||||
};
|
||||
|
109
gx/gx_input.h
109
gx/gx_input.h
@ -20,54 +20,71 @@
|
||||
|
||||
enum
|
||||
{
|
||||
GX_GC_A = 1ULL << 0,
|
||||
GX_GC_B = 1ULL << 1,
|
||||
GX_GC_X = 1ULL << 2,
|
||||
GX_GC_Y = 1ULL << 3,
|
||||
GX_GC_START = 1ULL << 4,
|
||||
GX_GC_Z_TRIGGER = 1ULL << 5,
|
||||
GX_GC_L_TRIGGER = 1ULL << 6,
|
||||
GX_GC_R_TRIGGER = 1ULL << 7,
|
||||
GX_GC_UP = 1ULL << 8,
|
||||
GX_GC_DOWN = 1ULL << 9,
|
||||
GX_GC_LEFT = 1ULL << 10,
|
||||
GX_GC_RIGHT = 1ULL << 11,
|
||||
GX_GC_A = 0,
|
||||
GX_GC_B = 1,
|
||||
GX_GC_X = 2,
|
||||
GX_GC_Y = 3,
|
||||
GX_GC_START = 4,
|
||||
GX_GC_Z_TRIGGER = 5,
|
||||
GX_GC_L_TRIGGER = 6,
|
||||
GX_GC_R_TRIGGER = 7,
|
||||
GX_GC_UP = 8,
|
||||
GX_GC_DOWN = 9,
|
||||
GX_GC_LEFT = 10,
|
||||
GX_GC_RIGHT = 11,
|
||||
#ifdef HW_RVL
|
||||
GX_CLASSIC_A = 1ULL << 20,
|
||||
GX_CLASSIC_B = 1ULL << 21,
|
||||
GX_CLASSIC_X = 1ULL << 22,
|
||||
GX_CLASSIC_Y = 1ULL << 23,
|
||||
GX_CLASSIC_PLUS = 1ULL << 24,
|
||||
GX_CLASSIC_MINUS = 1ULL << 25,
|
||||
GX_CLASSIC_HOME = 1ULL << 26,
|
||||
GX_CLASSIC_L_TRIGGER = 1ULL << 27,
|
||||
GX_CLASSIC_R_TRIGGER = 1ULL << 28,
|
||||
GX_CLASSIC_ZL_TRIGGER = 1ULL << 29,
|
||||
GX_CLASSIC_ZR_TRIGGER = 1ULL << 30,
|
||||
GX_CLASSIC_UP = 1ULL << 31,
|
||||
GX_CLASSIC_DOWN = 1ULL << 32,
|
||||
GX_CLASSIC_LEFT = 1ULL << 33,
|
||||
GX_CLASSIC_RIGHT = 1ULL << 34,
|
||||
GX_WIIMOTE_A = 1ULL << 43,
|
||||
GX_WIIMOTE_B = 1ULL << 44,
|
||||
GX_WIIMOTE_1 = 1ULL << 45,
|
||||
GX_WIIMOTE_2 = 1ULL << 46,
|
||||
GX_WIIMOTE_PLUS = 1ULL << 47,
|
||||
GX_WIIMOTE_MINUS = 1ULL << 48,
|
||||
//GX_WIIMOTE_HOME = 1ULL << 49,
|
||||
GX_WIIMOTE_UP = 1ULL << 50,
|
||||
GX_WIIMOTE_DOWN = 1ULL << 51,
|
||||
GX_WIIMOTE_LEFT = 1ULL << 52,
|
||||
GX_WIIMOTE_RIGHT = 1ULL << 53,
|
||||
GX_NUNCHUK_Z = 1ULL << 54,
|
||||
GX_NUNCHUK_C = 1ULL << 55,
|
||||
GX_NUNCHUK_UP = 1ULL << 56,
|
||||
GX_NUNCHUK_DOWN = 1ULL << 57,
|
||||
GX_NUNCHUK_LEFT = 1ULL << 58,
|
||||
GX_NUNCHUK_RIGHT = 1ULL << 59,
|
||||
GX_CLASSIC_A = 20,
|
||||
GX_CLASSIC_B = 21,
|
||||
GX_CLASSIC_X = 22,
|
||||
GX_CLASSIC_Y = 23,
|
||||
GX_CLASSIC_PLUS = 24,
|
||||
GX_CLASSIC_MINUS = 25,
|
||||
GX_CLASSIC_HOME = 26,
|
||||
GX_CLASSIC_L_TRIGGER = 27,
|
||||
GX_CLASSIC_R_TRIGGER = 28,
|
||||
GX_CLASSIC_ZL_TRIGGER = 29,
|
||||
GX_CLASSIC_ZR_TRIGGER = 30,
|
||||
GX_CLASSIC_UP = 31,
|
||||
GX_CLASSIC_DOWN = 32,
|
||||
GX_CLASSIC_LEFT = 33,
|
||||
GX_CLASSIC_RIGHT = 34,
|
||||
GX_WIIMOTE_A = 43,
|
||||
GX_WIIMOTE_B = 44,
|
||||
GX_WIIMOTE_1 = 45,
|
||||
GX_WIIMOTE_2 = 46,
|
||||
GX_WIIMOTE_PLUS = 47,
|
||||
GX_WIIMOTE_MINUS = 48,
|
||||
//GX_WIIMOTE_HOME = 49,
|
||||
GX_WIIMOTE_UP = 50,
|
||||
GX_WIIMOTE_DOWN = 51,
|
||||
GX_WIIMOTE_LEFT = 52,
|
||||
GX_WIIMOTE_RIGHT = 53,
|
||||
GX_NUNCHUK_Z = 54,
|
||||
GX_NUNCHUK_C = 55,
|
||||
GX_NUNCHUK_UP = 56,
|
||||
GX_NUNCHUK_DOWN = 57,
|
||||
GX_NUNCHUK_LEFT = 58,
|
||||
GX_NUNCHUK_RIGHT = 59,
|
||||
#endif
|
||||
GX_WIIMOTE_HOME = 1ULL << 49, // needed on GameCube as "fake" menu button
|
||||
GX_QUIT_KEY = 1ULL << 60,
|
||||
GX_WIIMOTE_HOME = 49, // needed on GameCube as "fake" menu button
|
||||
GX_QUIT_KEY = 60,
|
||||
|
||||
// special binds for the menu
|
||||
GX_MENU_A = 61,
|
||||
GX_MENU_B = 62,
|
||||
GX_MENU_X = 63,
|
||||
GX_MENU_Y = 64,
|
||||
GX_MENU_START = 65,
|
||||
GX_MENU_SELECT = 66,
|
||||
GX_MENU_UP = 67,
|
||||
GX_MENU_DOWN = 68,
|
||||
GX_MENU_LEFT = 69,
|
||||
GX_MENU_RIGHT = 70,
|
||||
GX_MENU_L = 71,
|
||||
GX_MENU_R = 72,
|
||||
|
||||
GX_MENU_FIRST = GX_MENU_A,
|
||||
GX_MENU_LAST = GX_MENU_R
|
||||
};
|
||||
|
||||
enum gx_device_id
|
||||
|
@ -943,7 +943,15 @@ void input_get_bind_string(char *buf, const struct retro_keybind *bind, size_t s
|
||||
*buf = '\0';
|
||||
if (bind->joykey != NO_BTN)
|
||||
{
|
||||
if (GET_HAT_DIR(bind->joykey))
|
||||
if (driver.input->set_keybinds)
|
||||
{
|
||||
struct platform_bind key_label;
|
||||
strlcpy(key_label.desc, "Unknown", sizeof(key_label.desc));
|
||||
key_label.joykey = bind->joykey;
|
||||
driver.input->set_keybinds(&key_label, 0, 0, 0, (1ULL << KEYBINDS_ACTION_GET_BIND_LABEL));
|
||||
snprintf(buf, size, "%s (btn) ", key_label.desc);
|
||||
}
|
||||
else if (GET_HAT_DIR(bind->joykey))
|
||||
{
|
||||
const char *dir;
|
||||
switch (GET_HAT_DIR(bind->joykey))
|
||||
@ -976,6 +984,7 @@ void input_get_bind_string(char *buf, const struct retro_keybind *bind, size_t s
|
||||
snprintf(buf, size, "%c%u (axis) ", dir, axis);
|
||||
}
|
||||
|
||||
#ifndef RARCH_CONSOLE
|
||||
char key[64];
|
||||
input_translate_rk_to_str(bind->key, key, sizeof(key));
|
||||
if (!strcmp(key, "nul"))
|
||||
@ -984,6 +993,7 @@ void input_get_bind_string(char *buf, const struct retro_keybind *bind, size_t s
|
||||
char keybuf[64];
|
||||
snprintf(keybuf, sizeof(keybuf), "(Key: %s)", key);
|
||||
strlcat(buf, keybuf, size);
|
||||
#endif
|
||||
}
|
||||
|
||||
static enum retro_key find_sk_bind(const char *str)
|
||||
|
Loading…
x
Reference in New Issue
Block a user