Support classic controller.
This commit is contained in:
parent
33b76628aa
commit
da39f8d3d6
|
@ -20,7 +20,7 @@ MACHDEP := -DGEKKO -mrvl -mcpu=750 -meabi -mhard-float
|
||||||
CFLAGS += -Wall -std=gnu99 $(MACHDEP) $(INCLUDE)
|
CFLAGS += -Wall -std=gnu99 $(MACHDEP) $(INCLUDE)
|
||||||
CXXFLAGS += -Wall -std=gnu99 $(MACHDEP) $(INCLUDE)
|
CXXFLAGS += -Wall -std=gnu99 $(MACHDEP) $(INCLUDE)
|
||||||
LDFLAGS := $(MACHDEP)
|
LDFLAGS := $(MACHDEP)
|
||||||
LIBS := -lfat -logc -lsnes
|
LIBS := -lfat -lsnes -lwiiuse -logc -lbte
|
||||||
|
|
||||||
OBJ = wii/main.o fifo_buffer.o ssnes.o driver.o file.o settings.o message.o rewind.o movie.o ups.o bps.o strl.o screenshot.o audio/hermite.o dynamic.o audio/utils.o conf/config_file.o wii/audio.o wii/input.o wii/video.o
|
OBJ = wii/main.o fifo_buffer.o ssnes.o driver.o file.o settings.o message.o rewind.o movie.o ups.o bps.o strl.o screenshot.o audio/hermite.o dynamic.o audio/utils.o conf/config_file.o wii/audio.o wii/input.o wii/video.o
|
||||||
|
|
||||||
|
|
44
wii/input.c
44
wii/input.c
|
@ -18,6 +18,8 @@
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <gccore.h>
|
#include <gccore.h>
|
||||||
#include <ogc/pad.h>
|
#include <ogc/pad.h>
|
||||||
|
#include <wiiuse/wpad.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include "../driver.h"
|
#include "../driver.h"
|
||||||
#include "../libsnes.hpp"
|
#include "../libsnes.hpp"
|
||||||
|
@ -25,6 +27,7 @@
|
||||||
|
|
||||||
// Just plain pads for now.
|
// Just plain pads for now.
|
||||||
static bool pad_state[5][SSNES_FIRST_META_KEY];
|
static bool pad_state[5][SSNES_FIRST_META_KEY];
|
||||||
|
static bool wpad_state[5][SSNES_FIRST_META_KEY];
|
||||||
static bool g_quit;
|
static bool g_quit;
|
||||||
|
|
||||||
static int16_t wii_input_state(void *data, const struct snes_keybind **binds,
|
static int16_t wii_input_state(void *data, const struct snes_keybind **binds,
|
||||||
|
@ -44,7 +47,7 @@ static int16_t wii_input_state(void *data, const struct snes_keybind **binds,
|
||||||
else if (port == SNES_PORT_2)
|
else if (port == SNES_PORT_2)
|
||||||
player = 1;
|
player = 1;
|
||||||
|
|
||||||
return pad_state[player][id];
|
return pad_state[player][id] || wpad_state[player][id];
|
||||||
}
|
}
|
||||||
|
|
||||||
static void wii_free_input(void *data)
|
static void wii_free_input(void *data)
|
||||||
|
@ -60,21 +63,25 @@ static void reset_callback(void)
|
||||||
static void *wii_input_init(void)
|
static void *wii_input_init(void)
|
||||||
{
|
{
|
||||||
PAD_Init();
|
PAD_Init();
|
||||||
|
WPAD_Init();
|
||||||
SYS_SetResetCallback(reset_callback);
|
SYS_SetResetCallback(reset_callback);
|
||||||
SYS_SetPowerCallback(reset_callback);
|
SYS_SetPowerCallback(reset_callback);
|
||||||
return (void*)-1;
|
return (void*)-1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define _B(btn) pad_state[i][SNES_DEVICE_ID_JOYPAD_##btn] = down & PAD_BUTTON_##btn
|
|
||||||
|
|
||||||
static void wii_input_poll(void *data)
|
static void wii_input_poll(void *data)
|
||||||
{
|
{
|
||||||
(void)data;
|
(void)data;
|
||||||
|
|
||||||
unsigned pads = PAD_ScanPads();
|
unsigned pads = PAD_ScanPads();
|
||||||
|
unsigned wpads = WPAD_ScanPads();
|
||||||
|
#define _B(btn) pad_state[i][SNES_DEVICE_ID_JOYPAD_##btn] = down & PAD_BUTTON_##btn
|
||||||
for (unsigned i = 0; i < pads; i++)
|
for (unsigned i = 0; i < pads; i++)
|
||||||
{
|
{
|
||||||
uint16_t down = PAD_ButtonsHeld(i);
|
uint16_t down = PAD_ButtonsHeld(i) | PAD_ButtonsDown(i);
|
||||||
|
down &= ~PAD_ButtonsUp(i);
|
||||||
|
|
||||||
_B(B);
|
_B(B);
|
||||||
_B(Y);
|
_B(Y);
|
||||||
pad_state[i][SNES_DEVICE_ID_JOYPAD_SELECT] = down & PAD_TRIGGER_Z;
|
pad_state[i][SNES_DEVICE_ID_JOYPAD_SELECT] = down & PAD_TRIGGER_Z;
|
||||||
|
@ -88,10 +95,31 @@ static void wii_input_poll(void *data)
|
||||||
pad_state[i][SNES_DEVICE_ID_JOYPAD_L] = down & PAD_TRIGGER_L;
|
pad_state[i][SNES_DEVICE_ID_JOYPAD_L] = down & PAD_TRIGGER_L;
|
||||||
pad_state[i][SNES_DEVICE_ID_JOYPAD_R] = down & PAD_TRIGGER_R;
|
pad_state[i][SNES_DEVICE_ID_JOYPAD_R] = down & PAD_TRIGGER_R;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
#undef _B
|
#undef _B
|
||||||
|
|
||||||
|
#define _B(btn) \
|
||||||
|
wpad_state[i][SNES_DEVICE_ID_JOYPAD_##btn] = down & WPAD_CLASSIC_BUTTON_##btn;
|
||||||
|
|
||||||
|
for (unsigned i = 0; i < wpads; i++)
|
||||||
|
{
|
||||||
|
uint32_t down = WPAD_ButtonsHeld(i) | WPAD_ButtonsDown(i);
|
||||||
|
down &= ~WPAD_ButtonsUp(i);
|
||||||
|
|
||||||
|
_B(B);
|
||||||
|
_B(Y);
|
||||||
|
wpad_state[i][SNES_DEVICE_ID_JOYPAD_SELECT] = down & WPAD_CLASSIC_BUTTON_MINUS;
|
||||||
|
wpad_state[i][SNES_DEVICE_ID_JOYPAD_START] = down & WPAD_CLASSIC_BUTTON_PLUS;
|
||||||
|
_B(UP);
|
||||||
|
_B(DOWN);
|
||||||
|
_B(LEFT);
|
||||||
|
_B(RIGHT);
|
||||||
|
_B(A);
|
||||||
|
_B(X);
|
||||||
|
wpad_state[i][SNES_DEVICE_ID_JOYPAD_L] = down & WPAD_CLASSIC_BUTTON_FULL_L;
|
||||||
|
wpad_state[i][SNES_DEVICE_ID_JOYPAD_R] = down & WPAD_CLASSIC_BUTTON_FULL_R;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static bool wii_key_pressed(void *data, int key)
|
static bool wii_key_pressed(void *data, int key)
|
||||||
{
|
{
|
||||||
(void)data;
|
(void)data;
|
||||||
|
@ -102,7 +130,11 @@ static bool wii_key_pressed(void *data, int key)
|
||||||
(pad_state[0][SNES_DEVICE_ID_JOYPAD_SELECT] &&
|
(pad_state[0][SNES_DEVICE_ID_JOYPAD_SELECT] &&
|
||||||
pad_state[0][SNES_DEVICE_ID_JOYPAD_START] &&
|
pad_state[0][SNES_DEVICE_ID_JOYPAD_START] &&
|
||||||
pad_state[0][SNES_DEVICE_ID_JOYPAD_L] &&
|
pad_state[0][SNES_DEVICE_ID_JOYPAD_L] &&
|
||||||
pad_state[0][SNES_DEVICE_ID_JOYPAD_R]);
|
pad_state[0][SNES_DEVICE_ID_JOYPAD_R]) ||
|
||||||
|
(wpad_state[0][SNES_DEVICE_ID_JOYPAD_SELECT] &&
|
||||||
|
wpad_state[0][SNES_DEVICE_ID_JOYPAD_START] &&
|
||||||
|
wpad_state[0][SNES_DEVICE_ID_JOYPAD_L] &&
|
||||||
|
wpad_state[0][SNES_DEVICE_ID_JOYPAD_R]);
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue