(drivers_joypad) Cleanups

This commit is contained in:
twinaphex 2015-04-03 01:19:51 +02:00
parent 4205b3e8f3
commit 494a190c5b
8 changed files with 98 additions and 84 deletions

View File

@ -25,7 +25,7 @@ static const char *android_joypad_name(unsigned pad)
static bool android_joypad_init(void)
{
unsigned autoconf_pad;
settings_t *settings = config_get_ptr();
settings_t *settings = config_get_ptr();
autoconfig_params_t params = {{0}};
for (autoconf_pad = 0; autoconf_pad < MAX_USERS; autoconf_pad++)

View File

@ -15,9 +15,7 @@
*/
#include "../input_autodetect.h"
#include "../input_common.h"
#include "../../general.h"
#include "../../runloop.h"
#include <unistd.h>
#include <stdint.h>
#include <string.h>
@ -46,7 +44,7 @@ static int g_notify;
static int g_epoll;
static bool g_hotplug;
static void poll_pad(struct linuxraw_joypad *pad)
static void linuxraw_poll_pad(struct linuxraw_joypad *pad)
{
struct js_event event;
@ -122,7 +120,7 @@ static bool linuxraw_joypad_init_pad(const char *path, struct linuxraw_joypad *p
static void handle_plugged_pad(void)
{
int i, rc;
size_t event_size = sizeof(struct inotify_event) + NAME_MAX + 1;
size_t event_size = sizeof(struct inotify_event) + NAME_MAX + 1;
uint8_t *event_buf = (uint8_t*)calloc(1, event_size);
if (!event_buf)
@ -211,7 +209,7 @@ retry:
for (i = 0; i < ret; i++)
{
if (events[i].data.ptr)
poll_pad((struct linuxraw_joypad*)events[i].data.ptr);
linuxraw_poll_pad((struct linuxraw_joypad*)events[i].data.ptr);
else
handle_plugged_pad();
}
@ -228,7 +226,7 @@ static bool linuxraw_joypad_init(void)
unsigned i;
settings_t *settings = config_get_ptr();
g_epoll = epoll_create(MAX_USERS + 1);
g_epoll = epoll_create(MAX_USERS + 1);
if (g_epoll < 0)
return false;
@ -255,7 +253,7 @@ static bool linuxraw_joypad_init(void)
/* TODO - implement VID/PID? */
input_config_autoconfigure_joypad(&params);
poll_pad(pad);
linuxraw_poll_pad(pad);
}
else
input_config_autoconfigure_joypad(&params);

View File

@ -14,7 +14,6 @@
*/
#include "../input_autodetect.h"
#include "../input_common.h"
#include "../../general.h"
#include <unistd.h>
#include <stdint.h>
@ -109,11 +108,11 @@ static void parport_poll_pad(struct parport_joypad *pad)
static bool parport_joypad_init_pad(const char *path, struct parport_joypad *pad)
{
int i;
int datadir = 1; /* read */
char data;
struct ppdev_frob_struct frob;
bool set_control = false;
int mode = IEEE1284_MODE_BYTE;
int datadir = 1; /* read */
bool set_control = false;
int mode = IEEE1284_MODE_BYTE;
settings_t *settings = config_get_ptr();
if (pad->fd >= 0)
@ -122,9 +121,9 @@ static bool parport_joypad_init_pad(const char *path, struct parport_joypad *pad
if (access(path, R_OK | W_OK) < 0)
return false;
pad->fd = open(path, O_RDWR | O_NONBLOCK);
pad->fd = open(path, O_RDWR | O_NONBLOCK);
*pad->ident = '\0';
if (pad->fd >= 0)
{
RARCH_LOG("[Joypad]: Found parallel port: %s\n", path);
@ -208,8 +207,8 @@ static void parport_joypad_poll(void)
static void destroy_pad(struct parport_joypad *pad)
{
char data;
data = pad->saved_data;
char data = pad->saved_data;
if (ioctl(pad->fd, PPWDATA, &data) < 0)
RARCH_ERR("[Joypad]: Failed to restore original data register on %s\n", pad->ident);
@ -231,7 +230,7 @@ static bool parport_joypad_init(void)
bool found_disabled_button;
char buf[PARPORT_NUM_BUTTONS * 3 + 1];
char pin[3 + 1];
settings_t *settings = config_get_ptr();
settings_t *settings = config_get_ptr();
autoconfig_params_t params = {{0}};
memset(buf, 0, PARPORT_NUM_BUTTONS * 3 + 1);

View File

@ -35,7 +35,7 @@ static INLINE int16_t convert_u8_to_s16(uint8_t val)
static const char *ps3_joypad_name(unsigned pad)
{
settings_t *settings = config_get_ptr();
return settings->input.device_names[pad];
return settings ? settings->input.device_names[pad] : NULL;
}
static bool ps3_joypad_init(void)
@ -77,8 +77,10 @@ static uint64_t ps3_joypad_get_buttons(unsigned port_num)
static int16_t ps3_joypad_axis(unsigned port_num, uint32_t joyaxis)
{
int val = 0, axis = -1;
bool is_neg = false, is_pos = false;
int val = 0;
int axis = -1;
bool is_neg = false;
bool is_pos = false;
if (joyaxis == AXIS_NONE || port_num >= MAX_PADS)
return 0;

View File

@ -15,7 +15,6 @@
*/
#include "../input_autodetect.h"
#include "../input_common.h"
#include "SDL.h"
#include "../../general.h"
@ -25,7 +24,7 @@ typedef struct _sdl_joypad
#ifdef HAVE_SDL2
SDL_GameController *controller;
SDL_Haptic *haptic;
int rumble_effect; // -1 = not initialized, -2 = error/unsupported
int rumble_effect; /* -1 = not initialized, -2 = error/unsupported */
#endif
unsigned num_axes;
unsigned num_buttons;
@ -46,7 +45,7 @@ static sdl_joypad_t sdl_pads[MAX_USERS];
static bool g_has_haptic;
#endif
static const char* pad_name(unsigned id)
static const char* sdl_pad_name(unsigned id)
{
#ifdef HAVE_SDL2
if (sdl_pads[id].controller)
@ -57,7 +56,7 @@ static const char* pad_name(unsigned id)
#endif
}
static uint8_t pad_get_button(sdl_joypad_t *pad, unsigned button)
static uint8_t sdl_pad_get_button(sdl_joypad_t *pad, unsigned button)
{
#ifdef HAVE_SDL2
/* TODO: see if a LUT like winxinput_joypad.c's button_index_to_bitmap_code is needed. */
@ -67,16 +66,16 @@ static uint8_t pad_get_button(sdl_joypad_t *pad, unsigned button)
return SDL_JoystickGetButton(pad->joypad, button);
}
static uint8_t pad_get_hat(sdl_joypad_t *pad, unsigned hat)
static uint8_t sdl_pad_get_hat(sdl_joypad_t *pad, unsigned hat)
{
#ifdef HAVE_SDL2
if (pad->controller)
return pad_get_button(pad, hat);
return sdl_pad_get_button(pad, hat);
#endif
return SDL_JoystickGetHat(pad->joypad, hat);
}
static int16_t pad_get_axis(sdl_joypad_t *pad, unsigned axis)
static int16_t sdl_pad_get_axis(sdl_joypad_t *pad, unsigned axis)
{
#ifdef HAVE_SDL2
/* TODO: see if a rarch <-> sdl translation is needed. */
@ -86,13 +85,13 @@ static int16_t pad_get_axis(sdl_joypad_t *pad, unsigned axis)
return SDL_JoystickGetAxis(pad->joypad, axis);
}
static void pad_connect(unsigned id)
static void sdl_pad_connect(unsigned id)
{
sdl_joypad_t *pad = (sdl_joypad_t*)&sdl_pads[id];
bool success = false;
int32_t product = 0;
int32_t vendor = 0;
settings_t *settings = config_get_ptr();
sdl_joypad_t *pad = (sdl_joypad_t*)&sdl_pads[id];
bool success = false;
int32_t product = 0;
int32_t vendor = 0;
settings_t *settings = config_get_ptr();
autoconfig_params_t params = {{0}};
#ifdef HAVE_SDL2
@ -125,21 +124,21 @@ static void pad_connect(unsigned id)
return;
}
strlcpy(settings->input.device_names[id], pad_name(id), sizeof(settings->input.device_names[id]));
strlcpy(settings->input.device_names[id], sdl_pad_name(id), sizeof(settings->input.device_names[id]));
#ifdef HAVE_SDL2
guid = SDL_JoystickGetGUID(pad->joypad);
guid_ptr = (uint16_t*)guid.data;
guid = SDL_JoystickGetGUID(pad->joypad);
guid_ptr = (uint16_t*)guid.data;
#ifdef __linux
vendor = guid_ptr[2];
product = guid_ptr[4];
vendor = guid_ptr[2];
product = guid_ptr[4];
#elif _WIN32
vendor = guid_ptr[0];
product = guid_ptr[1];
vendor = guid_ptr[0];
product = guid_ptr[1];
#endif
#endif
params.idx = id;
strlcpy(params.name, pad_name(id), sizeof(params.name));
strlcpy(params.name, sdl_pad_name(id), sizeof(params.name));
params.vid = vendor;
params.pid = product;
strlcpy(params.driver, sdl_joypad.ident, sizeof(params.driver));
@ -147,7 +146,7 @@ static void pad_connect(unsigned id)
input_config_autoconfigure_joypad(&params);
RARCH_LOG("[SDL]: Joypad #%u (%04x:%04x) connected: %s.\n", id, vendor,
product, pad_name(id));
product, sdl_pad_name(id));
#ifdef HAVE_SDL2
@ -193,7 +192,7 @@ static void pad_connect(unsigned id)
#endif
}
static void pad_disconnect(unsigned id)
static void sdl_pad_disconnect(unsigned id)
{
settings_t *settings = config_get_ptr();
#ifdef HAVE_SDL2
@ -222,7 +221,7 @@ static void sdl_joypad_destroy(void)
{
unsigned i;
for (i = 0; i < MAX_USERS; i++)
pad_disconnect(i);
sdl_pad_disconnect(i);
SDL_QuitSubSystem(g_subsystem);
memset(sdl_pads, 0, sizeof(sdl_pads));
@ -230,7 +229,7 @@ static void sdl_joypad_destroy(void)
static bool sdl_joypad_init(void)
{
unsigned i;
unsigned i, num_sticks;
if (SDL_WasInit(0) == 0)
{
@ -251,12 +250,12 @@ static bool sdl_joypad_init(void)
memset(sdl_pads, 0, sizeof(sdl_pads));
unsigned num_sticks = SDL_NumJoysticks();
num_sticks = SDL_NumJoysticks();
if (num_sticks > MAX_USERS)
num_sticks = MAX_USERS;
for (i = 0; i < num_sticks; i++)
pad_connect(i);
sdl_pad_connect(i);
#ifndef HAVE_SDL2
/* quit if no joypad is detected. */
@ -280,21 +279,24 @@ error:
static bool sdl_joypad_button(unsigned port, uint16_t joykey)
{
sdl_joypad_t *pad = NULL;
if (joykey == NO_BTN)
return false;
sdl_joypad_t *pad = (sdl_joypad_t*)&sdl_pads[port];
pad = (sdl_joypad_t*)&sdl_pads[port];
if (!pad->joypad)
return false;
// Check hat.
/* Check hat. */
if (GET_HAT_DIR(joykey))
{
uint8_t dir;
uint16_t hat = GET_HAT(joykey);
if (hat >= pad->num_hats)
return false;
Uint8 dir = pad_get_hat(pad, hat);
dir = sdl_pad_get_hat(pad, hat);
switch (GET_HAT_DIR(joykey))
{
case HAT_UP_MASK:
@ -311,8 +313,8 @@ static bool sdl_joypad_button(unsigned port, uint16_t joykey)
return false;
}
// Check the button
if (joykey < pad->num_buttons && pad_get_button(pad, joykey))
/* Check the button */
if (joykey < pad->num_buttons && sdl_pad_get_button(pad, joykey))
return true;
return false;
@ -330,16 +332,16 @@ static int16_t sdl_joypad_axis(unsigned port, uint32_t joyaxis)
int16_t val = 0;
if (AXIS_NEG_GET(joyaxis) < pad->num_axes)
{
val = pad_get_axis(pad, AXIS_NEG_GET(joyaxis));
val = sdl_pad_get_axis(pad, AXIS_NEG_GET(joyaxis));
if (val > 0)
val = 0;
else if (val < -0x7fff) // -0x8000 can cause trouble if we later abs() it.
else if (val < -0x7fff) /* -0x8000 can cause trouble if we later abs() it. */
val = -0x7fff;
}
else if (AXIS_POS_GET(joyaxis) < pad->num_axes)
{
val = pad_get_axis(pad, AXIS_POS_GET(joyaxis));
val = sdl_pad_get_axis(pad, AXIS_POS_GET(joyaxis));
if (val < 0)
val = 0;
@ -354,15 +356,18 @@ static void sdl_joypad_poll(void)
SDL_Event event;
SDL_PumpEvents();
while (SDL_PeepEvents(&event, 1, SDL_GETEVENT, SDL_JOYDEVICEADDED, SDL_JOYDEVICEREMOVED) > 0)
while (SDL_PeepEvents(&event, 1,
SDL_GETEVENT, SDL_JOYDEVICEADDED, SDL_JOYDEVICEREMOVED) > 0)
{
if (event.type == SDL_JOYDEVICEADDED)
switch (event.type)
{
pad_connect(event.jdevice.which);
}
else if (event.type == SDL_JOYDEVICEREMOVED)
{
pad_disconnect(event.jdevice.which);
case SDL_JOYDEVICEADDED:
sdl_pad_connect(event.jdevice.which);
break;
case SDL_JOYDEVICEREMOVED:
sdl_pad_disconnect(event.jdevice.which);
break;
}
}
#else
@ -381,15 +386,20 @@ static bool sdl_joypad_set_rumble(unsigned pad, enum retro_rumble_effect effect,
if (!joypad->joypad || !joypad->haptic)
return false;
efx.type = SDL_HAPTIC_LEFTRIGHT;
efx.leftright.type = SDL_HAPTIC_LEFTRIGHT;
efx.type = SDL_HAPTIC_LEFTRIGHT;
efx.leftright.type = SDL_HAPTIC_LEFTRIGHT;
efx.leftright.length = 5000;
switch (effect)
{
case RETRO_RUMBLE_STRONG: efx.leftright.large_magnitude = strength; break;
case RETRO_RUMBLE_WEAK: efx.leftright.small_magnitude = strength; break;
default: return false;
case RETRO_RUMBLE_STRONG:
efx.leftright.large_magnitude = strength;
break;
case RETRO_RUMBLE_WEAK:
efx.leftright.small_magnitude = strength;
break;
default:
return false;
}
if (joypad->rumble_effect == -1)
@ -430,7 +440,7 @@ static const char *sdl_joypad_name(unsigned pad)
if (pad >= MAX_USERS)
return NULL;
return pad_name(pad);
return sdl_pad_name(pad);
}
rarch_joypad_driver_t sdl_joypad = {

View File

@ -14,9 +14,7 @@
*/
#include "../input_autodetect.h"
#include "../input_common.h"
#include "../../general.h"
#include "../../runloop.h"
#include <unistd.h>
#include <stdint.h>
#include <string.h>

View File

@ -36,7 +36,7 @@ static const char* const XBOX_CONTROLLER_NAMES[4] =
static const char *xdk_joypad_name(unsigned pad)
{
settings_t *settings = config_get_ptr();
return settings->input.device_names[pad];
return settings ? settings->input.device_names[pad] : NULL;
}
static bool xdk_joypad_init(void)
@ -95,8 +95,11 @@ static uint64_t xdk_joypad_get_buttons(unsigned port_num)
static int16_t xdk_joypad_axis(unsigned port_num, uint32_t joyaxis)
{
int val = 0, axis = -1;
bool is_neg = false, is_pos = false;
int val = 0;
int axis = -1;
bool is_neg = false;
bool is_pos = false;
if (joyaxis == AXIS_NONE || port_num >= MAX_PADS)
return 0;
@ -139,12 +142,14 @@ static int16_t xdk_joypad_axis(unsigned port_num, uint32_t joyaxis)
static void xdk_joypad_poll(void)
{
unsigned port;
uint64_t *state_p1 = NULL;
uint64_t *lifecycle_state = NULL;
global_t *global = global_get_ptr();
#if defined(_XBOX1)
#ifdef _XBOX1
unsigned int dwInsertions, dwRemovals;
#endif
uint64_t *state_p1 = NULL;
uint64_t *lifecycle_state = NULL;
global_t *global = global_get_ptr();
#if defined(_XBOX1)
XGetDeviceChanges(XDEVICE_TYPE_GAMEPAD,
reinterpret_cast<PDWORD>(&dwInsertions),
reinterpret_cast<PDWORD>(&dwRemovals));

View File

@ -13,13 +13,14 @@
* If not, see <http://www.gnu.org/licenses/>.
*/
// Support 360 controllers on Windows.
// Said controllers do show under DInput but they have limitations in this mode;
// The triggers are combined rather than seperate and it is not possible to use
// the guide button.
// Some wrappers for other controllers also simulate xinput (as it is easier to implement)
// so this may be useful for those also.
/* Support 360 controllers on Windows.
* Said controllers do show under DInput but they have limitations in this mode;
* The triggers are combined rather than seperate and it is not possible to use
* the guide button.
*
* Some wrappers for other controllers also simulate xinput (as it is easier to implement)
* so this may be useful for those also.
**/
#include "../input_autodetect.h"
#include "../input_common.h"
@ -274,6 +275,7 @@ static bool winxinput_joypad_query_pad(unsigned pad)
static void winxinput_joypad_destroy(void)
{
unsigned i;
for (i = 0; i < 4; ++i)
memset(&g_winxinput_states[i], 0, sizeof(winxinput_joypad_state));